技术总结(二十二)

一、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 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…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

软件设计师-上午题-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…

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

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

[Element] el-table修改滚动条上部分的背景色

[Element] el-table修改滚动条上部分的背景色 ::v-deep .el-table__cell .gutter {background: red;}

SAP ABAP开发学习——WDA 七 使用文本与消息

目录 从数据字典读取文本 使用OTR文本 从程序中调用OTR文本 消息分类 定义消息显示位置 text类消息的使用 T100 消息的使用 OTR消息实例 消息内容修改 从数据字典读取文本 使用OTR文本 可以自己创建OTR文本 从程序中调用OTR文本 消息分类 定义消息显示位置 text类消息的…

基于物联网设计的地下煤矿安全监测与预警

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 1.5 模块的技术详情介绍【1】NBIOT-BC26模块【2】MQ5传感器【4】DHT11传感器【5】红外热释电人体检…

golang分布式缓存项目 Day 1

注:该项目原作者:https://geektutu.com/post/geecache-day1.html。本文旨在记录本人做该项目时的一些疑惑解答以及部分的测试样例以便于本人复习。 LRU缓存淘汰策略 三种缓存淘汰策略 FIFO(First In, First Out)先进先出 原理&…

Pr 视频过渡:沉浸式视频 - VR 默比乌斯缩放

效果面板/视频过渡/沉浸式视频/VR 默比乌斯缩放 Video Transitions/Immersive Video/VR Mobius Zoom VR 默比乌斯缩放 VR Mobius Zoom用于 VR 视频中的缩放式场景切换,通过缩小或放大的渐变效果在两个场景之间平滑过渡。 自动 VR 属性 Auto VR Properties 默认勾选…

华为实时视频使用FLV播放RTSP流

import flvjs from ‘flv.js’; 安装flv <video style"width:100%;height:100%;" ref"videoHWRef" ></video>// src 华为rtsp流 rtsp://admin:Huaweivideo10.10.8.151:554/xxx/trackID1// url 需要后端提供视频源地址playVideo() {if (fl…

【华为机试题】光伏场地建设规划 [Python]

题目 代码 class Solution:def func(self, input_args, area_list):count 0for i in range(input_args[0] - input_args[2] 1):for j in range(input_args[1] - input_args[2] 1):count 1 if self.area_compute(area_list,i,j,input_args[2],input_args[3]) else 0print(c…

备考25年二建,最好这样选专业!

2025年的二建备考已经开始了&#xff0c;很多考生在纠结报考哪个专业&#xff0c;二级建造师各专业难度如何&#xff1f;哪个专业含金量更高&#xff1f; 今天就带大家了解一下这六大专业&#xff0c;一起来看~ ​建筑专业 考核方向&#xff1a;建筑工程技术要求、建筑工程专…