Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Redis休眠二级缓存-它会提高性能吗?_Java_Spring_Hibernate_Caching_Redis - Fatal编程技术网

Java 使用Redis休眠二级缓存-它会提高性能吗?

Java 使用Redis休眠二级缓存-它会提高性能吗?,java,spring,hibernate,caching,redis,Java,Spring,Hibernate,Caching,Redis,我目前正在使用SpringMVC4和Hibernate4开发一个应用程序。为了提高性能,我已经实现了休眠二级缓存。如果我使用Redis,它是一种内存中的数据结构存储,用作数据库、缓存等,性能会提高,但会有很大的变化吗?是的,如果使用Redis,性能会得到提高 不,这不会是一个剧烈的变化 以上链接将帮助您找到将redis与您的项目集成的方法。您的问题已经在这里讨论过了。检查此链接: 这是最被接受的答案,我同意: 这实际上取决于您的应用程序查询模型和流量 要求 使用Redis/Hazelcast

我目前正在使用SpringMVC4和Hibernate4开发一个应用程序。为了提高性能,我已经实现了休眠二级缓存。如果我使用Redis,它是一种内存中的数据结构存储,用作数据库、缓存等,性能会提高,但会有很大的变化吗?

是的,如果使用Redis,性能会得到提高

不,这不会是一个剧烈的变化


以上链接将帮助您找到将redis与您的项目集成的方法。

您的问题已经在这里讨论过了。检查此链接:

这是最被接受的答案,我同意:

这实际上取决于您的应用程序查询模型和流量 要求

  • 使用Redis/Hazelcast可能会产生最好的性能,因为没有 再也不用往返DB了,但最终你会有一个标准化的 数据库中的数据和缓存中的非规范化副本会产生压力 在缓存更新策略上。因此,您可以在最短的时间内获得最佳性能 每当持久化数据丢失时实现缓存更新的成本 变化
  • 使用二级缓存更容易设置,但它只存储 实体id。还有一个查询缓存,存储 给定查询。因此,第二级缓存是一个两步过程,您可以 需要微调以获得最佳性能。当你执行 投影查询二级对象缓存对您没有帮助,因为它 仅在实体加载时操作。二级缓存的主要优点是 当数据发生变化时,更容易保持同步,尤其是 如果所有数据都通过hibernate持久化
  • 所以,如果你需要终极的 而且您不介意实现缓存更新逻辑 这确保了最小的最终一致性窗口,然后使用 外部缓存

    如果您只需要缓存实体(通常不会改变这一点) 通常)并且您主要通过Hibernate实体访问这些 加载,然后二级缓存可以帮助您


    希望有帮助

    如果缓存好缓存的内容并避免缓存根本不应该缓存的数据,则可能会出现巨大的差异。就像情人眼里出西施一样,表演也是如此。在使用hibernate作为二级缓存提供程序时,您应该考虑以下几个方面:

    无自定义序列化-内存密集型
    如果您使用二级缓存,您将无法使用像Kryo这样的快速序列化框架,并且必须坚持使用java serializable,这很糟糕

    除此之外,对于每个实体类型,您将有一个单独的区域,在每个区域内,您将为每个实体的每个键提供一个条目。 就内存效率而言,这是低效的

    缺乏存储和分发丰富对象的能力
    大多数现代缓存还提供了计算网格功能,将对象分割成许多小块,从而降低了执行分布式任务的能力,同时保证了数据的共享。这在一定程度上取决于网格提供商,但对许多人来说,这是一个限制

    次优性能
    根据您需要的性能和使用hibernate二级缓存的应用程序类型,二级缓存可能是一个好的选择,也可能是一个坏的选择。从即插即用的角度来看是好的……“有点……”不好,因为你永远不会压缩你本来可以获得的性能。此外,设计丰富的模型意味着更多的前期工作和OOP

    缓存本身的查询能力有限

    这取决于缓存提供程序,但有些提供程序确实不能很好地使用与ID不同的Where子句进行连接。例如,如果您尝试为Hazelcast上的查询构建内存索引,您将了解我的意思。

    这取决于移动

    如果您每秒有1000个或更多的请求,并且RAM不足,那么可以使用其他计算机上的redis节点来使用。这将大大提高您的RAM和请求速度

    但如果不是这样,就不要使用它

    请记住,您可以在稍后看到RAM和数据库连接池的使用情况时使用这种方法