介绍
怎么在javaWeb项目中使用复述,进行缓存?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
一:serviceImpl定义:
@Service public 才能class JedisClientSingleService  implements JedisClient { @Autowired ,,,private JedisPool jedisPool; @Override ,,,public String 得到(String 键),{ Jedis Jedis =, jedisPool.getResource (); String String =, jedis.get(关键); jedis.close (); return 字符串; } @Override ,,,public String 设置(String 关键,String 价值),{ Jedis Jedis =, jedisPool.getResource (); String String =, jedis.set(键,值); jedis.close (); return 字符串; } @Override ,,,public String hget (String 根键,String 键),{ Jedis Jedis =, jedisPool.getResource (); String String =, jedis.hget(根键,键); jedis.close (); return 字符串; } @Override ,,,public long hset (String 根键,String 关键,,String 价值),{ Jedis Jedis =, jedisPool.getResource (); long result =, jedis.hset(根键,键,值); jedis.close (); return 结果; } @Override ,,,public long 增加(String 键),{ Jedis Jedis =, jedisPool.getResource (); long result =, jedis.incr(关键); jedis.close (); return 结果; } @Override ,,,public long 到期(String 关键,int 第二),{ Jedis Jedis =, jedisPool.getResource (); long result =, jedis.expire(关键,,第二); jedis.close (); return 结果; } @Override ,,,public long ttl (String 键),{ Jedis Jedis =, jedisPool.getResource (); long result =, jedis.ttl(关键); jedis.close (); return 结果; } @Override ,,,public long 德尔(String 键),{ Jedis Jedis =, jedisPool.getResource (); long result =, jedis.del(关键); jedis.close (); return 结果; } @Override ,,,public long hdel (String 根键,String 键),{ Jedis Jedis =, jedisPool.getResource (); long result =, jedis.hdel(根键,键); jedis.close (); return 结果; }
二:添加缓存出(一般写在服务是层中):
public List, getTreeGrid (), {, ,,,//从缓存中获取内容, ,,,try {, ,,,,,String cachString =, jedisClientSingleService.hget (ALL_RESOURCES_NO_CONDITION,,哈希德),, ,,,,,如果(! StringUtils.isBlank (cachString)) {, ,,,,,,,List , list =, JsonUtils.jsonStrToList (cachString, RoleResource.class),,, ,,,,,,,return list ,, ,,,,,}, ,,,},catch (Exception e), {, ,,,,,e.printStackTrace (),, ,,,}, ,,,, ,,,List , list =sessionFactory.openSession () .selectList (“cn.sys.auth.entity.ResourcesMapper.getTreeGrid");, ,,,//将缓存中添加缓存, ,,,try {, ,,,,,//redsi只存字符串,把名单转换换成字符串, ,,,,,String cachString =JsonUtils.toJson(列表),,, ,,,,,jedisClientSingleService.hset (ALL_RESOURCES_NO_CONDITION,,哈希德,,cachString),,, ,,,},catch (Exception e), {, ,,,,,e.printStackTrace (),, ,,,}, ,,,return 列表,, 以前,,}> 逻辑:先从缓存中取数据,如果缓存中没有,就去数据库中取,然后把数据存入缓存,下次查询时就会从缓存中取。
三:缓存的同步
问题来了,入过你修改或者删除了数据,下次取的时候,因为缓存中有数据便在缓存中取,这是数据库的数据与缓存中的数据不一致,便出现差异,这就要缓存同步了。
其实很简单,就是在修改,删除(如果添加也需要的话),执行下面操作:
1:删除缓存,处理数据,把数据放如缓存
2:删除缓存,处理数据(等查询数据的时候会把数据放入缓存,两种情况只是写缓存时间的区别)
try {, ,,,,,jedisClientSingleService.hdel (ALL_RESOURCES_NO_CONDITION,,哈希德),, ,,,},catch (Exception e), {, ,,,,,e.printStackTrace (),, ,,,}怎么在javaWeb项目中使用复述,进行缓存