我目前正在开发一个应用程序 Spring MVC4 和 冬眠4。我已经实施了 休眠二级缓存 用于提高性能。如果我使用 Redis的 这是一个内存数据结构存储,用作数据库,缓存等,性能会提高,但会是一个剧烈的变化吗?
我目前正在开发一个应用程序 Spring MVC4 和 冬眠4。我已经实施了 休眠二级缓存 用于提高性能。如果我使用 Redis的 这是一个内存数据结构存储,用作数据库,缓存等,性能会提高,但会是一个剧烈的变化吗?
如果你缓存好缓存的内容并避免缓存根本不应该缓存的数据,你可能会有很大的差异。就像美女在旁观者的眼中一样,表现也是如此。在使用hibernate AS二级缓存提供程序时,您应该记住以下几个方面:
无自定义序列化 - 内存密集型
如果你使用二级缓存,你将无法使用快速序列化框架作为Kryo,并将不得不坚持Java序列化,这很糟糕。
除此之外,对于每个实体类型,您将拥有一个单独的区域,并且在每个区域内,您将拥有每个实体的每个键的条目。 就内存效率而言,这是低效的。
缺乏存储和分发富对象的能力
大多数现代缓存还提供计算网格功能,将您的对象分割成许多小块,降低了执行分布式任务的能力,同时保证了数据的共存。这在一定程度上取决于Grid提供商,但对许多人来说这将是一个限制。
次优性能
使用hibernate二级缓存可能是一个好的或坏的选择,具体取决于您需要多少性能以及您使用的应用程序类型。很好的说它是即插即用....“有点......”很糟糕,因为你永远不会挤压你会获得的表现。设计丰富的模型意味着更多的前期工作和更多的OOP。
缓存本身有限的查询功能
这取决于缓存提供程序,但是一些提供程序实际上并不是在使用与ID不同的Where子句进行JOIN。例如,如果您尝试在Hazelcast上为查询构建内存索引,您将看到我的意思。
是的,如果你使用 Redis的,它会提高你的表现。
不,这不会是一个剧烈的变化。 :)
https://memorynotfound.com/spring-redis-application-configuration-example/
http://www.baeldung.com/spring-data-redis-tutorial
以上链接将帮助您找到与项目集成redis的方法。
这取决于运动。
如果您每秒有1000个或更多请求且RAM不足,则是,使用其他计算机上的redis节点进行一些使用。它将大大提高您的RAM和请求速度。
但如果不是,那就不要使用它。
请记住,稍后您将看到RAM和数据库连接池的使用情况时,可以使用此方法。
你的问题已在这里讨论过。检查此链接: 应用程序缓存v.s. hibernate二级缓存,哪个使用?
这是最受欢迎的答案,我同意这一点:
这实际上取决于您的应用程序查询模型和流量 需要。
- 使用Redis / Hazelcast可能会产生最佳性能,因为没有 是任何往返DB的往返,但你最终有一个规范化 DB中的数据和缓存中的非规范化副本会产生压力 在缓存更新策略上。所以你获得了最好的表现 每当持久数据执行缓存更新的成本 变化。
- 使用二级缓存更容易设置,但它只存储 id的实体。还有一个查询缓存,存储由a返回的id 给定查询。所以二级缓存是一个两步过程 需要微调才能获得最佳性能。当你执行 投影查询第二级对象缓存对你没有帮助,因为它 仅适用于实体负载。二级缓存的主要优点是 每当数据发生变化时,更容易保持同步,尤其是 如果你的所有数据都是由hibernate持久化的。
所以,如果你需要终极 性能,您不介意实现缓存更新逻辑 确保最小的最终一致性窗口,然后使用 外部缓存。
如果您只需要缓存实体(通常不会更改实体) 经常)你通常通过Hibernate实体访问它们 加载,然后二级缓存可以帮助你。
希望能帮助到你!