Redis学习(二)缓存设计

缓存中间件Redis进阶之路二(快速安装Redis) 对于在Linux及Mac开发环境的安装方法,读者可以访问Redis的官网或者查找其他资料进行安装与配置即可。(2)在缓存中创建一个key,设置其名字为redis:order:no:10011(按照自己的习惯取名即可,但是建议最好具有某种含义),设置其值为10011,命令为set redis:order:no:1001110011。(3)查看缓存中指定key的取值,如获取刚刚创建的key:redis:order:no:10011的取值,命令为get redis:order:no:10011,如下图所示。 阅读详情

引言

缓存能够加速应用的读写速度,同时也可以降低后端负载,对日常应用开发至关重要。

1.缓存的收益和成本

1.1 收益

	1.加速读写
	2.降低后端负载

1.2成本

	1.数据不一致性
	2.代码维护成本
	3.开销大的复杂计算
	4.加速请求响应

2 缓存更新策略

2.1 .LRU/LFU/FIFO算法剔除

	 场景:常用于缓存使用超过预设的最大值,对现有数据进行剔除。
	 一致性:算法一致性最差
	 成本:成本较低,开发者选择合适算法即可

2.2 超时剔除

	 场景:给缓存数据设置过期时间,在过期后进行自动删除
	 一致性:因为存在窗口期,后端数据不能及时同步,一致性比较差
	 成本:成本不是很高

2.3主动更新

	 场景:真实数据更新后,缓存立更新
	 一致性:一致性最好。但会发生主动更新如果发生问题,该数据可能长时间不能及时更新,建议和超时剔除结合使用。
	 成本:成本比较高

2.4 推荐策略

	 1.低一致性业务,配置最大内存和淘汰策略的配置方式
	 2.高一致性业务,结合超时剔除和主动更新一块进行使用。保证不能及时更新,也能在数据过期后进行剔除。

3. 缓存粒度控制

	 1.通用性:缓存全部数据更加通用
	 2.缓存全部数据会占更大的存储空间,网流量更大,序列化和反序列化开销会更大
	 3.全部缓存的代码维护更加简单

4. Redis缓存优化

4.1 穿透优化

	概念:缓存穿透指缓存层找不到数据,就会去存储层进行请求查询,失去缓存保护后端存储的目的。
 	解决方法
 		1. 缓存空对象
 			 存储层查不到数据,则在缓存层为其键添加空值,保证下次缓存查询不会再穿透到存储层
		 为空值设定较短的过期时间,保证能够被过期删除
			 会存在一定时间的缓存和存储不一致,可使用消息系统或其他方式清除缓存层中的对象
		
		 适用场景:命中率不高,数据频繁变化实时性高
		 成本: 需要更多缓存,数据不一致
 		3. 布隆过滤器拦截
		 	在访问缓存和存储之前,将所存在的key用布隆过滤器提前保存,作为第一层拦截
		
		 适用场景:命中率不高,相对固定实时性低
		 成本:占用空间少,代码维护复杂

4.2 无底洞优化

	概念:大量节点,存放大量数据,进行大量交互,导致总的时间加长
	优化思路:优化SQL,减少网络通信次数,降低成本,如nio,连接池等。
	解决办法
		 1.串行命令:操作时间=n次网络时间+n次命令时间
		 2.串行IO:将同一个节点的key进行归档,一个节点进行批量执行,操作时间 = 节点次网络时间+n次命令
		 3.并行IO,在串行IO的基础上进行的,即节点并行处理
		 4.hash_tag实现:强制将多个key放到一个节点上。只需要一次网络时间。

4.3 雪崩优化

	 概念:reids层如果奔溃不能提供服务,则所有的请求将会压在存储性,造成存储层崩溃。
	 预防和解决
		 1.保证缓存层服务高可用性
		 2.依赖隔离组件为后端限流并降级
		 3.提前演练

