怎么在javaWeb项目中使用复述,进行缓存

  介绍

怎么在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项目中使用复述,进行缓存