Redis 过期策略与源码分析

在 Redis 中我们可以给一些元素设置过期时间,那当它过期之后 Redis 是如何处理这些过期键呢?

过期键执行流程

Redis 之所以能知道那些键值过期,是因为在 Redis 中维护了一个字典,存储了所有设置了过期时间的键值,我们称之为过期字典。

过期键判断流程如下图所示:

内存过期策略-过期键判断流程.png

过期键源码分析

过期键存储在 redisDb 结构中,源代码在 src/server.h 文件中:

/* Redis database representation. There are multiple databases identified* by integers from 0 (the default database) up to the max configured* database. The database number is the 'id' field in the structure. */
typedef struct redisDb {dict *dict;                 /* 数据库键空间,存放着所有的键值对 */dict *expires;              /* 键的过期时间 */dict *blocking_keys;        /* Keys with clients waiting for data (BLPOP)*/dict *ready_keys;           /* Blocked keys that received a PUSH */dict *watched_keys;         /* WATCHED keys for MULTI/EXEC CAS */

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

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

相关文章

Java类类getComponentType()方法与示例

类类getComponentType()方法 (Class class getComponentType() method) getComponentType() method is available in java.lang package. getComponentType()方法在java.lang包中可用。 getComponentType() method is used to returns the Class denoting the component type o…

SVN分支与合并

SVN分支与合并1 分支与合并的概念:分支:版本控制系统的一个特性是能够把各种修改分离出来放在开发品的一个分割线上。这条线被称为分支。分支经常被用来试验新的特性,而不会对开发有编译错误的干扰。当新的特性足够稳定之后,开发…

Oracle常用数据字典表

Oracle常用数据字典表 查看当前用户的缺省表空间SQL>select username,default_tablespace from user_users; 查看当前用户的角色SQL>select * from user_role_privs;查看当前用户的系统权限和表级权限SQL>select * from user_sys_privs;SQL>select * from user_tab…

Redis 键值过期操作

过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期;pexpire key milliseconds:设置 key 在 n 毫秒后过期;expireat key timestamp:设置 key 在某个时间戳(精确到秒)之后过期;pexpireat key millisecondsTimestamp:设置…

图论模型迪杰斯特拉算法

一、步骤 二、MATLAB执行代码 tulun1.m weight [0 2 8 1 Inf Inf Inf Inf Inf Inf Inf;2 0 6 Inf 1 Inf Inf Inf Inf Inf Inf;8 6 0 7 5 1 2 Inf Inf Inf Inf;1 Inf 7 0 …

转:VMware安装Mac OS X Mavericks系统图文教程

Mac OS X一直是苹果电脑的御用操作系统,相当于我们常用的Windows操作系统而言,它能够给我们提供不一样的操作体验。令人欣喜的是,2013年10月23 日苹果宣布从Mac OS X Mavericks(即Mac OS X 10.9)起,之后的Mac系统全部免费升级。借…

--c语言运算符_C按位运算符-能力问题和解答

--c语言运算符C programming Bitwise Operators Aptitude Questions and Answers: In this section you will find C Aptitude Questions and Answers on Bitwise Operators like Bitwise OR (|), Bitwise AND (&), Bitwise NOT (!). C编程按位运算符的天赋问题和答案&…

ORACLE SQL获取时间字段

是本周第几天 Select to_char(sysdate,D)-1 from dual 24小时的形式显示出来要用HH24select to_char(sysdate,yyyy-MM-dd HH24:mi:ss) from dual;select to_date(2005-01-01 13:14:20,yyyy-MM-dd HH24:mi:ss) from dual;to_date() function1.日期格式参数 含义说明D 一周中的星…

优秀的基数统计算法——HyperLogLog

为什么要使用 HyperLogLog? 在我们实际开发的过程中,可能会遇到这样一个问题,当我们需要统计一个大型网站的独立访问次数时,该用什么的类型来统计? 如果我们使用 Redis 中的集合来统计,当它每天有数千万级别的访问时,将会是一个巨大的问题。因为这些访问量不能被清空,…

图论模型Floyd算法

图论模型Floyd算法一、简介二、MATLAB执行代码一、简介 二、MATLAB执行代码 tulun2.m a [ 0,50,inf,40,25,10;50,0,15,20,inf,25;inf,15,0,10,20,inf;40,20,10,0,10,25;25,inf,20,10,0,55;10,25,inf,25,55,0]; [D, path]floyd(a)floyd.m function [D,path,min1,path1]floyd(a,…

php变量赋值给js

原文:php变量赋值给js$(document).ready(function(){<?php $f"name"?>var t<?php echo $f?>;alert(t)})或 <script language"javascript" > var t<?php echo "sd"?>; alert(t) </script>关键是sd两旁既要加…

java 根据类名示例化类_Java LocalDateTime类| AdjustInto()方法与示例

java 根据类名示例化类LocalDateTime类AdjustInto()方法 (LocalDateTime Class adjustInto() method) adjustInto() method is available in java.time package. AdjustInto()方法在java.time包中可用。 adjustInto() method is used to adjust this LocalDateTime object into…

2013-11-11 Oracle 课堂测试 练习题 例:BULK COLLECT及return table

--1) 查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的 --学生编号、学生名称、图书编号、图书名称、借出日期&#xff1b; select s.stuid, s.stuname, b.bid, b.title, bo.t_timefrom borrow bojoin student s on bo.stuid s.stuidjoin book b on bo.b…

查询附近的人——GEO

受过高等教育的我们都知道,我们所处的任何位置都可以用经度和纬度来标识,经度的范围 -180 到 180,纬度的范围为 -90 到 90。纬度以赤道为界,赤道以南为负数,赤道以北为正数;经度以本初子午线(英国格林尼治天文台)为界,东边为正数,西边为负数。 Redis 在 3.2 版本中增…

种群竞争模型

种群竞争模型一、种群竞争模型二、分析&#xff08;1&#xff09;未改变初值&#xff08;2&#xff09;改变自然增长率r&#xff08;3&#xff09;改变该环境种群最大容量&#xff08;4&#xff09;改变两个种群初始数量&#xff08;5&#xff09;改变资源竞争力三、MATLAB执行…

为什么我要选择erlang+go进行server架构(2)

原创文章&#xff0c;转载请注明出处&#xff1a;server非业余研究http://blog.csdn.net/erlib 作者Sunface 为什么我要选择Erlang呢&#xff1f; 一、erlang特别适合中小团队创业&#xff1a; erlang有异常成熟、经过电信级别大规模验证的OTP应用库&#xff0c;仅仅须要非常ea…

Python | 计算给定数字的平方(3种不同方式)

Given a number, and we have to calculate its square in Python. 给定一个数字&#xff0c;我们必须在Python中计算其平方。 Example: 例&#xff1a; Input:Enter an integer numbers: 8Output:Square of 8 is 64Calculating square is a basic operation in mathematics;…

PFILE和SPFILE

PFILE和SPFILE介绍一、PFILEPfile&#xff08;Parameter File&#xff0c;参数文件&#xff09;是基于文本格式的参数文件&#xff0c;含有数据库的配置参数。1、PFILE - initSID.ora(默认PFILE名称),位置在$ORACLE_HOME/dbs目录下面。 这是一个文本文件&#xff0c;可以用任何…

内存淘汰机制与算法

在本文开始之前,我们先要明白:在 Redis 中,过期策略和内存淘汰策略两个完全不同的概念,但很多人会把两者搞混。 首先,Redis 过期策略指的是 Redis 使用那种策略,来删除已经过期的键值对;而 Redis 内存淘汰机制指的是,当 Redis 运行内存已经超过 Redis 设置的最大内存之…

Java基础结构语句和IDEA使用和数组

Java基础结构语句和IDEA和数组基本类型和引用类型static第一章&#xff1a;结构语句1.1.1三元运算符1.1.2switch语句1.1.3do-while循环第二章&#xff1a;IDEA2.1_IDEA的项目结构2.2_IDEA的使用&#xff08;代码及时自动保存&#xff09;&#xff08;1&#xff09;代码快捷方式…