mybatisplus自定义redis二级缓存管理器
时间: 2023-05-26 21:03:17 浏览: 123
MyBatis-Plus自带的Redis二级缓存默认使用了Jedis作为连接池,实现了比较简单的缓存管理,但是如果我们有自己定制的缓存管理器需求,可以通过继承`RedisCache`类并重写其中的方法来实现自定义的二级缓存管理器。
具体步骤如下:
1.继承`RedisCache`类并实现自己的缓存管理逻辑,例如:
```java
public class MyRedisCache extends RedisCache {
public MyRedisCache(String id) {
super(id);
}
@Override
public Object getObject(Object key) {
// 自定义缓存读取逻辑
}
@Override
public void putObject(Object key, Object value) {
// 自定义缓存写入逻辑
}
@Override
public Object removeObject(Object key) {
// 自定义缓存删除逻辑
}
//... 可以根据需要重写其他方法
}
```
2.覆盖MyBatis-Plus自带的Redis二级缓存配置,将自定义的缓存管理器作为二级缓存实现,例如:
```java
@Configuration
public class MybatisPlusConfig {
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Bean
public RedisCacheManager redisCacheManager() {
// 实现对指定缓存的自定义缓存管理器
RedisCacheWriter writer = RedisCacheWriter
.nonLockingRedisCacheWriter(redisConnectionFactory);
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
.entryTtl(Duration.ofMinutes(10));
Map<String, RedisCacheConfiguration> caches = new HashMap<>();
caches.put("user", config);
RedisCacheManager cacheManager = new RedisCacheManager(writer, config, caches);
cacheManager.setTransactionAware(false);
RedisCachePrefix cachePrefix = name -> "user:" + name + ":";
cacheManager.setCachePrefix(cachePrefix);
// 设置自定义的缓存管理器
cacheManager.setCaches(Collections.singletonMap("user", new MyRedisCache("user")));
return cacheManager;
}
}
```
通过上述配置可以发现,我们首先实现了一个自定义缓存管理器`MyRedisCache`,然后在`RedisCacheManager`中覆盖掉MyBatis-Plus自带的Redis二级缓存,将自定义的缓存管理器作为二级缓存实现。
最后在Mapper接口中启用二级缓存即可,例如:
```java
@CacheNamespace(implementation = MybatisRedisCache.class, eviction = MybatisRedisCache.class)
public interface UserMapper extends BaseMapper<User> {
//...
}
```
需要注意的是,在覆盖MyBatis-Plus自带的Redis二级缓存时,要确保缓存名称和之前在MyBatis配置文件中定义的缓存名称一致,否则设置无效。
阅读全文