技术总结(二十二)

一、Redis缓存更新

在更新Redis缓存时,通常有两种策略:

  1. 更新缓存(Cache-Aside Pattern):先从缓存获取数据,如果缓存中没有数据或数据已经过期,则从数据库中获取最新数据,并更新到缓存中。

  2. 使用缓存替换(Read-Through/Write-Through Pattern):应用程序只需要关注数据的读写,缓存层负责同步数据。

二、Redis缓存降级

一、缓存更新的时机

  1. 数据变更时
    • 当数据库中的数据被插入、更新或删除时,与之对应的 Redis 缓存中的数据也需要更新。例如,在一个电商系统中,当商品的价格在数据库中被修改后,Redis 缓存中存储的该商品价格信息也应该立即更新,否则可能会导致用户获取到错误的价格信息。
  2. 缓存过期后
    • Redis 可以为每个缓存键设置过期时间(TTL - Time To Live)。当缓存过期后,再次访问该数据时,需要从原始数据源(如数据库)重新获取数据并更新缓存。比如,设置用户登录会话缓存的过期时间为 1 小时,1 小时后缓存过期,用户再次进行操作时,系统会重新验证用户信息并更新缓存。

二、缓存更新策略

  1. LRU(Least Recently Used)算法
    • 原理:当缓存空间不足时,Redis 会根据 LRU 算法淘汰最近最少使用的缓存数据。在更新缓存时,新的数据会替换掉 LRU 算法确定的那些不常使用的数据。
    • 示例:假设 Redis 缓存有固定的容量为 100 个缓存项,当第 101 个数据需要存入缓存时,Redis 会计算出最近最少使用的缓存项(比如,一个很久没有被访问过的用户历史订单缓存)并将其淘汰,然后存入新的数据。
  2. LFU(Least Frequently Used)算法
    • 原理:该算法以数据的访问频率为依据进行缓存淘汰和更新。访问频率最低的数据在缓存空间不足或需要更新时会被优先淘汰。
    • 示例:如果有一个商品详情页面的缓存,某个商品的详情缓存很少被访问,而另一个热门商品的详情缓存经常被访问。当需要更新缓存空间时,LFU 算法会优先淘汰那个很少被访问的商品详情缓存。
  3. 手动更新策略
    • 实时更新:在数据发生变化的代码逻辑中,立即更新 Redis 缓存。例如,在一个内容管理系统中,当管理员更新了一篇文章的内容后,在数据库事务提交成功后,马上调用 Redis 的 SET 操作来更新缓存中的文章内容。
    • 延迟更新:将缓存更新操作放入消息队列或任务队列中,延迟一段时间后进行更新。这种策略适用于对实时性要求不是特别高的场景,比如统计数据的缓存更新。例如,在一个网站流量统计系统中,用户访问次数的缓存更新可以稍微延迟,通过消息队列异步处理,减轻数据库和缓存系统的即时压力。

三、Redis相关事务的命令

  1. MULTI(开启事务)
    • 作用:用于标记事务块的开始。在 MULTI 命令之后,后续的命令将被放入一个事务队列中,直到执行 EXEC 命令才会一起执行这些命令。
    • 示例:
MULTI
SET key1 value1
SET key2 value2
EXEC
  • 在这个示例中,SET key1 value1 和 SET key2 value2 这两个命令在 MULTI 命令之后被加入事务队列,当执行 EXEC 命令时,这两个命令会按照顺序依次执行。
  1. EXEC(执行事务)
    • 作用:在一个事务块中,用于触发事务中所有命令的执行。如果在事务块中没有出现语法错误,那么所有的命令都会被执行;如果出现错误,具体的执行情况取决于错误的类型。
    • 示例:
MULTI
SET key3 value3
INCR key4
EXEC
  • 假设 key4 之前存储的是一个可以被递增的数值类型(如整数),那么 SET key3 value3 和 INCR key4 这两个命令会依次执行。
  1. DISCARD(取消事务)
    • 作用:用于取消一个事务块,清除事务队列中的所有命令,并且不会执行任何操作。通常在开启事务后,还没有执行 EXEC 命令之前,如果发现事务中有一些不需要执行的命令或者出现错误,可以使用 DISCARD 命令取消事务。
    • 示例:
MULTI
SET key5 value5
SET key6 wrong_command  // 假设这是一个错误的命令
DISCARD
  • 在这个例子中,由于出现了一个可能导致事务执行出错的命令,在执行 DISCARD 命令后,事务被取消,SET key5 value5 和错误命令都不会被执行。
  1. WATCH(监视一个或多个键)
    • 作用:用于在事务开始之前监视一个或多个键。如果在事务执行之前,被监视的键的值被其他客户端修改了,那么这个事务将会被打断。
    • 示例:
WATCH key7
MULTI
GET key7
SET key7 new_value
EXEC
  • 假设另一个客户端在 MULTI 命令之后、EXEC 命令之前修改了 key7 的值,那么当前事务中的命令将不会被执行,这样可以保证事务的隔离性,避免数据不一致的情况。
  1. UNWATCH(取消监视)
    • 作用:用于取消对所有键的监视。通常在使用 WATCH 命令后,如果不再需要监视这些键或者由于某些原因需要重新开始事务而不考虑之前的监视情况时,可以使用 UNWATCH 命令。

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

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

相关文章

[High Speed Serial ] Xilinx

Xilinx 高速串行数据接口 收发器产品涵盖了当今高速协议的方方面面。GTH 和 GTY 收发器提供要求苛刻的光互连所需的低抖动,并具有世界一流的自适应均衡功能,具有困难的背板操作所需的 PCS 功能。 Versal™ GTY (32.75Gb/s)&…

基于CNN-RNN的影像报告生成

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【PaddleNLP的FAQ问答机器人】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

Java的main方法static

在Java中,main方法是程序的入口方法。它必须是一个静态方法,这意味着它可以在程序的其他部分被直接调用,而不需要实例化类。使用静态方法的一个好处是它们可以直接通过类名调用,而不需要创建对象。 以下是main方法的典型声明&…

java list使用基本操作

