1. 缓存更新策略综述

  1. 内存淘汰
  • 不用自己维护,利用 Redis 自己的内存淘汰机制 (内存不足时,触发策略,默认开启,可自己配置),其可在一定程度上保持数据一致性
  1. 超时剔除
  • 给数据添加 TTL,到期之后自动剔除,是最终一致性
  1. 自动更新
  • 编写业务逻辑,修改数据库时,更新缓存,一致性高,维护成本高

2. 缓存策略的选择

选择内存策略,要基于业务场景 —— 低一致性需求,高一致性需求

2. 主动更新策略

缓存的主动更新策略又分为以下三种:

3. Cache Aside Pattern

Cache Aside Patter 是我们比较常用的缓存更新策略,其由缓存调用者在更新数据库时,在业务逻辑中设置缓存更新。对 Cache Aside Pattern ,有以下三个问题比较重要。

  1. 是删除缓存还是更新缓存?
    使用更新数据库时删除缓存,下次读数据的时候再写入缓存的策略,更新缓存会产生很多不必要的写操作。
  2. 如何保证缓存与数据库的操作的同时成功或者失败
    在单体项目中很好控制,在分布式项目中,使用分布式事务解决。
  3. 先操作缓存还是先操作数据库

线程问题:使用先操作数据库,再删除缓存。先操作数据库再操作缓存,能减少发生问题的概率。

如下是两种线程不安全问题产生的场景,但是因为缓存的操作数据的速度是远远高于数据库写操作的速度的,因此先操作数据库再删除缓存,出现问题的可能性低。

4.代码实现

在更新代码中,加入删除缓存的逻辑即可,代码示例如下:

    @Overridepublic Result update(Shop shop) {if(shop == null){return Result.fail("店铺不能为 null");}// 更新数据库updateById(shop);// 删除缓存stringRedisTemplate.delete(CACHE_SHOP_KEY + shop.getId());return Result.ok();}

【Redis】缓存更新策略相关推荐

  1. Redis的缓存更新策略

    文章目录 1.redis的缓存更新的三种策略 1.1 内存淘汰 1.2 超时剔除 1.3 主动更新 2. 缓存更新策略的最佳实践方案: 缓存的更新是redis为了节约内存而设计出来的东西,主要是因为内 ...

  2. Redis:缓存一致性问题(缓存更新策略)

    Redis缓存的一致性 1. 缓存 1.1 缓存的作用: 1.2 缓存的成本: 2. 缓存模型 3. 缓存一致性问题 3.1 引入 3.2 解决 (1) 主动更新:先更新数据库,再手动删除缓存 (2) ...

  3. Redis缓存过期策略

    转载出处链接 一.背景 线上你写代码的时候,想当然的认为写进 redis 的数据就一定会存在,后面导致系统各种 bug,谁来负责? 常见的有两个问题: 往 redis 写入的数据怎么没了? 可能有同学 ...

  4. 掌握分布式环境缓存更新策略,提高缓存与数据库双写一致性!

    概述 随着时代的发展,服务系统架构也已经由最初的单体架构转变为分布式.微服务架构模式. 从数据体量上来看,各系统存储的数据量越来越大,数据的查询性能越来越低. 此时,就需要我们不断的进行优化,最常用的 ...

  5. Redis 缓存删除策略

    Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言 ...

  6. Redis缓存失效策略思考

    1 删除过期数据 我们设置Redis元素时可以指定过期时间,那么Redis如何删除这些超时元素?Redis采用了两种策略:定期删除和惰性删除. (1) 定期删除 Redis每隔一段时间就检查哪些KEY ...

  7. redis缓存清除策略 、获取dumb.rdb或者***.aof文件的位置

    redis缓存清除策略 获取dumb.rdb或者***.aof文件的位置

  8. Redis缓存淘汰策略

    文章目录 noeviction allkeys-lru allkeys-lfu volatile-lru volatile-lfu allkeys-random volatile-random vol ...

  9. 说说 Redis 缓存删除策略

    Redis 缓存删除策略分为定时删除.定期删除与惰性删除.前两个是主动删除,后一个是被动删除. 1 定时删除 为 key 设置一个过期时间,时间一到,由定时器任务删除这个 key. 优点:节省内存,因 ...

最新文章

  1. 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar。
  2. js复制功能的有效方法总结新
  3. 41)子类和父类的内存关系
  4. JAVA 几种多线程的简单实例 Thread Runnable
  5. python让函数抛出异常,是否有任何对象可以使str()函数在python中抛出错误或异常?...
  6. 这么大一座Azure“图书馆”,你竟没有发现…
  7. docker安装rabbitmq延时队列插件
  8. Zookeeper——入门介绍(相关原理、安装启动及使用操作)
  9. catti二级笔译综合能力真题_CATTI 二级口笔译教材、真题和模拟试题汇总!
  10. vuex中各属性的使用
  11. react---之下拉菜单默认选中的值始终不变的问题
  12. eureka 注册中心高可用失败,没有互为副本
  13. linux搜索word文档内容,在目录中搜索MS word文件以获取Linux中的特定内容
  14. matlab中符号函数教程,MATLAB程序设计教程(9)——MATLAB符号计算
  15. 加密保护软件 WinLicense常见问题整理大全(六)
  16. python高效控制模拟器_使用Python实现RISCV模拟器(一)
  17. windows电脑关机开机后没声音,重启就有声音故障处理方法
  18. PMP是什么考试,有什么作用?(含资料)
  19. IaaS、 PaaS、SaaS是什么
  20. 金庸笔下人物以及网络俏皮英语对应关系表-诗词

热门文章

  1. ino查看工具android版,(组图)老牌 RSS 阅读器 Inoreader 安卓版 UI 改版了
  2. Python爬虫存储数据
  3. 航空公司客户价值分析笔记
  4. 百度谷歌双搜1.2.0上线,新增网址导航
  5. idea 打包war包
  6. 人工智能——基础知识
  7. 阿里云登录界面无法输入账号及密码的解决方法
  8. zen显微镜软件下载_Zen与协作软件开发的艺术
  9. 如何判断一个LED节能灯的正负极
  10. Redis系列之Redis持久化机制