java - 使用 Redis hibernate 二级缓存 - 会提高性能吗?

标签 java spring hibernate caching redis

我目前正在使用 Spring MVC4hibernate 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/

相关文章:

java - 具有优先级的消息处理

java - 想要使用嵌入式凭据访问 Google Cloud Datastore

java - 无法为 log4j 设置 LevelRangeFilter

java - 使用 spring Rest api

java - 一次从数据库中获取所有问题还是一次获取一个问题?

java - json.simple.JSONObject 无法使用 AWS Lambda JAVA 转换为 java.lang.String

java - 为什么我在 Selenium 中的同一个 WebElement 上得到不同的结果?

java - 使用 Hibernate 时如何打印带有参数值的查询字符串

java - 自动生成唯一的 varchar 字段 - mySQL、Java、Hibernate

java - 为什么我从 Hibernate 多对多关系(外键约束)中得到 java.sql.SQLIntegrityConstraintViolationException