Redis

Redis7系列:Redis对决RedisStack Redis 是一个开源的内存数据库,以高性能、低延迟著称,支持基础数据结构(如字符串、哈希、列表、集合、有序集合等),常用于缓存、消息队列、实时数据处理等场景。Redis Stack 是 Redis 的扩展版本,整合了 Redis 核心数据库与多个高级功能模块(如全文搜索、JSON 文档存储、图数据库、时间序列等),提供“一站式”解决方案,简化了复杂数据场景的开发。 阅读详情

目录

redis数据结构

String

List(链表)

Set(集合)

ZSet(有序集合)

Hash

ziplist

缓存雪崩、缓存穿透、缓存击穿

RDB和AOF

redis主从复制

redis事务

基础面试题


redis单线程模型

 IO 多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。

在这里插入图片描述

客户端与redis通信的一次流程

在这里插入图片描述

redis数据结构

必看:Redis详解(四)------ redis的底层数据结构 - YSOcean - 博客园

Redis详解(五)------ redis的五大数据类型实现原理 - YSOcean - 博客园

简介:redis的五种数据结构原理分析_至臻于勤-大道至简的博客-优快云博客

数据结构:Redis详解(四)------ redis的底层数据结构 - YSOcean - 博客园

在这里插入图片描述

String

命令:
SET hello 你好;get hello

简单动态字符串(simple dynamic string,SDS), value 最多可以是 512M,string 可以包含任何类型数据

1、len 保存了SDS保存字符串的长度

2、buf[] 数组用来保存字符串的每个元素,二进制存储

3、free 记录了 buf 数组中未使用的字节数

优点:

直接获取字符串长度,无序挨个遍历

杜绝缓冲区溢出(扩展字符串时,通过len进行判断是否有足够的长度)

减少修改字符串的内存重新分配次数(字符串扩展时多分配些空间,回收时把回收的字节长度记录在free中)

二进制安全可以存放图片(C语言原生字符串是以\n结尾,\n可能存在于图片二进制数据中。SDS不是以空判断是否结束而是以len)

List(链表)

命令:rpush list1 "bar";lpop list1

quicklist=ziplist+linkedlist(双向列表)

每个quicklist节点就是一个ziplist,具备压缩列表的特性

Set(集合)

命令:SADD myset "hello"

数据结构:intset+hashtable

使用散列表(hashtable)来保证自已存储的每个字符串都是各不相同的,且无序。

intset(有序不重复整数数组)

Redis用于保存有序不重复整数值的集合抽象数据类型,当一个集合只包含数量不多整数值元素时, Redis 就会使用整数集合作为集合键的底层实现

1、存储有序整数集合,存放同一类型的整数(三种整数:int16_t、int32_t、int64_t)

2、例如:原来是int16_t的集合,当插入int32_t的整数的时候就会为每个元素升级为int32_t,这时候会对内存重新分配。不能降级。

typedef struct intset{

     //编码方式

     uint32_t encoding;

     //集合包含的元素数量

     uint32_t length;

     //保存元素的数组

     int8_t contents[];

}

ZSet(有序集合)

命令:ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN

1、键被称为成员(member),每个成员都是各不相同的 值则被称为分值(score),分值必须为浮点数。

2、可通过成员访问元素,也可通过分值以及分值的排列顺序访问元素的结构

3、数据结构:ziplist和跳表

Hash

 命令:HSET myhash field1 "foo"

1、基于原表新建表,计算索引值,然后将键值对放到新的哈希表位置上,释放原哈希表的内存空间,扩容2n,收缩n/2

2、渐近式 rehash,数据量大时,会同时保存两个hash表。

3、字典底层使用哈希表实现,每个字典通常有两个哈希表,一个平时使用,另一个用于rehash时使用,使用链地址法解决哈希冲突。

1、ziplist

  • 当键的个数小于hash-max-ziplist-entries(默认512)
  • 当所有值都小于hash-max-ziplist-value(默认64)

2、hashtable(哈希表)

ziplist

压缩列表(ziplist)是Redis为了节省内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构,一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。