import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;public class Main {public static void main(String[] args) {ArrayList list new ArrayList();list.add("张三");list.add("李四");list.add("王五");l…

Java入门15——抽象类

今天我们来看抽象类和接口~话不多说,开始正题~ 在前面我们学习了继承,我们知道了父类是子类共有的属性,而且子类重写了父类的方法,父类里的方法就不会被具体的使用了,为了防止你不小心调用了父类里被子类重写方法的调用…

高级 <HarmonyOS主题课>借助AR引擎帮助应用实现虚拟与现实交互的能力的课后习题

持而盈之,不如其已; 揣而锐之,不可长保。 金玉满堂,莫之能守; 富贵而骄,自遗其咎。 功成身退,天之道也。 VR (Virtual Reality): 虚拟现实技术 AR (Augmented Reality): 增强现实) XR.(Extend…

高校实验室安全巡检系统设计与实现(源码+定制+开发)高校实验室巡检系统、实验室安全管理平台、实验室安全监控系统、智能实验室巡查系统、高校实验室风险管理

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

102、Python并发编程:Queue与生产者消费者模型实现解耦、协作

引言 在实际业务场景中,很多时候在处理复杂任务的时候,会拆分上下游各个环节,形成一个类似于流水线的处理方式。上游类似于生产者,下游要依赖上游的输出进行工作,类似于消费者。但是,很多时候,…

Bash Shell - 获取日期、时间

1. 使用date获取日期 以下代码将date的执行结果存储在today变量中。date 是获取日期和时间的命令。 选择使用 quotes()或$ #!/bin/bashtodaydate echo $todaytoday$(date) echo $today 2. 使用 Format 输出所需日期和时间 date FORMAT 2.1 "MM-DD-YY" 形式输出…

【梯度提升专题】XGBoost、Adaboost、CatBoost预测合集:抗乳腺癌药物优化、信贷风控、比特币应用|附数据代码...

全文链接:https://tecdat.cn/?p38115 分析师:Yang Yang,Kechen Zhao 在当今科技日新月异的时代,数据的有效利用成为各领域突破发展的关键。于医疗领域,乳腺癌的高发性与严重性不容忽视,优化抗乳腺癌候选药物的筛选与特…

机器学习与AI|如何利用数据科学优化库存周转率?

对于所有零售商来说,良好的库存管理都是非常重要的。众所周知,商品如果不放在货架上就无法出售,而如果库存过多则意味着严重的财务负担。 但是做好库存管理绝非易事,它依赖于对未来需求的准确预测和确保始终有合适库存的敏捷供应链…

安卓智能对讲终端|北斗有源终端|三防对讲机|单兵终端|单北斗

在当今快速发展的通信技术时代,智能对讲手持机已成为众多行业领域中不可或缺的通讯工具。QM240T安卓智能对讲手持机,作为一款集先进技术与实用功能于一身的高端设备,凭借其卓越的性能和多样化的应用特性,正逐步引领对讲机市场的革…

uniapp-是否删除

代码 uni.showModal({title:提示,content:确定要删除此优惠券?,success: (re) > {if(re.confirm){common.request(post,/agent/coupon/delCoupon,{id:this.list[index].id}).then(res>{if(res.code1){uni.showToast({title:res.msg})this.list.splice(index,…

【数据集】【YOLO】【目标检测】抽烟识别数据集 6953 张,YOLO/VOC格式标注,吸烟检测!

数据集介绍 【数据集】抽烟识别数据集 6953 张,目标检测,包含YOLO/VOC格式标注。数据集中包含1种分类:“smoking”。数据集来自国内外图片网站和视频截图。检测范围园区吸烟检测、禁烟区吸烟检测、监控吸烟检测、无人机吸烟检测等。 主页私…

故事121

22年的十月份,在上海工作了三年多的我回到了老家。 前端,20年二本毕业的,当时在上海看老家的招聘信息,感觉很棒,很心动。又因为公司在大裁员,刚刚好在最后一轮裁员的时候,被裁了,拿了…

软件设计师-上午题-15 计算机网络(5分)

计算机网络题号一般为66-70题,分值一般为5分。 目录 1 网络设备 1.1 真题 2 协议簇 2.1 真题 3 TCP和UDP 3.1 真题 4 SMTP和POP3 4.1 真题 5 ARP 5.1 真题 6 DHCP 6.1 真题 7 URL 7.1 真题 8 浏览器 8.1 真题 9 IP地址和子网掩码 9.1 真题 10 I…

WebSocket实现消息实时推送

文章目录 websocket介绍特点工作原理 用websocket实现实时推送引入依赖WebSocket 函数定义变量声明初始化 WebSocket 连接WebSocket 连接的初始化和事件处理连接打开事件接收消息处理连接关闭和重连机制心跳机制使用 WebSocket代码完整显示 websocket介绍 WebSocket 是一种网络…

视频制作与剪辑怎么学,零基础入门视频剪辑和制作

视频制作与剪辑是一门充满创意与挑战的艺术形式,对于零基础的学习者来说,没选对软件不了解剪辑步骤,入门可能会显得有些棘手。接下来,我们将一同探讨如何开启视频剪辑与制作之旅,让新手从零基础入门,逐步迈…

浅谈C++ MFC

一、基本介绍 C MFC(Microsoft Foundation Classes)是微软公司提供的一个C类库,用于在Windows操作系统上快速开发应用程序。MFC库封装了Win32 API的复杂性,提供了一个面向对象的框架,使得开发者可以更容易地创建GUI&am…

数据仓库之 Atlas 血缘分析:揭示数据流奥秘

Atlas血缘分析在数据仓库中的实战案例 在数据仓库领域,数据血缘分析是一个重要的环节。血缘分析通过确定数据源之间的关系,以及数据在处理过程中的变化,帮助我们更好地理解数据生成的过程,提高数据的可靠性和准确性。在这篇文章中…