当前位置: 首页 > 知识库问答 >
问题:

使用Spring Cache和Hazelcast Near Cache

刘辰钊
2023-03-14

我正在尝试用Hazelcast配置Spring CacheManager。另外,我想配置Hazelcast的近缓存,这样我就可以检索缓存对象的(已经反序列化的)实例。

这是我的配置


    @Bean
    public HazelcastInstance hazelcastConfig() {
        val config = new Config().setInstanceName("instance");
        val serializationConfig = config.getSerializationConfig();
        addCacheConfig(config, "USERS")
        serializationConfig.addSerializerConfig(new SerializerConfig()
                        .setImplementation(getSerializer())
                        .setTypeClass(User.class)
        return Hazelcast.newHazelcastInstance(config);
    }

    @Bean
    public CacheManager cacheManager(HazelcastInstance hazelcastInstance) {
        return new HazelcastCacheManager(hazelcastInstance);
    }

    @Bean
    public PlatformTransactionManager chainedTransactionManager(PlatformTransactionManager jpaTransactionManager, HazelcastInstance hazelcastInstance) {
        return new ChainedTransactionManager(
                jpaTransactionManager,
                new HazelcastTransactionManager(hazelcastInstance)
        );
    }

    // Configure Near Cache
    private void addCacheConfig(Config config, String cacheName) {
        val nearCacheConfig = new NearCacheConfig()
                .setInMemoryFormat(OBJECT)
                .setCacheLocalEntries(true)
                .setInvalidateOnChange(false)
                .setTimeToLiveSeconds(hazelcastProperties.getTimeToLiveSeconds())
                .setEvictionConfig(new EvictionConfig()
                        .setMaxSizePolicy(ENTRY_COUNT)
                        .setEvictionPolicy(EvictionPolicy.LRU)
                        .setSize(hazelcastProperties.getMaxEntriesSize()));
        config.getMapConfig(cacheName)
                .setInMemoryFormat(BINARY)
                .setNearCacheConfig(nearCacheConfig);
    }

从缓存中保存和检索工作正常,但每次缓存命中时,我的对象都会被反序列化。我想使用NearCache避免这种反序列化时间,但它不起作用。我还尝试了二进制内存格式。

Hazelcast能做到这一点吗?或者,即使我有NearCache,也总是执行反序列化吗?

谢谢

共有1个答案

怀飞扬
2023-03-14

因此,经过几次修改,它现在开始工作了。以下是我的结论:

因此,为了让NearCache与Spring Cache一起工作,所有缓存的对象都应该是不可变的。这意味着最终类和最终字段。另外,它们都应该扩展Serializable接口。

 类似资料:
  • 问题内容: 我的任务是利用SpringCache作为我们的一项服务,以减少数据库查找的次数。在测试实现时,我注意到一些可缓存操作通过日志语句多次调用。调查显示,如果在可缓存的方法中调用了可缓存的操作,则嵌套操作根本不会被缓存。因此,嵌套操作的后续调用将导致进一步的查找。 下面列出了描述问题的简单单元测试: 这两种方法的实际工作对于测试用例本身并不重要,因为仅应测试缓存。 我以某种方式理解了为什么不

  • 本文向大家介绍浅谈SpringCache与redis集成实现缓存解决方案,包括了浅谈SpringCache与redis集成实现缓存解决方案的使用技巧和注意事项,需要的朋友参考一下 缓存可以说是加速服务响应速度的一种非常有效并且简单的方式。在缓存领域,有很多知名的框架,如EhCache 、Guava、HazelCast等。Redis作为key-value型数据库,由于他的这一特性,Redis也成为一

  • 我正在学习Spring Boot,并试图实现身份验证。我有一个注册页面,它使用POST方法发送新用户数据以存储在内存数据库中。奇怪的是,当我提交表单时,GET方法是唯一被调用的方法。这是我的超文本标记语言文件: 如您所见,表单上有< code>method="POST"属性。 这是我的注册控制器: 我已经将放在@GetMap()方法中,即使我点击注册表单上的提交按钮,也可以在我的服务器上看到该方法

  • 问题内容: 我想在其他线程不再引用它时正确关闭Closeable对象。 我写了一些小测试,但是将对象加入队列后,get方法返回null,即poll方法返回没有引用的正确Object。 提前致谢。任何帮助将不胜感激。 问题答案: 首先,如果仅是关闭,请使用。接下来,从参考队列中,不保证您将获得参考。并且您将永远不会找回实际的对象(参考对象)。 如果要确保已关闭,则必须自己跟踪它们。然后,当您使用参考

  • 问题内容: 我目前正在研究Mockito框架,并且已经使用Mockito创建了一些测试用例。但后来我读到的不是调用模拟( SomeClass的 的.class)我可以使用和-我需要做的唯一一件事情就是我的注释测试类或使用的方法。 但这不起作用-似乎不会起作用!这是我的2个代码修订-一个使用注释,另一个不使用注释。 我究竟做错了什么? 正如我所说-这项工作很棒。但是以下内容不会: 这是课程: 我想念

  • 问题内容: 我对Python相对较新(我使用MATLAB的次数更多)。我本质上希望能够制作和保存动画。因此,我去检查了它的工作方式,发现了这一点:http : //jakevdp.github.io/blog/2012/08/18/matplotlib- animation-tutorial/ 我直接将代码复制/粘贴到IPython Notebook中。 我了解必须安装ffmpeg,我认为我已经安

  • 我已经在运行El Capitan的Mac上安装了Python 2.7和3.5。此外,我在python中使用了Symphy包(与pip一起安装)。我想用Pypy(用自制软件安装)运行我的代码,但Pypy似乎找不到Sympy,并说: “没有名为sympy的模块” 我根本不是专家,现在不知道该怎么办。Sympy可以很好地与Python2和3配合使用,但不能与Pypy配合使用。 我感谢你的每一个回答,提前

  • 简介 Vargrant是一个管理虚拟机环境的工具,允许你在不同的虚拟化和云平台 配置和使用可再生的工作环境.它也集成了Ansible作为对虚拟机的服务提供者,而且这两个工具配合的很好. 这个指南会叙述如何同时配合使用Vagrant和Ansible. 如果你对Vagrant还不了解,你应该看看这个文档 the documentation. 假设你已经安装了Ansible,在Git上检测,运行的也很好