4.4 热点key重建优化

	 优化思路
		 减少重建的次数
		 数据尽可能一致
		 较少的潜在的危险
		 优点:思路简单,保证一致性
		 缺点:代码复杂度增加 存在死锁风险 线程池阻塞
	 优化方案
		 1.互斥锁:保证只有一个线程在重建,使用setnx进行锁
		 2.永远不过期
			 物理上没有设置过期时间
			 为每个value设置过期时间,过期后使用单独线程进行构建缓存
			 优点:杜绝热点key问题,缺点:不保证一致性,增加代码维护成本和内存成本

5.思维导图

在这里插入图片描述
以上思维导图是博主自己个人总结,转载请注明出处。
百度云盘 : Redis缓存设计
提取码 :ec5a
思维导图软件:XMind8 update7
本文章系博主原创,尊重博主辛劳成果,转载请注明出处,谢谢。

Redis多级缓存 官方网站: https://openresty.org/cn/ 阅读详情

相关推荐

Redis缓存的工作机制

Redis:缓存的工作机制Redis缓存的工作机制缓存的特征Redis缓存处理请求Redis作为旁路缓存Redis中缓存的类型只读缓存读写缓存参考文献 Redis缓存的工作机制 Redis具有高性能的数据存取特性,广泛的应用于缓存场景,在提升业务应用响应速度的同时,也避免了将数据查询的压力发送到了数据库。Redis用作缓存的普遍性和其在应用中的钟涛作用,我们需要了解Redis为什么能够用作缓存一级其具体的工作机制。 缓存的特征 无论是计算机系统还是具体的应用,其架构都是分层的。系统中的不同层之间访问速度

ghw15221836342的博客 2627

redis的四种缓存模式:

应用收到查询后,先查询是否在缓存中,在就返回,不在就访问数据库,从数据库中查询,并放到缓存中。如果写入的数据再缓存中不存在,有两种方式:一种是先将数据写入缓存,另一种策略是不写缓存直接将数据写入数据库,等读的时候再加载进缓存中(Write Around)。在Write Around中,写操作绕过缓存,直接写入数据库,而读操作则先从数据库读取数据,再将数据加载到缓存中。和旁路缓存模式类似会现在缓存中查询,是否在缓存中,在就返回,不在就访问数据库,从数据库中查询,并放到缓存中。就是等数据一起插库,异步执行。

weixin_47145766的博客 1042

NXP MCU CAN波特率(位时间)配置详解

1. 概述 本文将会详细讲解如何设置NXP MCU的CAN波特率、位时间、采样点等属性。 波特率即CAN总线传输频率,位时间是波特率的倒数,例如波特率是500K,那么位时间 = 1 / 500000 = 0.000002s = 2000ns。 我们先来看一下S32K144单片机的EB中与CAN总线波特率相关的可配置参数有哪些: ...

weixin_42967006的博客 9691

Redis缓存的常用设计模式

Redis缓存的常用设计模式:一. 写操作:* 以Redis统一视图为准:先更新缓存,后更新数据库。1) Write Through Pattern 直写模式:首先将数据写入缓存,再将数据立即同步到数据库。2) Write Behind Pattern 写后模式:首先将数据写入缓存,再将数据异步的批量同步到数据库。* 写操作不经过缓存。3) Write Around Pattern 绕写模式:数据直接写入数据库,不经过缓存。

qq_39871711的博客 310

x86架构学习之中断

外部中断,一般是由CPU的外部引脚电信号触发,这些引脚留给硬件厂商去定义中断,例如主板厂商可以将USB中断挂载70号中断引脚上,MCU厂商可以将片上外设(SPI、I2C等)的中断挂载在指定中断线上。中断描述符主要用于说明该中断的入口地址,中断描述符表则是将中断描述符一项一项管理在一个数组中,每一项中断描述符占用8个字节(64位模式下,占用16字节),其。简称中断,后文如果没特别说明,中断都指外部中断,由外部IO事件触发,由于时钟源来自CPU外部,与CPU时钟不同源,因此是异步事件。