压缩列表的原理:压缩列表并不是对数据利用某种算法进行压缩,而是将数据按照一定规则编码在一块连续的内存区域,目的是节省内存。

在这里插入图片描述

1、经过特殊编码的双向链表,目的是提高存储效率,用于存储字符串和整数,整数是按二进制表示进行编码的。

2、普通双向链表的每一项占用单独的内存,会带来大量内存碎片,ziplist将表中的每一项存放在前后连续的地址空间内。

3、值的存储采用变长的编码方式(大的整数多用一些字节存储,小的整数少用一些字节存储)

①、previous_entry_ength:记录压缩列表前一个字节的长度。previous_entry_ength的长度可能是1个字节或者是5个字节,如果上一个节点的长度小于254,则该节点只需要一个字节就可以表示前一个节点的长度了,如果前一个节点的长度大于等于254,则previous length的第一个字节为254,后面用四个字节表示当前节点前一个节点的长度。利用此原理即当前节点位置减去上一个节点的长度即得到上一个节点的起始位置,压缩列表可以从尾部向头部遍历。这么做很有效地减少了内存的浪费。

②、encoding:节点的encoding保存的是节点的content的内容类型以及长度,encoding类型一共有两种,一种字节数组一种是整数,encoding区域长度为1字节、2字节或者5字节长。

③、content:content区域用于保存节点的内容,节点内容类型和长度由encoding决定。

缓存雪崩、缓存穿透、缓存击穿

缓存雪崩:redis服务器挂掉导致请求大量涌至数据库;

缓存穿透:大量缓存中不存在的请求key访问直接落到数据库,一般是恶意攻击;

最常见的则是采用布隆过滤器,

缓存击穿:热点key在请求高峰失效,瞬间大量请求落到数据库;我理解的是这样

1、查询数据库前添加分布式锁

2、接口限流与熔断、降级

3、布隆过滤器

3、随机过期时间

4、做二级缓存,或者双缓存策略。A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。

5、缓存预热

Redis缓存穿透、缓存雪崩问题分析_饭一碗的博客-优快云博客_redis缓存雪崩

RDB和AOF

AOF 是redis的一种持久化方式,用来记录所有的写操作,但是随着时间增加,aof文件会越来越大,所以需要进行重写,将内存中的数据重新以命令的方式写入aof文件,新生成一个文件,内存数据写入文件后进行rename操作,从而用新的aof文件替换老文件。可设置超过原aof文件的多少倍时进行重写新文件。
在重写的过程中,由于redis还会有新的写入,为了避免数据丢失,会开辟一块内存用于存放重写期间产生的写入操作,等到重写完毕后会将这块内存中的操作再追加到aof文件中。这块内存就是内存缓存区。

持久化和工作原理:搞懂Redis RDB和AOF持久化及工作原理 - GrimMjx - 博客园

同时开启听谁的:黑猴子的家:Redis 持久化 之 AOF 和 RDB 同时开启,Redis听谁的? - 简书

aof重写时导致OOM:https://my.oschina.net/feicuigu/blog/1798122

为什么要进行重写:Redis之AOF重写及其实现原理_叶戈尔的博客-优快云博客_bgrewriteaof原理

redis主从复制

redis主从复制原理和介绍_sam-123的博客-优快云博客_redis主从复制解决什么问题

redis实战--redis主从复制实现读写分离(原理)_Jason_hsu2017的博客-优快云博客_redis读写分离实战

redis事务

基础面试题

redis面试题:几率大的Redis面试题(含答案)__睶_的博客-优快云博客_redis面试题

史上最全50道Redis面试题(含答案),以后面试再也不怕问Redis了 - 码农教程

2018整理最全的50道Redis面试题!_剑雪封喉r的博客-优快云博客_redis面试题

redis实现分布式锁

结论:

加锁:set lock 32ddgwgn22r8 30 s 

1、加超时时间?

是防止死锁

2、加唯一key?

防止误把别的线程的锁删除了。如:线程1锁超时,线程2获取锁成功,线程1执行完后就把线程2的锁删了。

3、原子?

设置完锁后,服务器出现问题,导致超时时间没设置上。导致死锁(没有线程能获取到该锁)。

解锁:lua脚本原子操作,get(key) == value 就删除锁,否则不删。

1、 原子?

线程1判断正确后,此时过了分布式锁超时时间,线程2拿到锁,然后线程1就把线程2的锁删了。

【Redis】Redis入门 redis入门基础、Linux下安装redis 阅读详情

相关推荐

【Redis】Redis基础——Redis的安装及启动

GitHub上的大神编写了Redis的图形化桌面客户端,不过该仓库提供的是RedisDesktopManager的源码,并未提供windows安装包。# 利用redis-cli来执行 shutdown 命令,即可停止 Redis 服务,因为之前配置了密码,因此需要通过 -u 来指定密码。当然,在连接redis时指定密码,还能连接后使用 AUTH 指定用户名和密码,这里我没有用户名,直接指定密码就好了。2. 修改redis.conf文件中的一些配置,进入后,输入/,在输入内容回车就能搜索到了。

菜鸟的博客 4533

redis的缓存失效策略和主键失效机制

RENAME 命令的另一种可能是,尝试将一个带生存时间的key 改名成另一个带生存时间的another_key,这时旧的another_key(以及它的生存时间)会被删除,然后旧的key会改名为another_key,因此,新的another_key的生存时间也和原本的key一样。生存时间可以通过使用DEL命令来删除整个key来移除,或者被SET和GETSET命令覆盖原来的数据,也就是说,修改key对应的value和使用另外相同的key和value来覆盖以后,当前数据的生存时间不同。2、如何更新生存时间。

Blue92120的博客 1375

SAP SD实战:用BADI_SLS_HEAD_SCR_CUS给销售订单VA01/VA02加自定义字段(附完整函数组代码)

本文详细解析了在SAP SD模块中如何利用BADI_SLS_HEAD_SCR_CUS实现销售订单(VA01/VA02)的屏幕增强,包括数据结构设计、函数组创建和BADI接口实现。通过实战案例和完整代码,帮助开发者掌握在SAPMV45A标准流程中添加自定义字段的关键技术,提升业务定制化能力。

weixin_27015733的博客 369

Redis缓存雪崩 击穿 穿透 保证redis中的热点数据

雪崩 1.含义  同一时刻,大量的缓存同时过期失效。 2.产生原因和后果 (1).原因:由于开发人员经验不足或失误,大量热点缓存设置了统一的过期时间。 (2).产生后果:恰逢秒杀高峰,缓存过期,瞬间海量的QPS(每秒查询次数)直接打到DB上,如果系统架构没有熔断机制,直接将导致系统全线崩溃。 3.处理方案 (1).设置不同的缓存失效时间,比如可以在缓存过期时间后面加个随机数,这样就避免同一时刻缓存大量过期失效。 setRedis(key,value,time + Math....

沧鹫小hai的博客 610

从CLIP到AnomalyCLIP:零样本异常检测的跨领域进化之路

本文探讨了从CLIP到AnomalyCLIP的技术演进,重点介绍了零样本异常检测在跨领域应用中的突破。AnomalyCLIP通过对象无关提示学习和多尺度特征提取,显著提升了工业质检、医疗影像等领域的检测精度,实现了高达96.4%的金属螺母划痕检测精度和85.7%的皮肤癌敏感度。这一技术为多模态模型在异常检测中的应用开辟了新路径。

r2s3t4的博客 111

两种方法解决这个问题OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

两种方法解决这个问题OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.在进行深度学习比如在训练yolov8模型时,在加载训练集和验证集时会报以下那个错误时会导致模型训练中断,有以下两个方法去解决这个问题,来使模型正常训练。

weixin_73044854的博客 2万+

Redis分布式锁(锁失效)

Redis可重入锁+Watchdog锁续期

JaweG 3204

2024年上市公司ESG评级全解析:六大权威数据源横向对比与应用指南

本文深度解析2024年国内主流ESG评级数据源,包括华证、商道融绿、Wind、富时罗素和彭博,横向对比其覆盖范围、评分逻辑与应用侧重点。文章提供实战指南,帮助投资者与企业根据投资决策、风险管理和学术研究等不同场景,精准选择并有效应用ESG数据,实现从概念到实用分析工具的转变。

weixin_29229055的博客 312

Redis Key 大量集中失效:原因分析与解决方案

在 Redis 的实际应用中,Key 的过期和失效是常见的场景。然而,当系统中存在大量 Key 集中过期时,可能会对服务器性能造成巨大冲击,甚至引发服务中断。本文将深入探讨 Redis Key 大量集中失效的原因,并提供实用的解决方案和优化策略。

兀行者的博客 1463

uniapp [全端兼容] - 最新详细实现拍摄视频录像并可播放预览视频,调起本机摄像头开启录像录制完毕后保存到本机临时存放,可对拍摄的视频进行压缩处理减少文件大小不损失画质,详解录制视频并读取播放!

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,录视频,拍视频,拍摄录制视频后上传服务器,调起摄像头录视频并可预览,录视频上传,录像,uniapp录制视频并上传,录制视频并保存到本地设备,如何本地保存并播放预览,提供给用户观看MP4视频录像并上传到后端服务器完整功能源码,视频压缩,mp4文件,删除视频,录像后怎么预览,临时视频文件怎么减少压缩大小,视频压缩及上传,自己录视频并生成可播放的文件,录视频并能打开查看,视频压缩后上传,本机相册,录完怎么预

🏆 前端领域优质创作者 1万+

【人工智能】拒绝焦虑,理性突围:AI 时代 Java 工程师的职业重构与进化指南

摘要:在AI技术快速发展的背景下,Java工程师面临职业转型挑战。本文通过MECE原则解构工作内容,划分高替代风险区(如CRUD开发)、高增效潜能区(如逻辑优化)和高核心壁垒区(如架构设计),指出AI对不同任务的影响程度。从劳动经济学视角分析行业将呈现K型分化,初级执行者被替代,而精通AI协作的全栈工程师需求增长。文章强调警惕过度依赖AI导致认知能力退化,并提出转型路径:掌握AI驱动开发(AIDD)、深耕领域驱动设计(DDD)、拓展全流程能力及AI原生应用开发。最终结论指出,未来的核心竞争力在于结合AI工具

奶爸的编程之路,也就一周冷个三天 135

Redis 缓存雪崩、穿透、击穿、预热

Redis 缓存雪崩、穿透、击穿、预热

qq_57093716的博客 2144

第81篇:Vibe Coding时代:LangGraph + Eval评估体系实战,解决 Agent 优化全靠感觉的问题

本文介绍了一个为LangGraph Coding Agent设计的评估体系解决方案。文章首先指出了当前AI Coding Agent开发中的常见问题:优化过程缺乏客观评估标准,导致改进效果难以量化。随后提出了一个完整的评估框架,包括评估指标(任务成功率、质量指标、安全指标、成本指标和流程指标)、项目结构设计和评估案例集。 核心内容包括: 设计了JSON格式的评估案例集,覆盖正常任务、边界任务和高风险场景 实现了模拟Agent输出的演示代码 构建了多维度评分系统,包括关键词匹配、禁用词检测和成本评估 提供了评

sundong_81的博客 47

Redis(Redis基础,SpringCache,SpringDataRedis)

本文详细讲解了redis基础内容,以及Spring Cache,Spring Data Redis技术的使用

qq_49474843的博客 2940

前程无忧Python岗位数据采集:基于API直连的高效招聘信息爬取实战

本文介绍了一个基于Python requests库的前程无忧招聘数据采集系统。项目通过分析API接口结构,配置完整的请求头和身份验证参数,实现了高效稳定的数据采集。系统支持多页数据批量获取,包含工作名称、薪资范围等关键字段的结构化解析,并将结果存储为Excel文件。技术实现涉及API分析、身份验证、请求头配置、数据清洗等关键步骤,同时强调遵守法律和道德规范。该系统可为求职者、HR和市场分析师提供有价值的行业数据支持,适用于市场分析、职业规划等场景。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1552

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【Redis】初识 Redis

本期内容主要介绍Redis是什么,认识 Redis,介绍 Redis 的特性以及 Redis 为什么快,并简单介绍了分布式系统。

爱编程爱运动的博客 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【Redis】Redis键值存储

首先要强调一点:Redis是key value类型的数据库,Redis所说的数据类型都是key value中的value的数据结构,而key都是字符串。在本文中,我们对Redis的键值存储进行了全面的概述和介绍。首先,我们了解了Redis的五大基本数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)和Zset(有序集合),并探讨了它们各自的特点和用法。

