mybatis二级缓存必须用到redis数据库吗?
mybatis二级缓存必须用到redis数据库吗?
mybatis本身自带二级缓存,只不过只能是单服务器的,不能实现分布式缓存,所以才要整合redis实现二级缓存。
不知道你这个问题是否已经解决, 如果还没有解决的话:mybatis-plus.configuration.cache-enabled=true
使用Mybatis二级缓存时,并不一定需要使用Redis数据库来实现。Mybatis的二级缓存是mapper级别的缓存,多个SqlSession可以共用,是跨SqlSession的。因此,二级缓存可以存储到本地内存中,不一定需要使用分布式缓存,比如Redis。
代码示例:
<configuration>
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
...
</configuration>
<mapper namespace="com.example.mapper.UserMapper">
<cache/>
...
</mapper>
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;
}
}
<mapper namespace="com.example.mapper.UserMapper">
<cache type="com.example.cache.MybatisCustomCache"/>
...
</mapper>
总结起来,使用Mybatis二级缓存时,并不一定需要使用Redis数据库实现,可以通过自定义缓存实现类来存储缓存数据。但需要注意的是,二级缓存只适用于单表的情况,不建议用于多表联立,否则可能会出现数据不一致的问题。另外,二级缓存的使用需要根据具体的查询、修改操作来选择适合的应用场景。