九、Redis 的实际使用与Redis的设计

news2024/12/28 5:58:05

一、多级缓存架构

在线上系统中,一定不会单纯的只部署一个Redis集群,而是使用Redis结合其他的多级缓存应用进行架构。

使用多级缓存架构的优点就是可以使不同类型的数据分布在不同的应用中,比如redis的热点key可以存储到nginx本地缓存、服务集群的本地缓存,进而分散单应用的服务压力。

二、redisObject

所有value对象在内部定义为redisObject结构体。

三、Redis的单线程

redis的单线程不是真的单线程,在内部执行命令的时候使用单线程,但是其他的操作夜壶开启其他的线程。

1、IO多路复用器

2、文件事件分派器

3、文件事件处理器

4、Redis 6 提供了多线程执行

四、Redis的缓存淘汰机制

当Redis的可用内存占满的时候,就会触发内存和磁盘的swap交换,导致Redis的性能急剧下降。这是绝对不能允许的,为了限制最大内存的使用,Redis使用参数:maxmemory限制Redis缓存的最大容量。当达到Redis缓存的限制,就触发缓存淘汰机制。

修改maxmemory-policy参数可以指定使用哪种缓存淘汰机制。可选项包括:

noeviction,

volatile-lru,

volatile-ttl,

volatile-random,

allkeys-lru,

allkeys-random,

volatile-lfu,

allkeys-lfu

查看当前配置的内存淘汰策略

config get maxmemory-policy

1、noeviction - 默认

不可驱动,当内存中的数据量达到配置的内存时,为了避免数据丢失,不可执行set操作,只能执行读操作、删除操作。

2、volatile-lru

lru - less read use 

没设置过期时间的key不淘汰。

针对设置了过期时间的key,执行淘汰。

淘汰的原则是使用次数最少的key优先被淘汰。

3、volatile-ttl

没设置过期时间的key不淘汰。

针对设置了过期时间的key,执行淘汰。

淘汰的原则是哪个key剩余的存活时间最短,就淘汰哪个key。

4、volatile-random

没设置过期时间的key不淘汰。

针对设置了过期时间的key,执行淘汰。

随机淘汰策略。

5、allkeys-lru

针对所有key,使用最少的先淘汰。

6、allkeys-random

针对所有key,随机淘汰。

7、volatile-lfu

针对有过期时间的key,先淘汰访问频次少的key。

8、allkeys-lfu

针对所有key,先淘汰访问频次少的key。

五、缓存淘汰相关算法

1、LRU算法

最近使用原则。

通用的LRU算法是维护一个链表,将最近访问的key放到链表的头部。这样不经常访问的key就会被挤到链表的尾部,当执行淘汰的时候就从链表最尾部开始淘汰。

但是维护这样的链表会造成额外的开销,Redis为了保证响应的效率,没维护这样的链表,而是使用了【近似LRU算法】。

2、近似LRU算法

与LRU算法稍有不同,并不是真正维护了一个访问顺序链表,而是在每一个key上开辟了一块【24bit】的空间,记录着上一次访问的时间戳,通过比较时间戳的大小也能实现访问顺序链表的功能。

默认配置下,通过每次采样5个key,互相比较上次访问的时间戳,淘汰最早访问的key。直到内存数据小于maxmemory配置的大小。

采样数量配置参数:maxmemory-samples

采样范围:根据maxmemory-policy配置的淘汰策略决定。

3、LFU算法

Redis 4.0 版本之后新增了LFU算法,采样成功后再根据key最近被访问的频次决定淘汰哪些key,访问频次越少的先被淘汰。而不是单纯根据最近访问时间做判断。

为什么要这么做呢?场景一:当redis初始化的时候,所有的key基本都在同一时间加载,且越重要的越早加载,这时候不能盲目地根据最后访问时间决定淘汰哪些缓存。

那么是如何实现记录访问频次的呢?在key上的【24bit】空间的基础上,分成了【16bit】+【8bit】的空间,大的记录着最后访问时间戳(精度下降),小的记录着访问次数。

4、缓存时间戳

Redis在内存中缓存了一个时间戳,并不是用的时候从操作系统中获取当前时间戳,而是执行了一个定时任务,每1ms执行一次,从操作系统获取时间戳更新到Redis缓存中,用的时候直接从缓存中拿。

在redis中执行一条命令大约需要 100ns,所以每1ms是一个相对较大的时间单位。而每一次从操作系统获取时间戳时,上下文切换的时间消耗大约是 10us,所以redis选择了 “间隔一大段时间,才做一次时间戳更新” 。

六、Redis的过期策略

1、过期key的集合

在Redis中,设置了过期时间(ttl)的key,会被放入一个过期key的字典,从这个过期key的字典实现定期删除。

2、定时扫描策略

Redis创建了一个定时任务,每1s执行10次。

