Redis数据库存储和过期键实现原理

4.DB数据库 方面描述基本概念基于关系模型的数据管理系统,使用表格形式存储和管理数据核心结构表(Table)、行(Row)、列(Column)、主键(Primary Key)、外键(Foreign Key)数据组织数据以二维表格形式组织,每行代表一条记录,每列代表一个属性关系类型一对一、一对多、多对多关系主要特点- 结构化数据- ACID事务特性- 数据完整性约束- 标准化设计常见产品查询语言SQL(结构化查询语言)优势✅ 数据一致性✅ 复杂查询能力✅ 事务支持✅ 数据完整性✅ 标准化劣势❌ 扩展性限制。 阅读详情

redis数据库

切换数据库

Redis是一个键值对数据库,读写效率很高,又有过期机制,所以经常被用来做缓存。很多人不知道,其实Redis和mysql一样,也是分数据库的,只不过我们一般使用的都是默认数据库而已。redis默认有16个数据库,编号分别为0,1,2...15,可以在redis客户端使用select命令切换数据库。

如图所示:

       
执行了“select 1”命令之后成功切换到了1号数据库,在提示符的后面的方括号中显示了当前数据库的编号,使用默认的0号数据库时没有这个提示。

数据库作用

redis分数据库的作用是隔离命名空间,在某一个数据库插入的数据在其他数据库是访问不到的:
        

redis数据保存方式

redis是键值对数据库,所以数据的保存方式也是按键值对保存的。redis底层使用哈希表保存数据,哈希表就像java中的map结构一样,他们的键都是一个字符串,键的值可以是很多类型的数据,比如字符串,列表,集合,有序集合等等。后续的数据的增删改查操作都是在这个哈希表上操作。


redis过期机制

redis支持键过期机制,也就是可以为一个键定义个一个过期时间,当到这个时间点时,这个键自动失效。设置一个键过期时间可以使用exipre命令:
      
     上图的第一条命令设置一个键值对,x的值为5,第二条命令为键x设置过期时间为5秒,第三条命令是在第二条命令执行之后的5秒内执行的,所以此时x还未过期,能够得到x的值5,5秒之后再获取x的值,已经过期,得到nil值。

     过期机制实现

     redis会跟存数键值一样生成一个哈希表,专门存储键的过期时间,那么,redis是怎么删除已经过期的键值的呢?一般来说,删除一个过期键有三种方式:
1. 定期删除:设置键过期时间的同时设置一个定时器,当时间到时定时删除键;
2. 定期删除:设置一个周期值,redis服务每隔一段时间执行一次过期检测,遍历一遍键值,将过期的键删除;
3. 惰性删除:将删除操作分摊到后续的操作中,每次增删改查数据库的时候都先检测一下键值是否已经过期,如果过期,先删除键值再执行常规后续操作。

这三种方式各有利弊:
1. 因为要为每一个键设置一个定时器,比较耗费CPU,但是因为键值一过期就立即删除,所以比较节省内存。
2. CPU和内存的消耗在三种方式中都处于居中水平。
3. 因为键值过期时候并不能够及时删除,并且如果有些键过期之后可能永远都不被访问,就导致这些垃圾数据常驻内存,成为另一种内存泄露,这种方式CPU耗费最小,内存消       耗最大。

redis过期机制中同时使用了第二种和第三种方法。在CPU和内存之间找到一个平衡点。
一文掌握 MongoDB 详细安装与配置(Windows / Linux / macOS 全平台) 本文详细介绍了MongoDB社区版7.0+在Windows、Linux和macOS三大操作系统上的完整安装、配置与安全加固流程。主要内容包括:各平台推荐安装方式(Windows使用MSI安装包、Linux通过官方仓库、macOS通过Homebrew)、基本配置参数说明、服务启动方法以及关键安全措施(如创建管理员用户和启用身份验证)。文章还提供了系统最低要求、下载地址、数据目录设置建议以及生产环境使用注意事项,适合开发、测试及生产环境部署参考。 阅读详情

相关推荐

解决fetch_california_housing数据集403错误的3种实用方法(附手动下载地址)

本文针对机器学习中常见的fetch_california_housing数据集403 Forbidden错误,提供了三种实用的解决方案。从理解HTTP 403错误的根源出发,详细介绍了修改源码路径、使用国内镜像源以及手动下载并配置数据文件这三种方法,并附带了可靠的手动下载地址,帮助开发者彻底解决数据加载障碍,确保机器学习项目顺利进行。

weixin_29062963的博客 561

Redis-数据库&过期

一、数据库 Redis中的键值对保存的地方叫做Redis的数据库,数据库的结构信息使用redisServer来描述。Redis服务器启动时,默认是初始化16个数据库,一般我们使用的都是0号数据库。 当然,可以通过使用select选择你要操作的数据库,一般时候,我们通过redis-cli客户端连接Redis的服务器的时候,会在会话处显示默认连接的数据库是[0],可以使用select x来切换数据库,直接看到会话处的数据库标识变化。 但是,一般不建议切换数据库来进行数据分开存储,因为这需要使用者自己维护选

l_dongyang的博客 948

把STM32MP135当单片机玩:实战SD卡脱机运行LED程序(基于MP135DK开发板)

本文详细介绍了如何在STM32MP135开发板上实现SD卡脱机运行LED程序,通过裸机开发方式(Bare Metal)利用HAL库完成GPIO控制,并解析了SD卡启动流程。内容涵盖工程创建、代码编写、SD卡烧录及常见问题排查,为开发者提供了一种高性能单片机开发方案。

weixin_33734785的博客 242

redis缓存过期更新mysql_Redis缓存系列--(六)缓存和数据库一致性更新原则

缓存和数据库一致性更新原则缓存是一种高性能的内存的存储介质,它通过key-value的形式来存储一些数据;而数据库是一种持久化的存储复杂关系的存储介质。使用缓存和数据库结合的模式就使得软件系统的性能得到了更好的提升(更好的存储介质,更贴近请求的存储距离,比如本地缓存),并且给系统提供了更简便的数据抽象。缓存和数据库一致性更新的本质就是要保证用户访问缓存和数据库中的数据都是一样的!。数据一致性的必要...

weixin_39633054的博客 1137

数字设计实验:自动售货机

本文旨在介绍数字设计实验:自动售货机的设计思路和实现代码

2401_83740084的博客 2227

workbench谐响应

定义材料 打开Engineering Data定义材料,在分析时不同部分选择不同材料 建模 打开Geometry建模,我举的例子很简单就一根光秃秃的轴 因为要加轴承,在轴上创建imprint face 因为要用point mass代替轴上原来的盘,在轴上盘的位置新建一个Plane,用Slice方法将轴从XYPlane3分成两段 施加边界条件以及谐响应分析 打开Model 1.在两段轴的交界面处,创建Point Mass,输入质量与转动惯量,位置在轴线上 2.mass point promote to.

my blogs include programming, math, physics.回首过去,放眼未来。 leslielee.blog.youkuaiyun.com 5883

redis数据存储?数据过期策略?内存淘汰机制?一文全解

mget 和 mset 有效节约了 RTT,但大部分命令(如 hgetall 并没有 mhgetall)不支持批量操作,需要消耗 N 次 RTT ,这个时候需要 pipeline 来解决这个问题。Redis 作为一个内存数据库,在内存空间不足的时候,为了保证命中率,就会和我们操作系统中的页面置换算法类似,选择一定的数据淘汰策略。在设置 key 的过期时间的同时,为该 key 创建一个定时器,让定时器在 key 的过期时间来临时,对 key 进行删除。​ 随着时间推移,AOF 持久化文件也会变的越来越大。

蓝鲸鱼计算机软件开发工作室 1494

【Cubietruck】Qt5.8.0 x64、x86、armhf三个版本的编译安装

一、       Preparation 以下环境配置支持虚拟机和实体机,但是实体机生产效率会相对高一点,实体机编译Qt的速度是虚拟机两倍以上。 若使用虚拟机,推荐使用VirtualBox,开源免费,尽量不要使用Vmware破解版。   Download List   名称 链接 下载项目 OS https://mirro

beatfan的博客 3658

Redis 数据库的持久化方式

对 Redis 数据库的数据持久化进行介绍,对 RDB 和 AOF 方式和相关配置进行介绍

m0_53312145的博客 498

YOLO26 标签分配机制:STAL 小目标感知分配策略

YOLO26提出的STAL标签分配策略通过尺度感知机制优化了小目标检测性能。该方法根据目标面积将检测对象分为小、中、大三类,分别采用差异化的分配参数(TopK数量、IoU阈值和中心度权重),特别是对小目标采用更宽松的匹配条件和更高的中心度权重。实验结果表明,STAL策略显著提升了小目标检测精度(AP_small),同时保持了整体检测性能(mAP),为解决目标检测中尺度不平衡问题提供了有效方案。

一键难忘的博客 789

上位机1000条/秒数据不丢不卡:SQLite持久化队列最优方案实战

在上位机每秒1000条、1MB数据的场景下,SQLite做持久化队列是最优解可靠性拉满,ACID事务+WAL模式保证绝对不丢数据;性能完全够用,优化后每秒几千条没问题;轻量无依赖,只有一个.db文件;C#/.NET原生支持,代码简单易维护。只要按照上面的优化点和代码实现,完全能满足工业现场的需求,不用再担心数据丢失、存储卡采集的问题。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 483

探索Redis设计与实现9:数据库redisDb与键过期删除策略

本文转自互联网 本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com本文是微信公众号【Java技术江湖】的《探索Redis设计与实现》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清...

AliCoder的博客 956

19、CATIA V5:参数化建模与零件目录创建全解析

本文详细解析了在CATIA V5中通过设计表实现参数化建模及零件目录创建的完整流程。以支撑块和钩形夹为例,介绍了参数识别、设计表创建与关联、配置管理以及零件目录的构建方法。同时,提供了实际操作建议和注意事项,帮助设计师高效创建和管理零件族,提升设计效率和质量。

