MybatisPlus二级缓存配置redis
版本环境
IntelliJ IDEA
:2020.1.2
java
:jdk
-14.0.1
springboot
:v2.3.4.RELEASE
gradle
:gradle
-6.7
-rc
-4
Redis server v=6.0.5
springfox(swagger):version: '3.0.0'
swagger-bootstrap-ui:version: '1.9.6'
mysql-connector-java:version: '8.0.16'
mybatis-plus-boot-starter:version: '3.4.0'
redis配置
#cache for redis
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
MybatisRedisCache
@Slf4j
public class MybatisRedisCache implements Cache {
private final ReadWriteLock readWriteLock
= new ReentrantReadWriteLock(true);
private RedisTemplate
<String, Object> redisTemplate
;
private String id
;
public MybatisRedisCache(final String id
) {
if (id
== null
) {
throw new IllegalArgumentException("Cache instances require an ID");
}
this.id
= id
;
}
public RedisTemplate
<String, Object> getRedisTemplate() {
redisTemplate
= (RedisTemplate
<String, Object>) ApplicationContextUtils
.getBean("redisTemplate");
Jackson2JsonRedisSerializer serializer
= new Jackson2JsonRedisSerializer(Object
.class);
ObjectMapper mapper
= new ObjectMapper();
mapper
.setVisibility(PropertyAccessor
.ALL
, JsonAutoDetect
.Visibility
.ANY
);
mapper
.enableDefaultTyping(ObjectMapper
.DefaultTyping
.NON_FINAL
);
serializer
.setObjectMapper(mapper
);
redisTemplate
.setKeySerializer(new StringRedisSerializer());
redisTemplate
.setValueSerializer(serializer
);
redisTemplate
.setHashKeySerializer(new StringRedisSerializer());
redisTemplate
.setHashValueSerializer(serializer
);
redisTemplate
.afterPropertiesSet();
return redisTemplate
;
}
@Override
public String
getId() {
return this.id
;
}
@Override
public void putObject(Object key
, Object value
) {
if (redisTemplate
== null
) {
redisTemplate
= getRedisTemplate();
}
if (value
!= null
) {
redisTemplate
.opsForValue().set(key
.toString(), value
);
}
}
@Override
public Object
getObject(Object key
) {
if (redisTemplate
== null
) {
redisTemplate
= getRedisTemplate();
}
try {
if (key
!= null
) {
return redisTemplate
.opsForValue().get(key
.toString());
}
} catch (Exception e
) {
e
.printStackTrace();
log
.error("缓存出错 ");
}
return null
;
}
@Override
public Object
removeObject(Object key
) {
if (redisTemplate
== null
) {
redisTemplate
= getRedisTemplate();
}
if (key
!= null
) {
redisTemplate
.delete(key
.toString());
}
return null
;
}
@Override
public void clear() {
log
.debug("清空缓存");
if (redisTemplate
== null
) {
redisTemplate
= getRedisTemplate();
}
Set
<String> keys
= redisTemplate
.keys("*:" + this.id
+ "*");
if (!CollectionUtils
.isEmpty(keys
)) {
redisTemplate
.delete(keys
);
}
}
@Override
public int getSize() {
if (redisTemplate
== null
) {
redisTemplate
= getRedisTemplate();
}
Long size
= redisTemplate
.execute((RedisCallback
<Long>) RedisServerCommands
::dbSize
);
return size
.intValue();
}
@Override
public ReadWriteLock
getReadWriteLock() {
return this.readWriteLock
;
}
}