package com.monkeylessey.redis;
|
|
import com.monkeylessey.utils.ApplicationContextUtil;
|
import org.apache.ibatis.cache.Cache;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
/**
|
* mybatis二级缓存使用redis
|
* @author 29443
|
* @version 1.0
|
* @date 2022/4/11
|
*/
|
public class MybatisRedisCache implements Cache {
|
|
// 必须要定义一个id,以及id的构造函数(这个id是Mapper的namespace)
|
private final String id;
|
|
private RedisTemplate redisTemplate;
|
|
public MybatisRedisCache(String id) {
|
this.id = id;
|
System.out.println("id的值为:" + id);
|
// 因为Cache的实现类是mybatis实例化的,并不是由Spring容器管理。所以我们并不能直接注入RedisTemplate。
|
//redisTemplate = (RedisTemplate) ApplicationContextUtil.getBean("redisTemplate");
|
}
|
|
// getId()必须返回该id
|
@Override
|
public String getId() {
|
return id;
|
}
|
|
// 添加缓存
|
@Override
|
public void putObject(Object key, Object value) {
|
if (redisTemplate == null) {
|
redisTemplate = (RedisTemplate) ApplicationContextUtil.getBean("redisTemplate");
|
}
|
redisTemplate.opsForHash().put(id, key.toString(), value);
|
}
|
|
// 获取缓存
|
@Override
|
public Object getObject(Object key) {
|
if (redisTemplate == null) {
|
redisTemplate = (RedisTemplate) ApplicationContextUtil.getBean("redisTemplate");
|
}
|
return this.redisTemplate.opsForHash().get(id,key.toString());
|
}
|
|
// 从3.3.0开始,此方法仅在回滚期间调用
|
@Override
|
public Object removeObject(Object key) {
|
return null;
|
}
|
|
// 删除缓存
|
@Override
|
public void clear() {
|
if (redisTemplate == null) {
|
redisTemplate = (RedisTemplate) ApplicationContextUtil.getBean("redisTemplate");
|
}
|
redisTemplate.delete(id);
|
}
|
|
@Override
|
public int getSize() {
|
if (redisTemplate == null) {
|
redisTemplate = (RedisTemplate) ApplicationContextUtil.getBean("redisTemplate");
|
}
|
return Math.toIntExact(redisTemplate.opsForHash().size(id));
|
}
|
}
|