加入收藏 | 设为首页 | 会员中心 | 我要投稿 百科站长网 (https://www.baikewang.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Redis学习笔记——缓存更新策略

发布时间:2022-09-30 12:46:02 所属栏目:MySql教程 来源:
导读:  一,缓存

  ●缓存就是数据交换的缓冲区,是存储数据的临时地方,一般读写性能较高

  ●应用层缓存

  将数据库的部分数据放在缓存中,当请求到达应用层直接查询缓存

  可以降低对数据库
  一,缓存
 
  ●缓存就是数据交换的缓冲区,是存储数据的临时地方,一般读写性能较高
 
  ●应用层缓存
 
  将数据库的部分数据放在缓存中,当请求到达应用层直接查询缓存
 
  可以降低对数据库的访问数据库更新操作,提高性能。于是可以使用Redis作为缓存。
 
  二,缓存更新策略
 
  1、内存淘汰:不用自己维护,利用Redis的内存淘汰机制,当内存不足时自动淘汰部分数据。下次查询时更新缓存。
 
  2、超时剔除:给缓存数据添加TTL时间,到期后自动删除缓存。下次查询时更新缓存。
 
  3、主动更新:编写业务逻辑,在修改数据库的同时,更新缓存。
 
  所以我们可以采取当一致性要求不高时可以用内存淘汰机制+超时剔除,一致性要求很高时使用主动更新+超时剔除
 
  三,主动更新策略
 
  内存淘汰与超时剔除很容易实现,主要看看主动更新策略。
 
  1、主动更新策略也有几个不同的方案:
 
  ●由缓存的调用者更新数据库的同时更新缓存(需要编码)
 
  ●将缓存与数据库整合为一个服务,由服务来维护一致性。调用者调用该服务,无需关心缓存一致性问题。(维护困难)
 
  ●调用者只操作缓存,由其它线程异步的将缓存数据持久化到数据库。保证最终一致。(容易丢失数据)
 
  2、另外,选择更新后缓存是更新还是删除也会产生不同的效果
 
  更新缓存:每次更新数据库都更新缓存,无效写操作较多
 
  删除缓存:更新数据库时让缓存失效,查询时再更新缓存
 
  最后附上更新的代码
 
  @Override
      @Transactional
      public Result updateShop(Shop shop) {
          if(shop.getId() == null){
              return Result.fail("商铺id不能为空!");
          }
          updateById(shop);
          stringRedisTemplate.delete("shop:detail:"+shop.getId());
          return Result.ok();
      }
 

(编辑:百科站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!