【发布时间】:2017-02-08 00:18:08
【问题描述】:
我想知道 myBatis 缓存(本地和二级)如何处理分布式系统中的数据。我有 5 个针对 Oracle db 运行的实例,我使用 MyBatis 进行数据访问。所有 5 个实例都相同,但在不同的服务器上运行。 Mybatis 配置为使用 SESSION 缓存,也就是说当执行任何插入/删除/更新语句时缓存被清除。
当 1 个实例运行时,该服务器的本地缓存被清除。其他 4 个实例如何知道需要刷新/更新缓存?
【问题讨论】:
我想知道 myBatis 缓存(本地和二级)如何处理分布式系统中的数据。我有 5 个针对 Oracle db 运行的实例,我使用 MyBatis 进行数据访问。所有 5 个实例都相同,但在不同的服务器上运行。 Mybatis 配置为使用 SESSION 缓存,也就是说当执行任何插入/删除/更新语句时缓存被清除。
当 1 个实例运行时,该服务器的本地缓存被清除。其他 4 个实例如何知道需要刷新/更新缓存?
【问题讨论】:
如果您使用的是内置缓存,则不会。如果您在具有默认缓存的分布式环境中使用 MyBatis,则永远不要启用二级缓存,因为它们不知道彼此会发生什么,并且在发生更改时不会清除陈旧的缓存。
您需要设置外部缓存服务,例如 Ehcache 和 Redis,才能使 MyBatis 二级缓存可用。 请参考http://mybatis.org/ehcache-cache/和http://mybatis.org/redis-cache/
【讨论】:
提供曲目:
我猜所有实例都在负载均衡器后面,并且针对单个 Oracle 数据库运行。 Instances 节点最好在一个集群中,否则,它们如何相互通信。然后缓存可以在集群的节点之间共享,例如Jboss doc, working with Hibernate中所述。
问题更多是关于如何配置服务器(或应用程序,在beans.xml等文件中)使用MyBatis缓存。
如果 SessionFactory 被声明为 @ApplicationScoped,那就足够了。
【讨论】: