我想知道myBatis缓存(本地和二级)是如何在分布式系统中处理数据的。我有5个实例在Oracle db上运行,并且我使用MyBatis进行数据访问。这5个实例都是相同的,但运行在不同的服务器上。Mybatis被配置为使用会话缓存,也就是说,当执行任何insert/delete/update语句时,缓存都会被清除。
当1个实例运行时,该服务器的本地缓存将被清除。其他4个实例如何知道缓存需要刷新/续费?
发布于 2016-11-14 18:50:05
给出一个轨迹:
我猜所有实例都在负载均衡器之后,并在单个Oracle DB上运行。实例节点最好在集群中,否则,它们如何相互通信。则可以在集群的节点之间共享高速缓存,例如,如Jboss doc, working with Hibernate中所述。
问题更多的是如何配置服务器(或beans.xml等文件中的应用程序)以使用MyBatis缓存。
如果SessionFactory被声明为@ApplicationScoped,那就足够了。
发布于 2020-09-19 11:15:54
如果你使用的是内置缓存,那么它们不会。如果你在使用默认缓存的分布式环境中使用MyBatis,请不要启用二级缓存,因为它们不知道彼此之间会发生什么,并且在发生更改时不会清除过时的缓存。
您需要设置外部缓存服务,例如Ehcache和Redis,以使MyBatis二级缓存可用。请参考http://mybatis.org/ehcache-cache/和http://mybatis.org/redis-cache/
https://stackoverflow.com/questions/39774251
复制相似问题