mybatis二级缓存必须用到redis数据库吗

mybatis二级缓存必须用到redis数据库吗?
mybatis二级缓存必须用到redis数据库吗?

mybatis本身自带二级缓存,只不过只能是单服务器的,不能实现分布式缓存,所以才要整合redis实现二级缓存。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/384959
  • 这篇博客也不错, 你可以看下使用redis做mybatis的二级缓存
  • 除此之外, 这篇博客: mybatis plus使用redis作为二级缓存中的 1. mybatis-plus开启二级缓存 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    mybatis-plus.configuration.cache-enabled=true

  • 您还可以看一下 王振伟老师的mybatis快速入门到精通课程中的 mybatis框架简介 小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    使用Mybatis二级缓存时,并不一定需要使用Redis数据库来实现。Mybatis的二级缓存是mapper级别的缓存,多个SqlSession可以共用,是跨SqlSession的。因此,二级缓存可以存储到本地内存中,不一定需要使用分布式缓存,比如Redis。

    代码示例:

    1. 配置Mybatis全局参数开启二级缓存:
    <configuration>
      <settings>
        <setting name="cacheEnabled" value="true"/>
      </settings>
      ...
    </configuration>
    
    1. 配置Mapper映射文件开启二级缓存:
    <mapper namespace="com.example.mapper.UserMapper">
      <cache/>
      ...
    </mapper>
    
    1. 自定义二级缓存实现类:
    public class MybatisCustomCache implements Cache {
        private final String id;
        private Map<Object, Object> cache = new HashMap<>();
    
        public MybatisCustomCache(String id) {
            if (id == null) {
                throw new IllegalArgumentException("Cache instances require an ID");
            }
            this.id = id;
        }
    
        @Override
        public String getId() {
            return id;
        }
    
        @Override
        public void putObject(Object key, Object value) {
            cache.put(key, value);
        }
    
        @Override
        public Object getObject(Object key) {
            return cache.get(key);
        }
    
        @Override
        public Object removeObject(Object key) {
            return cache.remove(key);
        }
    
        @Override
        public void clear() {
            cache.clear();
        }
    
        @Override
        public int getSize() {
            return cache.size();
        }
    
        @Override
        public ReadWriteLock getReadWriteLock() {
            return null;
        }
    }
    
    1. 配置Mapper映射文件使用自定义缓存实现类:
    <mapper namespace="com.example.mapper.UserMapper">
      <cache type="com.example.cache.MybatisCustomCache"/>
      ...
    </mapper>
    

    总结起来,使用Mybatis二级缓存时,并不一定需要使用Redis数据库实现,可以通过自定义缓存实现类来存储缓存数据。但需要注意的是,二级缓存只适用于单表的情况,不建议用于多表联立,否则可能会出现数据不一致的问题。另外,二级缓存的使用需要根据具体的查询、修改操作来选择适合的应用场景。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^