我目前正在使用 Spring MVC4 和 hibernate 4 开发应用程序。我已经实现了 hibernate 二级缓存 以提高性能。如果我使用 Redis,它是一种内存数据结构存储,用作数据库、缓存等,性能会有所提高,但会不会有很大的变化?
最佳答案
如果您缓存应该缓存的内容并避免缓 stub 本不应该缓存的数据,您可能会预料到会有很大的不同。就像美丽在旁观者的眼中一样,表演也是如此。以下是您在使用 hibernate AS 二级缓存提供程序时应该牢记的几个方面:
无自定义序列化 - 占用大量内存
如果您使用二级缓存,您将无法使用 Kryo 等快速序列化框架,并且必须坚持使用 java 可序列化,这很糟糕。
除此之外,对于每种实体类型,您将拥有一个单独的区域,并且在每个区域内,您将拥有每个实体的每个键的条目。 就内存效率而言,这是低效的。
缺乏存储和分发丰富对象的能力
大多数现代缓存还提供计算网格功能,将您的对象分割成许多小块,从而降低您执行分布式任务的能力,并保证数据位于同一位置。这在一定程度上取决于 Grid 提供者,但对许多人来说是一个限制。
次优性能
根据您需要多少性能以及您使用 hibernate 二级缓存的应用程序类型,这可能是一个好或坏的选择。就即插即用而言,它很好......“有点......”不好,因为你永远不会挤压你将获得的性能。此外,设计丰富的模型意味着更多的前期工作和更多的 OOP。
缓存本身的查询能力有限
这取决于缓存提供者,但某些提供者确实不擅长使用与 ID 不同的 Where 子句进行 JOIN。例如,如果您尝试为 Hazelcast 上的查询构建内存索引,您就会明白我的意思。
关于java - 使用 Redis hibernate 二级缓存 - 会提高性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46887296/