我的编程空间,编程开发者的网络收藏夹
学习永远不晚

redis内部运作机制是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

redis内部运作机制是什么

本篇内容主要讲解“redis内部运作机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“redis内部运作机制是什么”吧!

redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。

redis内部运作机制是什么

当Redis服务器初始化的时候会创建 redis.h/REDIS_DEFAULT_DBNUM(后面简写 N ) 个数据库,且数据库的id是从 0 到 N-1 , 所有的数据库保存到 redis.h/redisServer.db 数组中 。

在客户端可以通过 “SELECT” 命令进行切换,其中程序是直接用 redis.h/redisServer.db[number] 进行切换。 但是,一些内部程序,比如 AOF 程序、复制程序和 RDB 程序,需要知道当前数据库的号码, 如果没有 id 域的话,程序就只能在当前使用的数据库的指针,和 redisServer.db 数组中所 有数据库的指针进行对比,以此来弄清楚自己正在使用的是那个数据库。

Redis数据库的结构:

typeof  struct   redisDb{int id ;   // 数据库的iddict *dict ; // 保存着该数据库的所有键值对 也被称为键空间dict *expires ; // 保存着键的过期时间…..} redisDb ;Redis 是一个键值对 字典表,同样Redis数据库存储形式也是键值对 字典表键是字符串值可以是字符型、list 列表、 hash、集合以及 有序集合其中之一

Redis 数据库增、删、改、查等操作的键空间操作:

新增: Redis会在键空间字典中增加一个键-值对,其中键为一个字符串,值为任意一个值类型。 删除: Redis会在键空间字典中删去对应键的键-值对 更新: Redis会在键空间字典中释放之前对应键的值对象,并让键指向新的值对象 查询: Redis会在键空间字典中查询对应键的值对象: 键不存在,返回NULL 键存在,且类型正确,返回正确的值 键存在,但类型不正确,返回类型错误 其他操作: 除了上面展示的键值操作之外,还有很多针对数据库本身的命令,也是通过对键空间进行处理 来完成的: FLUSHDB 删除键空间中的所有键值对 RANDOMKEY 从键空间中随机返回一个键 DBSIZE 返回键空间中键值对的数量 EXISTS 检查给定键是否存在于键空间中 RENAME 在键空间中,对给定键进行改名

键的过期时间

在Redis数据库中,所有键的过期时间都保存在RedisDb结构体的expires字典中,其中键为一个指向dict 字典(键空间)里某个键的指针,值为改建的过期时间,用long long型表示。

Redis 有四个命令可以设置键的生存时间(可以存活多久)和过期时间(什么时候到期): EXPIRE 以秒为单位设置键的生存时间; PEXPIRE 以毫秒为单位设置键的生存时间; EXPIREAT 以秒为单位,设置键的过期 UNIX 时间戳; PEXPIREAT 以毫秒为单位,设置键的过期 UNIX 时间戳。

虽然有那么多种不同单位和不同形式的设置方式,但是 expires 字典的值只保存“以毫秒为单 位的过期 UNIX 时间戳” ,这就是说,通过进行转换,所有命令的效果最后都和 PEXPIREAT 命令的效果一样。

过期键的清除

定时清除: 在创建KEY的时候创建一个定时任务,在KEY到期时定时任务会被触发,第一时间清除过期KEY。 此种操作对内存最友好,不会有垃圾数据占用内存情况存在 缺点是会造成很大的服务器负载,特别是CPU负载高的时候,CPU很大一部分负载用在了删除不必要的KEY上了

惰性清除: 放任键空间的键不管,每次查询KEY的时候先去校验KEY是否过期,过期则删除,不过期则正常返回相应的VALUE。 此种操作对CPU最友好,这种策略仅限于当前KEY,相关不必要的KEY不会造成CPU负载 缺点是:容易造成内存空间浪费,特别是当系统中存在大量过期KEY且很少被用到,这十分影响非常依赖于内存大小Redis的性能

定期删除: 由定时脚本cron定时对expires的键扫描判断是否有过期的KEY存在,如存在,将其删除掉。 这是一种折中方案,既不会过多消耗CPU,又可以定时清楚惰性删除忽略到的不必要的内存消耗

Redis采用的“惰性清除”和“定期清楚”相结合的方式,其中定期删除模式是在规定的时间限制内,尽 可能地遍历各个数据库的 expires 字典,随机地检查一部分键的过期时间,并删除其中的过期键。

伪代码如下:

def activeExpireCycle():# 遍历数据库(不一定能全部都遍历完,看时间是否足够)for db in server.db:# MAX_KEY_PER_DB 是一个 DB 最大能处理的 key 个数 # 它保证时间不会全部用在个别的 DB 上(避免饥饿) i=0                                    while (i # 数据库为空,跳出 while ,处理下个 DB if db.is_empty(): break# 随机取出一个带 TTL 的键             key_with_ttl = db.expires.get_random_key()# 检查键是否过期,如果是的话,将它删除 if is_expired(key_with_ttl):           db.deleteExpiredKey(key_with_ttl)# 当执行时间到达上限,函数就返回,不再继续 # 这确保删除操作不会占用太多的 CPU 时间if reach_time_limit(): returni += 1

Redis 过期键删除的主从同步问题(Redis的机制是由主节点统一控制)

如果服务器是主节点,当它删除一个过期键之后,会显式的向所有附属节点发送一条DEL命令 如果服务器是附属节点,当它判断到当前KEY已经过期,会将该键过期的消息发送给主服务器,主服务器删除后向所有的从服务器节点发送DEL命令。

从服务器节点不自主的对键进行删除是为了保持和主服务器数据的绝对一致性,即当一个过期键还存在主服务器上,这个键在所有的从服务器上也不会被删除。

到此,相信大家对“redis内部运作机制是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

redis内部运作机制是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

redis内部运作机制是什么

本篇内容主要讲解“redis内部运作机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“redis内部运作机制是什么”吧!redis 就是一个数据库,不过与传统数据库不同的是 redis 的
2023-06-27

什么是git内部机制

Git是一种分布式版本控制系统,它被广泛应用于软件开发、版本管理和代码协作。正因为Git的分布式性,每个开发者都可以在本地进行代码管理和版本控制,而不必受限于服务器和网络的限制。Git内部机制是什么?Git内部机制主要包括四个方面:对象、索
2023-10-22

C++析构函数内部工作机制是什么

本篇内容主要讲解“C++析构函数内部工作机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++析构函数内部工作机制是什么”吧!1、析构函数的内部工作机制众所周知,在对象的生命周期结束时会
2023-07-05

Redis的内存管理机制是什么

Redis使用一种称为"内存驱动"的内存管理机制。该机制将所有数据存储在内存中,并通过使用LRU算法(最近最少使用)来管理内存中的数据。当内存达到设定的阈值时,Redis会根据LRU算法淘汰一些数据以释放空间。此外,Redis还可以通过将数
Redis的内存管理机制是什么
2024-05-07

Ajax的内部实现机制是什么

Ajax的内部实现机制主要涉及以下几个方面:1. XMLHttpRequest对象:Ajax通过XMLHttpRequest对象与服务器进行数据交互。XMLHttpRequest对象可以发送HTTP请求和接收服务器返回的数据。2. 事件处理
2023-08-16

正则表达式引擎的内部工作机制是什么

这篇文章给大家分享的是有关正则表达式引擎的内部工作机制是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。了解正则表达式引擎的必要性:知道正则表达式引擎是如何工作的有助于你很快理解为何某个正则表达式不像你期望的那
2023-06-17

Node.js内置模块的运行机制是什么

今天小编给大家分享一下Node.js内置模块的运行机制是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。内置模块一些栗子F
2023-07-04

mysql事务id内部生成机制是什么

MySQL事务ID内部生成机制是通过自增长计数器来实现的。MySQL使用一个内部的64位计数器来生成事务ID。每当发生一个新的事务时,该计数器的值就会自动增加,并作为当前事务的ID。事务ID的生成是在事务开始时进行的,而不是在事务提交时。事
2023-10-09

redis缓存机制是什么

redis 的缓存机制通过将数据副本存储在内存中来加速访问,提高应用程序性能。其核心步骤包括:数据写入时存储在内存中;读取时首先检查内存,存在则直接返回,不存在则从持久化存储加载;设置过期时间 (ttl) 以实现缓存失效;内存空间不足时采用
redis缓存机制是什么
2024-04-08

缓存服务器的运作机制是什么

本篇内容介绍了“缓存服务器的运作机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用户在访问服务器的时候服务器需要将用户的请求以及应用
2023-06-27

VUE 模板语法揭秘:理解其内部运作机制

Vue.js 模板语法是构建动态 Web 应用程序的重要组成部分。本文深入剖析其内部运作机制,帮助开发者理解代码如何处理和解析,从而优化代码编写和应用程序性能。
VUE 模板语法揭秘:理解其内部运作机制
2024-03-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录