javaWeb中使用Redis缓存实例解析
发布时间:2020-12-14 20:10:40 所属栏目:Java 来源:网络整理
导读:直接进入主题: 一:serviceImpl定义: @Service public class JedisClientSingleService implements JedisClient {@Autowired private JedisPool jedisPool;@Override public String get(String key) {Jedis jedis = jedisPool.getResource();String string
直接进入主题: 一:serviceImpl定义: @Service public class JedisClientSingleService implements JedisClient { @Autowired private JedisPool jedisPool; @Override public String get(String key) { Jedis jedis = jedisPool.getResource(); String string = jedis.get(key); jedis.close(); return string; } @Override public String set(String key,String value) { Jedis jedis = jedisPool.getResource(); String string = jedis.set(key,value); jedis.close(); return string; } @Override public String hget(String hkey,String key) { Jedis jedis = jedisPool.getResource(); String string = jedis.hget(hkey,key); jedis.close(); return string; } @Override public long hset(String hkey,String key,String value) { Jedis jedis = jedisPool.getResource(); long result = jedis.hset(hkey,key,value); jedis.close(); return result; } @Override public long incr(String key) { Jedis jedis = jedisPool.getResource(); long result = jedis.incr(key); jedis.close(); return result; } @Override public long expire(String key,int second) { Jedis jedis = jedisPool.getResource(); long result = jedis.expire(key,second); jedis.close(); return result; } @Override public long ttl(String key) { Jedis jedis = jedisPool.getResource(); long result = jedis.ttl(key); jedis.close(); return result; } @Override public long del(String key) { Jedis jedis = jedisPool.getResource(); long result = jedis.del(key); jedis.close(); return result; } @Override public long hdel(String hkey,String key) { Jedis jedis = jedisPool.getResource(); long result = jedis.hdel(hkey,key); jedis.close(); return result; } 二:添加缓存出(一般写在service是层中): public List<RoleResource> getTreeGrid() { //从缓存中获取内容 try { String cachString = jedisClientSingleService.hget(ALL_RESOURCES_NO_CONDITION,hashId); if(!StringUtils.isBlank(cachString)){ List<RoleResource> list = JsonUtils.jsonStrToList(cachString,RoleResource.class) ; return list ; } } catch (Exception e) { e.printStackTrace(); } List<RoleResource> list =sessionFactory.openSession().selectList("cn.sys.auth.entity.ResourcesMapper.getTreeGrid"); //将缓存中添加缓存 try { //redsi只存字符串,把list转换换成字符串 String cachString =JsonUtils.toJson(list) ; jedisClientSingleService.hset(ALL_RESOURCES_NO_CONDITION,hashId,cachString) ; } catch (Exception e) { e.printStackTrace(); } return list; } 逻辑:先从缓存中取数据,如果缓存中没有,就去数据库中取,然后把数据存入缓存,下次查询时就会从缓存中取。 三:缓存的同步 问题来了,入过你修改或者删除了数据,下次取的时候,因为缓存中有数据便在缓存中取,这是数据库的数据与缓存中的数据不一致,便出现差异,这就要缓存同步了。 其实很简单,就是在修改,删除(如果添加也需要的话),执行下面操作: 1:删除缓存,处理数据,把数据放如缓存 2:删除缓存,处理数据(等查询数据的时候会把数据放入缓存,两种情况只是写缓存时间的区别) try { jedisClientSingleService.hdel(ALL_RESOURCES_NO_CONDITION,hashId); } catch (Exception e) { e.printStackTrace(); } 总结 以上就是本文关于javaWeb中使用Redis缓存实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |