javaWeb中使用Redis缓存实例解析
直接进入主题:
一:serviceImpl定义:
@Service
publicclassJedisClientSingleServiceimplementsJedisClient{
@Autowired
privateJedisPooljedisPool;
@Override
publicStringget(Stringkey){
Jedisjedis=jedisPool.getResource();
Stringstring=jedis.get(key);
jedis.close();
returnstring;
}
@Override
publicStringset(Stringkey,Stringvalue){
Jedisjedis=jedisPool.getResource();
Stringstring=jedis.set(key,value);
jedis.close();
returnstring;
}
@Override
publicStringhget(Stringhkey,Stringkey){
Jedisjedis=jedisPool.getResource();
Stringstring=jedis.hget(hkey,key);
jedis.close();
returnstring;
}
@Override
publiclonghset(Stringhkey,Stringkey,Stringvalue){
Jedisjedis=jedisPool.getResource();
longresult=jedis.hset(hkey,key,value);
jedis.close();
returnresult;
}
@Override
publiclongincr(Stringkey){
Jedisjedis=jedisPool.getResource();
longresult=jedis.incr(key);
jedis.close();
returnresult;
}
@Override
publiclongexpire(Stringkey,intsecond){
Jedisjedis=jedisPool.getResource();
longresult=jedis.expire(key,second);
jedis.close();
returnresult;
}
@Override
publiclongttl(Stringkey){
Jedisjedis=jedisPool.getResource();
longresult=jedis.ttl(key);
jedis.close();
returnresult;
}
@Override
publiclongdel(Stringkey){
Jedisjedis=jedisPool.getResource();
longresult=jedis.del(key);
jedis.close();
returnresult;
}
@Override
publiclonghdel(Stringhkey,Stringkey){
Jedisjedis=jedisPool.getResource();
longresult=jedis.hdel(hkey,key);
jedis.close();
returnresult;
}
二:添加缓存出(一般写在service是层中):
publicListgetTreeGrid(){ //从缓存中获取内容 try{ StringcachString=jedisClientSingleService.hget(ALL_RESOURCES_NO_CONDITION,hashId); if(!StringUtils.isBlank(cachString)){ List list=JsonUtils.jsonStrToList(cachString,RoleResource.class); returnlist; } }catch(Exceptione){ e.printStackTrace(); } List list=sessionFactory.openSession().selectList("cn.sys.auth.entity.ResourcesMapper.getTreeGrid"); //将缓存中添加缓存 try{ //redsi只存字符串,把list转换换成字符串 StringcachString=JsonUtils.toJson(list); jedisClientSingleService.hset(ALL_RESOURCES_NO_CONDITION,hashId,cachString); }catch(Exceptione){ e.printStackTrace(); } returnlist; }
逻辑:先从缓存中取数据,如果缓存中没有,就去数据库中取,然后把数据存入缓存,下次查询时就会从缓存中取。
三:缓存的同步
问题来了,入过你修改或者删除了数据,下次取的时候,因为缓存中有数据便在缓存中取,这是数据库的数据与缓存中的数据不一致,便出现差异,这就要缓存同步了。
其实很简单,就是在修改,删除(如果添加也需要的话),执行下面操作:
1:删除缓存,处理数据,把数据放如缓存
2:删除缓存,处理数据(等查询数据的时候会把数据放入缓存,两种情况只是写缓存时间的区别)
try{
jedisClientSingleService.hdel(ALL_RESOURCES_NO_CONDITION,hashId);
}catch(Exceptione){
e.printStackTrace();
}
总结
以上就是本文关于javaWeb中使用Redis缓存实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!