qq_26962739的博客 1572

软考软件评测师备考避坑指南:过来人告诉你这5个章节最容易丢分(附2024最新考纲解析)

本文为软考软件评测师考生提供备考避坑指南,深度解析5个高频失分章节,包括标准化与信息化基础、中间件技术、软件测试模型、白盒测试覆盖准则和性能测试指标。文章结合2024最新考纲,分享实战技巧和记忆口诀,帮助考生精准打击失分重灾区,提升备考效率。

weixin_29223603的博客 467

【Redis进阶】缓存设计模式

在Cache Aside中,应用层需要和缓存和数据库两个数据源打交道,这增加了应用层的复杂度,而Read/Write Through Pattern就是来解决这个问题的,在这两种模式下,应用层只需要将缓存作为主要数据源,不需要感知数据库,更新和读取的任务都交给缓存来处理。缓存设计模式在分布式系统中起着至关重要的作用,它们帮助开发者在不同的业务场景下有效管理缓存,提高系统的性能和响应速度。根据具体的需求和场景,开发者可以选择适合的缓存设计模式,以确保系统的高效和稳定。

2401_83045332的博客 2277

GD32F105RBT6 keil工程模板

创建GD32F105RBT6的keil初始基础工程,未来的所有外设驱动都是基于这个基础工程进行扩展。

RMDYBW的博客 1927

[redis]——缓存设计

思维导图 缓存更新策略 LRU/LFU/FIFO算法剔除 剔除算法通常用于缓存使用量超过了预设的最大值时候,如何对现有的数据进行剔除,开发人员不需要实现算法,只需要配置maxmemory和对应的策略即可。 超时剔除 超时剔除通过给缓存数据设置过期时间,让其在过期时间后自动删除,在过期时间内存在一致性问题即缓存数据和真实数据源的数据不一致。开发人员只需要设置expire过期时间即可。 主动更新 在真实数据更新后,立即更新缓存数据。一致性最高,但如果主动更新出现问题,这条数据很可能长时间不会更新,维护成本较高

热爱编程的机械生的救赎 1786

OpenWrt虚拟机磁盘扩容实战:从SquashFS到ext4的完整避坑指南

本文详细介绍了OpenWrt虚拟机磁盘扩容的完整流程,重点对比了SquashFS和ext4文件系统在扩容操作上的关键差异。通过五步安全迁移法和直接分区调整方案,帮助用户有效解决磁盘空间不足问题,同时提供高级技巧和故障排除指南,确保扩容过程顺利无坑。

weixin_29251131的博客 232

ZYNQ平台AXI DMA传输避坑指南:如何快速定位‘errors:200‘等中断故障

本文详细解析了ZYNQ平台AXI DMA传输中常见的'errors:200'等中断故障,提供了从寄存器解析到压力测试的完整解决方案。通过深入分析XILINX_DMA中断机制、错误分类及五步排查法,帮助开发者快速定位并解决DMA传输问题,提升系统稳定性与性能。

weixin_29159613的博客 441

Redis学习[6] ——Redis缓存设计

通常来说,为了保证缓存和数据库中的数据一致性,需要给Redis缓存中的数据**设置过期时间**。当缓存过期后,则用户的请求会从数据库读取数据,并将数据再次存入到Redis缓存中。当**大量缓存数据在同一时间过期(失效)或者 Redis 故障宕机时,如果此时有大量的用户请求,都无法在 Redis 中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增**,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃,这就是缓存雪崩的问题。发生缓存雪崩有两个原因:大量数据同时过期;

shenfenxihuan的博客 4590

模拟调制系统实战:从AM到FM的5种调制方式对比与选型指南