每次从过期字典中随机采集20个key,删除其中过期的数据。

如果发现达到 1/4 的key是过期的,就再采集20个key,删除过期数据,循环往复。

是一个贪心算法。

3、惰性删除

为了弥补定时扫描删除可能出现的“漏网之鱼”,当get一个key的时候,发现已经过期了,就不会返回value数据,同时也删除这个key。

4、从库的过期策略

没有定期扫描、惰性删除等功能。只是从主库的AOF文件中读取del命令来删除数据。

5、lazyFree

在删除数据或内存淘汰时,删除String数据基本会很快,但是在删除大的list,set,hash等数据时,有可能会很慢,造成阻塞。

为了缩短阻塞时间,Redis会将大体量的数据删除操作放到后台去做。

① 工作原理

Redis主线程进仅对key做个逻辑删除,标识某个key需要启用异步删除。lazyFree拿到这个key后,启动一个异步线程,对这个key做物理删除。从而避免主线程阻塞。

② 配置参数

参数作用
replica-lazy-flush集群启动 lazyFree 删除数据
slave-lazy-flush从节点启用 lazyFree 删除数据
lazyfree-lazy-user-flush用户输入 flush 命令删除
lazyfree-lazy-user-del用户输入 del 命令删除
lazyfree-lazy-server-del

针对有些指令在处理已存在的键时,会带有一个隐式的DEL键的操作。

如rename命令,当目标键已存在,Redis会先删除目标键

lazyfree-lazy-eviction内存达到 maxmemory 的时候,触发缓存淘汰
lazyfree-lazy-expire针对 key 过期的删除

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

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

相关文章

[渗透测试]-CVE-2016-4437-Shiro550漏洞复现

Shiro550漏洞爆出的时间是2016年为第4437个漏洞,所以它的CVE编码是2016-4437 文章目录 前言 什么是Shiro550漏洞? 1.Shiro550漏洞原理: 2.漏洞利用 3.漏洞复现: 前提:下载并打开vulhub靶场。 CVE-2016-4437-shiro550漏…

基于react native的锚点

基于react native的锚点 效果示例图示例代码 效果示例图 示例代码 /* eslint-disable react-native/no-inline-styles */ import React, { useEffect, useRef, useState } from react; import {Image,ImageBackground,ScrollView,StyleSheet,Text,TouchableOpacity,View, } fr…

怎么选到好用的运动耳机?这五款年度精选骨传导耳机非常好用!

在过去的两年里,骨传导耳机逐渐被大众的所熟知。可能毕竟长时间使用音量过大的传统入耳式耳机,多多少少会对我们的听力健康构成威胁。所以很多人就想找一款不伤耳朵的耳机。然后就了解到了骨传导耳机,所以就会延伸出这些问题——骨传导耳机好…

【Canvas与密铺】90年代马赛克密铺效果 1920x1080

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>20世纪90年代马赛克瓷砖效果1920x1080</title><style type&…

美创获评CNVD年度原创漏洞发现贡献单位!

9月10日&#xff0c;第21届中国网络安全年会暨网络安全协同治理分论坛在广州成功举办。会上&#xff0c;美创科技首次获评“CNVD年度原创漏洞发现贡献单位”。 美创科技依托第59号安全实验室&#xff0c;专注数据安全技术和攻防研究。凭借深厚的技术积累与优势&#xff0c;被遴…

SEAFARING靶场渗透

一.SQL注入漏洞 1.输入id1 -- 下方出现数据说明闭合成功 2.测试得出数据库有三列 3.三处都是回显点 4.联合查询爆出库名 5.查表名 ?id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schematest-- 6.查字段名 ?id-1 union sele…

vscode spring boot项目编辑yaml不自动提示补全如何解决

文章目录 properties能够自动弹出提示但是YAML文件就不会自动弹出提示ctrl空格不出提示的解决办法 properties能够自动弹出提示 但是YAML文件就不会自动弹出提示 只是不会自动弹出来而已&#xff0c;按ctrl空格即可解决 ctrl空格不出提示的解决办法 如果按ctrl空格没有用 …

WGCLOUD使用指南 - 自动计算磁盘剩余空间的可使用天数

WGCLOUD是一款免费开源的运维监控软件&#xff0c;性能优秀&#xff0c;部署简单&#xff0c;轻巧使用&#xff0c;支持大部分的Linux和Windows、安卓、MacOS等平台安装部署 最近发布的新版本&#xff0c;WGCLOUD新增了可以自动计算每个磁盘剩余空间的可使用天数&#xff0c;主…

你还在为写PPT而烦恼吗,Kimi一键帮你生成PPT

PPT已经成为我们日常工作和学习中不可或缺的一部分。无论是企业会议、学术报告还是产品展示&#xff0c;一个精心制作的PPT都能有效提升信息传递的效率和质量。然而&#xff0c;制作一个既美观又专业的PPT并非易事&#xff0c;它需要耗费大量的时间和精力。幸运的是&#xff0c…

中伟视界:皮带跑偏检测算法及其实现模型和判断方法

皮带输送机广泛应用于矿山、港口、化工等行业&#xff0c;其正常运行对生产效率和安全性至关重要。皮带跑偏是输送机常见的故障之一&#xff0c;可能导致物料撒落、设备损坏&#xff0c;甚至引发安全事故。为了有效监测和预防皮带跑偏&#xff0c;现代技术利用多种算法模型和判…

还有哪个地方能申请到免费一年期的SSL证书?

SSL证书是互联网中用于加密网站与访问者之间数据传输的安全证书。它通过数字签名确认网站的真实身份&#xff0c;确保数据传输的私密性、完整性和服务器身份的真实性&#xff0c;有效防止数据在传输过程中被窃取或篡改&#xff0c;是保障网站安全性的重要手段。 永久免费SSL证…

20240914 每日AI必读资讯

刚刚&#xff0c;OpenAI震撼发布o1大模型&#xff01;强化学习突破LLM推理极限 - OpenAI o1模型需要简单、直接的提示&#xff0c;而非复杂的指导。 - 避免使用思路链提示&#xff0c;因为o1模型已经具备内部推理能力。 - 使用分隔符来明确模型解析的部分&#xff0c;并限制…

绝佳的知乎展示形式,助力品牌信息全面曝光

知乎作为国内领先的中文互联网问答社区&#xff0c;汇聚了亿万高价值用户&#xff0c;其独特的内容生态与深度互动机制&#xff0c;为品牌提供了前所未有的营销舞台。云衔科技作为数字营销领域的佼佼者&#xff0c;携手知乎&#xff0c;为您量身打造了一套集信息流广告、知广告…

Debian11之DolphinScheduler使用

登录 默认用户名和密码 admin/dolphinscheduler123 http://192.168.111.180:12345/dolphinscheduler/ui基础配置 创建队列【admin用户下】 创建Worker分组管理【admin用户下】 关联某个工作节点服务器&#xff0c;创建项目的时候会指定Worker分组&#xff0c;这个配置决定了…

反思:我们如何实现自我的凤凰涅槃和卓越的人生?

目录 什么是凤凰涅槃&#xff1f; 一、起源与含义 二、文化解读 三、象征意义 ​编辑 我们如何实现自我的凤凰涅槃和卓越的人生&#xff1f; 一、心态调整 二、行为改变 三、持续学习与成长 四、具体行动步骤 什么是凤凰涅槃&#xff1f; 凤凰涅槃是一个具有深…

C++三大特性之一:多态篇【创作不易,还请点赞+收藏❤】

一、多态的概念 从我们学习C的时候&#xff0c;想必或多或少都听说过&#xff0c;C的三大特性&#xff1a;封装、继承&#xff0c;多态&#xff1b;而今天我们将学习多态&#xff0c;多态简单来讲&#xff0c;就是多种形式。多态分为&#xff0c;编译时多态——静态多态&#…

Spark-ShuffleWriter-UnsafeShuffleWriter

一、上下文 《Spark-ShuffleWriter》中对ShuffleWriter的获取、分类和写入做了简单的分析&#xff0c;下面我们对其中的UnsafeShuffleWriter做更详细的学习 二、构建UnsafeShuffleWriter public UnsafeShuffleWriter(BlockManager blockManager,TaskMemoryManager memoryMana…

利用Packet tracer搭建简单的网络并进行通信验证

利用Packet tracer搭建一个基本的网络通信&#xff1a; 1&#xff1a;创建网络组件 先去创建几个终端设备&#xff0c;然后再去创建一个交换机 布局完成的界面是&#xff1a; 2&#xff1a;连接组件 用指定的线进行连接交换机和PC机 全部连接的结果是: 3&#xff1a;配置PC机…

桥接网络设置多用户lxd容器

文章目录 前言配置宿主机网络固定内核版本安装 lxd、zfs 及 bridge-utils安装宿主机显卡驱动lxd 初始化创建容器模板安装容器显卡驱动复制容器 前言 使用桥接网络配置 lxd 有个好处&#xff0c;就是每个用户都可以在该局域网下有一个自己独立的 IP&#xff0c;该 IP 的端口可以…

崩坏星穹铁道PC端2.5版本剧情、奖励攻略 用GameViewer远程帮手机减负 随时畅玩星铁PC端

《崩坏&#xff1a;星穹铁道》2.5版本「碧羽飞黄射天狼」在9月10开启&#xff01;上半卡池有五星角色飞霄、知更鸟、卡芙卡、黑天鹅四位角色&#xff0c;还有2.5版本的新剧情&#xff0c;这一次崩铁上线送10连和 1000星琼等其他材料。由于游戏包体过大&#xff0c;不少玩家都选…