文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么在javaWeb项目中使用Redis进行缓存

2023-05-30 17:01

关注

怎么在javaWeb项目中使用Redis进行缓存?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

一: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;   }

逻辑:先从缓存中取数据,如果缓存中没有,就去数据库中取,然后把数据存入缓存,下次查询时就会从缓存中取。

三:缓存的同步

问题来了,入过你修改或者删除了数据,下次取的时候,因为缓存中有数据便在缓存中取,这是数据库的数据与缓存中的数据不一致,便出现差异,这就要缓存同步了。

其实很简单,就是在修改,删除(如果添加也需要的话),执行下面操作:

删除缓存,处理数据,把数据放如缓存

删除缓存,处理数据(等查询数据的时候会把数据放入缓存,两种情况只是写缓存时间的区别)

try {       jedisClientSingleService.hdel(ALL_RESOURCES_NO_CONDITION, hashId);     } catch (Exception e) {       e.printStackTrace();     }

关于怎么在javaWeb项目中使用Redis进行缓存问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