本文深度解析AM、DSB、SSB、VSB、FM五种经典模拟调制方式,从实现电路、频谱效率、抗噪性能及工程成本等维度进行实战对比。通过MATLAB/Simulink仿真案例,提供清晰的选型决策框架,帮助工程师在无人机图传、短波通信、广播系统等具体项目中,根据带宽、功耗和抗干扰需求选择最优方案。

study的专栏 932

Redis学习 ——缓存

我们在日常的代码编写中比较少使用到Redis,但是如果涉及到了比较大型的项目,常常避不开Redis这一项技术,那么在什么样的场景需要使用Redis呢。首先我们得明白Redis是一个高性能得键值数据库,我们使用它得原因很简单,就是因为快。这个问题在大并发,高负载的网站中必须考虑。redis数据库中的所有数据都存储在内存中。由于内存的读写速度远快于硬盘,因此Redis的的的在性能上对比其他基于硬盘存储的数据库有非常明显的优势。

m0_74345597的博客 2624

经纬度转换为UTM坐标

UTM(通用横向墨卡托投影): 是一种以米为单位的坐标系统,用于地图和GPS导航。将地球划分为60个纵向的区域。每个区域宽6度,从赤道开始往南北两级方向划分。每个区域都有一个特定的字母。

weixin_45626706的博客 7278

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【Golang学习之旅】Go + Redis 的缓存设计与优化

在高并发和大规模的数据访问场景中,如何提高应用的响应速度和系统的稳定性是开发者必须面对的挑战。传统的数据库存储虽然在数据持久化方面做得很好,但其在处理大规模高频访问时却常常表现出性能瓶颈。为了解决这一问题,缓存作为一种常见的技术,能够显著提升数据访问速度,减少数据库的压力,从而提高系统的整体性能。Redis作为一种高性能的内存数据存储,因其出色的读写性能、丰富的数据结构和易于扩展的特点,已经成为现代Web系统中不可或缺的一部分。而在Go语言开发中,Redis被广泛用于各种高并发、高性能的场景,如缓存。

程序员林北北的博客 1454

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Redis学习笔记——Redis缓存设计

一个并发访问量比较大的key在某个时间过期,导致所有的请求直接打到了DB上解决方案:加锁更新:当请求查询A的时候,发现缓存中没有,就对这个A加锁,同时去数据库查询数据,写入缓存,返回给用户。将过期时间组合写在value中,通过异步的方式不断刷新过期时间,或者不给热点数据设置过期时间。

weixin_45774053的博客 797

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Redis学习(三)缓存

缓存机制

LB_Wuyanzu的博客 2842

【Redis学习 | 第5篇】Redis缓存 —— 缓存的概念 + 缓存穿透 + 缓存雪崩 + 缓存击穿

缓存:数据交换的缓冲区(Cache),是临时存储数据的地方,一般读写性能较高。比如说,CPU读取数据是内存从磁盘中读取,再到CPU,磁盘中读取数据速度非常慢,于是在 CPU 中设置一个缓冲区,将 CPU常用的数据存储在该缓冲区中,需要使用这些数据时,直接从缓冲区中读取要比从磁盘中读取快得多!缓存的作用: 降低后端负载;提高读写效率,降低响应时间缓存的成本:数据一致性成本;代码维护成本;运维成本。

serendipity_hky的博客 1564

Redis学习3——Redis应用之缓存

注意,不能先删除cache,在写db,因为在并发的情况下,可能存在,请求1删除缓存,然后写db,并且写db操作还没结束,这时请求2获取缓存,此时因为缓存被删除了,因此会从数据库读数据, 并存入缓存,这个时候的数据是未更新的,当请求2结束后,请求1写db结束,此时就会造成数据库和缓存中的数据不一致。上面的代码,存在一些问题,当请求1查询id=1的用户,从缓存中查询不到时,会查询数据库,然后将数据更新到数据库,然后请求2查询id=1的用户,从缓存中查询到,便直接返回,这是理想的情况。

weixin_55850954的博客 1413

Redis——三种缓存问题