raspberrypi5的博客 447

Redis学习笔记(七):数据库

文章目录前言1. 服务器中的数据库2. 客户端切换数据库3. 数据库键空间、增删改查操作查询键的实现增加键的实现删除键的实现更新键的实现其他对键空间的操作4. 键的生存时间如何设置键的生存时间?TIME命令介绍redis如何保存过期时间?redis如何移除过期时间?怎么判断一个key是否过期5. 过期键删除策略Redis使用的过期键删除策略惰性删除定期删除参考资料 前言 详细介绍Redis数据库的实现,解答以下几个问题: Redis服务器是怎么保存数据库的?客户端又是怎么切换数据库的? 数据库的增、删、改

pcj_888的博客 255

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Redis常见面试题

一、memcached与redis的区别?   1.存储方式不同。memcached把数据全部存在内存之中,断电之后会挂掉,而redis虽然也用到了内存,但是会有部分数据存在硬盘中,保证数据持久性。   2.数据支持类型不同。memcached对数据支持比较简单,而redis支持数据类型较丰富,如string、list、set、sortedset、hash。   3.底层实现不同。一般调用...

wu1317581750的博客 1044

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Redis——常见面试题

  一、memcached与redis的区别?   1.存储方式不同。memcached把数据全部存在内存之中,断电之后会挂掉,而redis虽然也用到了内存,但是会有部分数据存在硬盘中,保证数据持久性。   2.数据支持类型不同。memcached对数据支持比较简单,而redis支持数据类型较丰富,如string、list、set、sorted set、hash。   3.底层实现不同。一般...

weixin_30662109的博客 2075

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

redis系列之------数据库

前言 当我们在Redis数据库中set一个KV的时候,这个KV保存在哪里?如果我们get的时候,又从哪里get出来。时间复杂度,空间复杂的等等,怎么优化等等一系列问题。 服务器中的数据库 Redis服务器将所有数据库信息都保存在redis.h##redisService结构体中。代码如下: 1 struct redisServer { 2 3 // ... 4 5 /* General */ 6 7 // 配置文件的绝对路径 8 char *...

marcushbs的博客 99

redis随笔

一.字典 1.dictEntry:哈希表节点,保存key及其对应的value,并且每个dictEntry有一个next指针,当发生键冲突时,指向下一个dictEntry 例如:对于redis命令 lpush mylist a b c,redis使用一个dictEntry来保存,其key是mylist,value是a b c组成的链表 2.dictht: 哈希表 table是dict...

weixin_30725315的博客 82

redis设计与实现 读书笔记1

一个业务模型引出对redis的好奇: 提出问题: 1.redis 的五种数据类型分别由什么数据结构实现? 2.redis 的字符串类型既可以存储字符串,也可以存储整数和浮点数,甚至是二进制位(使用setbit) redis 内部是如何实现存储这些值? 3.redis的一部分命令只能对特定的数据类型执行 eg:a

weeks 464

Redis设计与实现—数据库与过期键策略

前言 深入了解一下Redis内存机制如何存储数据,以及对于过期数据采取何种策略来清理。 文章目录前言一、pandas是什么? 一、pandas是什么?

爱学习i的博客 771

Redis过期键删除策略深度解析

Redis采用惰性删除+定期删除的组合策略来管理过期键,在CPU占用和内存利用率间取得平衡。惰性删除仅在访问时检查过期键,定期删除则通过随机抽样清理过期键。主从模式下过期键由主库统一删除,持久化场景下RDB和AOF对过期键有不同处理规则。该策略配合内存淘汰机制,有效解决了缓存过期和内存占用问题,是Redis高性能的重要保障。

weixin_43829708的博客 1386

redis之数据库

redis数据库 redis键空间 redis过期策略

SO_zxn的博客 1113

Redis篇-7--原理篇6--过期机制(定时删除,惰性删除,Redis过期事件监听和Java实现)

定时删除(Active Expiration)是一种主动的过期策略,Redis会定期检查并删除那些已经过期的键。具体来说,Redis会在后台线程中运行一个定时任务,每隔一段时间扫描一定数量的过期键,并将它们从数据库中删除。惰性删除是一种被动的过期策略,Redis不会主动检查过期键,而是在访问某个键时才检查其是否已经过期。如果该键已经过期,Redis会立即删除它,并返回相应的结果(如 nil 或 null)。

weisian的博客 3万+

【Redis-05】Redis如何实现保存键值对的保存及过期键的管理策略

Redis服务器在启动之初,会初始化RedisServer的实例,在这个实例中存在很多重要的属性结构,同理本篇博客中介绍的数据库实现原理也会和其中的某些属性相关,我们继续看一下吧。

qq_35850405的博客 1431
上一篇: SpringMVC Controller介绍及常用注解
下一篇: redis数据持久化
戀戀
博客等级 码龄16年 25粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值