我目前正在使用Spring MVC4和hibernate 4开发一个应用程序。我已经实现了 hibernate 二级缓存来提高性能。如果我使用 Redis (这是一个内存中的数据结构存储,用作数据库,缓存等),性能会提高,但是会发生巨大变化吗?

最佳答案

如果您缓存什么是要缓存的东西并且避免缓存根本不应该缓存的数据,则可能会出现巨大的差异。情人眼中的美丽就像表演一样。使用 hibernate AS二级缓存提供程序时,应牢记以下几个方面:

否自定义序列化-占用大量内存的
如果您使用二级缓存,则将无法使用快速序列化框架(例如Kryo),并且必须坚持使用糟糕的Java可序列化框架。

在此之上,对于每种实体类型,您将具有一个单独的区域,并且在每个区域内,您将具有每个实体的每个键的条目。
就存储效率而言,这是低效的。

缺乏存储和分发丰富对象的能力
大多数现代缓存还具有计算网格功能,将您的对象分为许多小块,从而降低了您在保证数据共置的情况下执行分布式任务的能力。这在某种程度上取决于Grid提供程序,但是对于许多提供程序来说是一个限制。

次最佳性能
取决于您需要多少性能以及使用 hibernate 二级缓存的类型的应用程序是好是坏。就即插即用而言,这是件好事。……“有点……”不好,因为您永远都不会压缩本来会获得的性能。设计丰富的模型还意味着更多的前期工作和更多的OOP。

缓存本身上的有限查询功能
这取决于缓存提供程序,但是某些提供程序确实不能很好地执行带Where子句与ID不同的JOIN。例如,如果您尝试在Hazelcast上建立查询并在内存索引中进行查询,您将明白我的意思。

07-26 09:29
查看更多