讲解Redis中常见的三种缓存问题,对每个问题给出具体的解决方案,在不同的场景使用相应的解决措施。

一心同学的博客 5775

Redis入门学习笔记【二】Redis缓存

在了解雪崩溃之前,我们先了解什么是缓存雪崩现象,假设A系统每秒需要处理5000个请求,但数据库每秒只能处理4000个请求,某一天,缓存机器出现了宕机,挂了,这时候所有的请求一下子全部落在数据库上,数据库肯定扛不住,报警挂掉了,这时候如果没有采取缓存设施,数据库又急着用,重新重启数据库,刚重启完成(有可能没启动完),请求又来,数据库立马挂掉。缓存穿透是指缓存和数据库中都没有的数据,用户(黑客)不断发起请求,导致请求直接查询数据库,这种恶意行为攻击场景的会直接导致数据库挂掉,数据流程如下图所示。

一个老码农 1332

Redis高阶应用:缓存设计与性能调优

本文从缓存设计和性能调优两个方面详细阐述了Redis的高阶应用。通过合理设计缓存策略和结构,以及优化内存和网络性能,可以显著提升Redis的使用效果,为业务系统提供高效、稳定的缓存支持。在实际应用中,应根据业务需求和场景特点,灵活运用Redis的高阶应用技巧,以实现最佳的性能表现。未来,随着Redis技术的不断发展和应用场景的拓展,Redis的高阶应用将更加丰富和深入。建议关注Redis的最新动态,不断学习和实践,提升自己的Redis应用能力。深入了解Redis的内部机制,如数据结构、存储引擎等。

2501_92487231的博客 1893

Redis学习:缓存

当数据更新时,直接删除缓存中的对应数据,下次访问时重新加载最新数据到缓存中。这种策略简单直接,但可能会导致缓存雪崩问题。:定期刷新缓存中的数据,保持缓存数据与数据库中的数据同步。这种策略可以减轻缓存失效带来的压力,但可能导致缓存中的数据不是最新的。:当数据更新时,发布一个事件通知缓存系统,使缓存系统能够及时更新对应的缓存数据。这种策略能够保证缓存数据的及时更新,但需要在系统中引入事件机制。:将缓存中的数据与数据库中的数据分开存储,读操作优先从缓存中获取数据,写操作则更新数据库并删除或更新缓存中的数据。

zdy0822的博客 1498

《Redis缓存大作战:掌握缓存预热与设计要素》

因为静态文件(比如css,js,图片)中,很多都是不经常更新的。通常来讲,缓存的命中率越高则表示使用缓存的收益越高,应用的性能越好(响应时间越短、吞吐量越高),抗并发的能力越强。缓存的设计要分多个层次,在不同的层次上选择不同的缓存,包括JVM缓存、文件缓存和Redis缓存。分布式缓存,采用主从+哨兵或RedisCluster的方式缓存数据库的数据。这里的文件缓存是基于http协议的文件缓存,一般放在nginx中。由此可见,在高并发的互联网系统中,缓存的命中率是至关重要的指标。

成功最快的秘诀: 抱团取暖 。 1万+

Redis 多级缓存架构学习笔记

本文系统介绍了多级缓存架构设计,包含浏览器、OpenResty本地缓存、Redis分布式缓存、JVM进程缓存和数据库五层结构。重点分析了请求全链路流程和数据更新机制,通过Canal监听binlog实现缓存同步更新,采用主动删除策略保证最终一致性。该架构通过分层缓存显著提升性能,有效拦截70%以上请求,同时具备高可用、高扩展性特点,能应对高并发场景并降低数据库压力。文章还详细阐述了各层缓存的特点、作用及协同机制,为构建高性能系统提供了完整解决方案。

人工智能专业学生 1213
上一篇: Redis学习(一)之API的理解使用
下一篇: Redis学习(三)理解内存
Sheldon__Lee
博客等级 码龄10年 2粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值