33-redis分布式缓存---缓存优化策略

/
/
/
/
/
package com.study.cache;
import com.study.util.ApplicationContextUtils;
import org.apache.ibatis.cache.Cache;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.util.DigestUtils;
//自定义redis缓存
public class RedisCache implements Cache {
//当前放入缓存的mapper.xml文件的namespace
private final String id;
//必须存在一个构造方法
public RedisCache(String id){
this.id = id;
}
//返回cache的唯一标识
@Override
public String getId() {
return this.id;
}
//缓存中放入值
@Override
public void putObject(Object key, Object value) {
System.out.println("key:" + key.toString());
System.out.println("value:" + value);
//通过我们的ApplicationContextUtils类获取我们的RedisTemplate
RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate");
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
//我们使用我们redis的hash来存放我们的数据,因为key hashKey hashValue
//key存放我们mapper的namespace,即我们这里的id hashKey存放我们的数据的key,hashValue存放我们数据的值
redisTemplate.opsForHash().put(id,getKeyToMd5(key.toString()),value);
}
//缓存中获取值
@Override
public Object getObject(Object key) {
System.out.println("key: " + key);
//获取我们的RedisTemplate
RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate");
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate.opsForHash().get(id, getKeyToMd5(key.toString()));
}
//这个方法为mybatis的保留方法,以后可能会实现
@Override
public Object removeObject(Object key) {
System.out.println("根据指定key删除缓存");
return null;
}
@Override
public void clear() {
System.out.println("清空缓存");
//获取我们的RedisTemplate
RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate");
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setKeySerializer(new StringRedisSerializer());
//删除我们的id即namaspace即可
redisTemplate.delete(id);
}
//用来计算缓存的数量
@Override
public int getSize() {
//获取hash中key value数量
return getRedisTemplate().opsForHash().size(id).intValue();
}
//获取我们的RedisTemplate
private RedisTemplate getRedisTemplate(){
RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate");
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
//对key进行md5加密
private String getKeyToMd5(String key){
String s = DigestUtils.md5DigestAsHex(key.getBytes());
return s;
}
}

浙公网安备 33010602011771号