redis的缓存更新策略

目录

三种缓存更新策略

业务场景:

 主动更新的三种实现

操作缓存和数据库时有三个问题

  1.删除缓存还是更新缓存?

  2.如何保证缓存与数据库的操作的同时成功或失败?

  3.先操作缓存还是先操作数据库?

缓存更新策略的最佳实践方案:


三种缓存更新策略

  1. 内存淘汰(Eviction)策略:Redis在内存不足时,会根据预设的策略选择一些键进行淘汰,释放内存空间。Redis默认提供了以下几种淘汰策略:

    当数据超出可用内存时,Redis将根据配置的淘汰策略进行自动选择。你不需要手动指定淘汰策略,除非你希望自定义新的淘汰策略。

    • LRU(Least Recently Used,最近最少使用):淘汰最长时间未被访问的键。
    • LFU(Least Frequently Used,最不经常使用):淘汰访问频率最低的键。
    • Random(随机):随机选择键进行淘汰。
  2. 超时剔除(TTL,Time To Live):在向Redis存储数据时,可以为每个键设置一个过期时间。一旦过期时间到达,该键会自动被Redis删除。超时剔除策略是一种主动更新策略,适用于需要在一定时间后自动移除数据的场景。

  3. 主动更新:当你在操作数据库时,同时对Redis进行操作,以保持数据的一致性。这可以通过在操作数据库之后,更新或重置对应的Redis键值对来实现。

业务场景:

低一致性需求:使用内存淘汰机制。例如店铺类型的查询缓存
高一致性需求:主动更新,并以超时剔除作为兜底方案。例如店铺详情查询的缓存

 主动更新的三种实现

操作缓存和数据库时有三个问题

  1.删除缓存还是更新缓存?

        更新缓存:每次更新数据库都更新缓存,无效写操作较多(不建议采用)

        删除缓存:更新数据库时让缓存失效,查询时再更新缓存

  2.如何保证缓存与数据库的操作的同时成功或失败?

        单体系统,将缓存与数据库操作放在一个事务

        分布式系统,利用TCC等分布式事务方案

  3.先操作缓存还是先操作数据库?

        一定要先操作数据库,再删除缓存,如果先删除缓存,再操作数据库在多线程的情况下,会导致缓存拿到数据库旧的数据

缓存更新策略的最佳实践方案:

1. 低一致性需求:使用 Redis 自带的内存淘汰机制
2. 高一致性需求:主动更新,并以超时剔除作为兜底方案

读操作:

缓存命中则直接返回
缓存未命中则查询数据库,并写入缓存,设定超时时间
写操作:
先写数据库,然后再删除缓存
要确保数据库与缓存操作的原子性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/59414.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【效率提升—Python脚本】根据Verilog文件自动生成tb文件

文章目录 Verilog端口文件(仅做示范用)对应的tb文件相应代码 在数字IC设计过程中,根据顶层生成testbench时存在很多重复性工作,因此为了提高工作效率,特地开发此脚本。 Verilog端口文件(仅做示范用&#xf…

JVM深入 —— JVM的体系架构

前言 能否真正理解JVM的底层实现原理是进阶Java技术的必由之路,Java通过JVM虚拟机的设计使得Java的延拓性更好,平台无关性是其同时兼顾移动端和服务器端开发的重要特性。在本篇文章中,荔枝将会仔细梳理JVM的体系架构和理论知识,希…

C语言第十课----------------扫雷----------数组的经典练手题

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂…

软件验收测试包括几种类型?验收测试报告有什么好处?

在软件开发中,验收测试是软件项目在开发完成后进行的最后一项测试工作。它是确认软件是否满足预期要求,并准备将软件交付用户的核心环节,它可以确保软件的质量和功能符合用户的需求和期望。 一、软件验收测试的类型 软件验收测试可以分为多…

鸿鹄工程项目管理系统em Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统em

​ Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目…

Sencha Ext.NET Crack 快速应用程序的正确工具集

Sencha Ext.NET Crack 快速应用程序的正确工具集 Sencha Ext.NET是一个高级的ASP.NET核心组件框架,它包含了强大的跨浏览器Sencha Ext JS库。通过140多个预构建和专业测试的UI组件实现企业级性能和生产效率。Sencha Ext.NET使用尖端的Web技术创建功能强大的Web应用程…

1、如何实现两台电脑之间数据相互读写

一、确保两台电脑在同一个局域网中,可以使用网线【动态配置】进行两台电脑互连。 二、静态配置: 将IP地址和网关设为192.168.0.1,目的是让这台电脑做另一台电脑的网关,子网掩码一点击会自动添加。第二台电脑同样打开设置,此处IP地…

JUC并发编程(JUC核心类、TimeUnit类、原子操作类、CASAQS)附带相关面试题

目录 1.JUC并发编程的核心类 2.TimeUnit(时间单元) 3.原子操作类 4.CAS 、AQS机制 1.JUC并发编程的核心类 虽然java中的多线程有效的提升了程序的效率,但是也引发了一系列可能发生的问题,比如死锁,公平性、资源管理…

python基础3——流程控制

文章目录 一、操作符1.1 比较操作符1.2 逻辑操作符1.3 成员操作符1.4 身份操作符 二、流程控制2.1 条件判断2.2 循环语句2.2.1 for循环2.2.2 while循环 2.3 continue与break语句2.4 文件操作函数 三、函数3.1 定义函数3.2 作用域3.3 闭包3.4 函数装饰器3.5 内建函数 一、操作符…

vuejs 设计与实现 - 渲染器的设计

渲染器与响应式系统的结合 本节,我们暂时将渲染器限定在 DOM 平台。既然渲染器用来渲染真实 DOM 元素,那么严格来说,下面的函数就是一个合格的渲染器: // 渲染器: function renderer(domString, container) {container.innerHTM…

新能源汽车交流充电桩控制主板的功能维度

新能源汽车交流充电桩控制主板的功能维度 交流充电桩主板是电动汽车充电站的关键组件,它负责控制充电过程,保护设备和电网免受电动汽车充电的冲击。它具有控制、保护、检测、报警和记录等功能,可以有效地控制充电过程,保证交流充电…

K8s集群安全机制

1.访问K8s集群的时候,需要经过三个步骤完成具体操作 (1)认证(2)鉴权(授权)(3)准入控制 进行访问的时候,过程中都要经过apiserver,apiserver做统…