白晨的博客 2257

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Redis】Redis的启航之路:Ubantu操作系统下安装Redis

【Redis安装与配置指南】本文详细介绍了Redis数据库的安装步骤:通过apt获取安装包(Y确认安装),用netstat验证服务启动(默认6379端口)。重点讲解了配置文件修改:将IP从127.0.0.1改为0.0.0.0、关闭保护模式以允许远程连接,并重启服务生效。最后演示了使用redis-cli客户端连接服务器及ping测试连通性(返回PONG即成功)。全文提供完整命令行操作指引,适合Redis初学者快速搭建环境。

GGBond778的博客 1974

Redis——Redis简介

Redis简介、Reids5新特性、基本数据类型:String、Hash、List、Set、Sorted Set、Redis HyperLogLog

码说芯语的博客 5585

【Redis】贰 —— Redis基本命令

本文对于Redis中的一些命令进行了介绍以及使用案例

2401_86777036的博客 3090

Redis:初识Redis

介绍了Redis的基本概念,在软件开发中的定位,以及安装方式

博客网站 https://async-area.com 2070

Linux安装Redis以及Redis三种启动方式

也就是上面我们说的,窗口要一直打开。后台进程启动搞完之后,以后开启redis后,就可以去进行其他操作了(在src目录下 ./redis-server /opt/soft/redis-4.0.6/redis.conf启动redis)。此时Redis服务已经可以成功启动了,但是小问题来了,界面一直停留在Redis服务窗口中,按ctrl+c虽然可以屏蔽服务窗口,但是也会结束Redis服务。./redis-server代表要启动redis,后面一串代码进入redis.conf来开启redis,就是路径。

m0_74825466的博客 3817

[redis系列] redis脚本

Redis Lua 脚本功能使得用户能够在 Redis 服务器端执行自定义的 Lua 脚本,从而实现更高效、更灵活的数据操作。Lua 脚本运行在 Redis 服务器内部,这意味着你可以减少客户端与服务器之间的通信开销,并且可以通过原子操作确保多个 Redis 命令的执行一致性。组合功能:Lua 脚本能够将 Redis 中的简单命令组合起来,从而实现复杂的业务需求,避免多次网络往返。数据操作原子性:通过 Lua 脚本,开发者可以在 Redis 中执行应用程序逻辑,对多个键进行条件更新。

深耕后端、偏爱架构,用代码与设计构建可靠系统 1680

【Redis】Spring使用Redis

Spring使用Redis

yj20040627的博客 1782

Redis重大版本整理(Redis2.6-Redis7.0)

Redis借鉴了Linux操做系统对于版本号的命名规则:node 版本号第二位若是是奇数,则为非稳定版本(例如2.7、2.9、3.1),若是是偶数,则为稳定版本(例如2.6、2.8、3.0、3.2)。 当前奇数版本就是下一个稳定版本的开发版本,例如2.9版本是3.0版本的开发版本,因此咱们在生产环境一般选取偶数版本的Redis。 下面是重大版本新功能的归纳: Redis6.0 多线程 IO(Threaded I/O) 众多新模块(modules)API 更好的过期循环(expire cycle) 支持SS

耕云者~ 1万+
上一篇: Mysql事务隔离级别
下一篇: epoll
九号铅笔芯
博客等级 码龄9年 9粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值