public class UserDefineRedisCache implements Cache {
private Logger logger = LoggerFactory.getLogger(UserDefineRedisCache.class);
private String id;//存储namespace
private long timeout = 300;
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
private RedisTemplate redisTemplate;
private RedisTemplate getRedisTemplate() {
return (RedisTemplate) ApplicationContextHolder.getBean("redisTemplate");
}
public UserDefineRedisCache(String id) {
this.id = id;
}
@Override
public String getId() {
return id;
}
@Override
public void putObject(Object key, Object value) {
if (redisTemplate == null) {
redisTemplate = getRedisTemplate();
}
logger.debug("将查询结果存储到cache.key:" + key + ",value:" + value);
ValueOperations opsForValue = redisTemplate.opsForValue();
opsForValue.set(key, value, timeout, TimeUnit.SECONDS);
}
@Override
public Object getObject(Object key) {
if (redisTemplate == null) {
redisTemplate = getRedisTemplate();
}
logger.debug("从缓存中读取结果.key:" + key);
ValueOperations opsForValue = redisTemplate.opsForValue();
return opsForValue.get(key);
}
@Override
public Object removeObject(Object key) {
if (redisTemplate == null) {
redisTemplate = getRedisTemplate();
}
logger.debug("从缓存中清除.key:" + key);
ValueOperations opsForValue = redisTemplate.opsForValue();
Object value = opsForValue.get(key);
redisTemplate.delete(key);
return value;
}
@Override
public void clear() {
if (redisTemplate == null) {
redisTemplate = getRedisTemplate();
}
logger.debug("从缓存中清除缓存区所有数据");
redisTemplate.execute(new RedisCallback() {
@Override
public Object doInRedis(RedisConnection redisConnection) throws DataAccessException {
redisConnection.flushDb();
return null;
}
});
}
@Override
public int getSize() {
return 0;
}
@Override
public ReadWriteLock getReadWriteLock() {
return readWriteLock;
}
public void setTimeout(long timeout) {
this.timeout = timeout;
}
}
Redis缓存的实现
最新推荐文章于 2025-02-28 08:15:00 发布