RedisServer、RedisDB与数据字典Dict

本文通过讲解 RedisServer、RedisDB与数据字典Dict之间的联系,同时通过分析Set指令(v7.0 版本目前有240个命令)的执行过程,可以对其底层原理有更深的认知。

本文通过讲解 RedisServer、RedisDB数据字典Dict之间的联系,同时通过分析Set指令(v7.0 版本目前有240个命令)的执行过程,可以对其底层原理有更深的认知。

RedisServer、RedisDB与数据字典Dict

1、关于Redis

众所周知Redis是流行的、开源的,使用C语言开发的高性能,基于内存的key/value数据库。它具有高效、精心设计的底层数据结构,同时支持多种数据类型(string、list、set、zset、hash、bitmap、geo、hyperloglog等),让其能够拥有100K+/s的读写性能。正是由于这些优势让它在众多数据库中脱颖而出,支撑着众多互联网公司的海量业务。

那么你有没有想过,它的底层是如何运作的?本文从RedisServer的底层结构入手,并通过追溯Set指令操作过程与key的过期时间窥探一下运行原理。

2、redisServer、redisDB与数据字典dict

Redis服务是常见的c/s架构设计,即:Redis client客户端通过与Redis Server服务端建立连接后对存储在Redis Server端的数据进行操作。Redis Server作为一个单独的进程运行在计算机上,其对数据进行操作的工作线程为单线程,减少了锁开销以及上下文的切换。

在Redis Server进程内部有一个全局变量redisServer,存储着当前Redis Server的所有数据库、key/value数据以及其他众多信息,在Redis Server完全启动并对外服务之前对其进行初始化、赋予默认值等操作,它是运行时的一个重要数据入口。

RedisServer、RedisDB与数据字典Dict

从上图可知,Redis Server默认共拥有(0-15,自定义最大为0-255)16个数据库(redisDB),每个数据库包含有若干数据字典(dict),每个数据字典存储不同意义的数据。例如:redisDb.dict是存储当前数据库所有key/value的keyspace,redisDb.expires是存储当前数据库所有设置了过期时间的keyspace。

查询数据时从数据字典redisDb.dict中获取,判断/获取key的过期时间等操作时从数据字典redisDb.expires中获取。每个数据字典存储数据时,考虑扩容等因素会有用2个ht_table,在未扩容时数据全部存储在ht_table[0],否则可能在ht_table[0]与ht_table[1]都存有数据,ht_table使用bucket+链表(不同key在经过hash计算之后发生碰撞,会存储在同一个bucket的链表中)的形式存储具体的key/value。

3、redis client如何与数据库建立联系

每当redis client客户端与Redis Server服务端建立连接之后,Redis Server为该客户端创建结构体 client 用于存储客户端相关信息,其中就包含客户端所使用的数据库(默认为0,可以通过select指令选择其他数据库)。然后Redis Server服务端通过双向链表把这些client连接起来,存储到全局变量redisServer的clients字段中。就这样redis client客户端与Redis数据库建立了联系,后续就能直接找到对应数据库进行读、写等操作。

RedisServer、RedisDB与数据字典Dict

每当redis client客户端发送命令到服务端之后,Redis Server通过 client.db 找到对应的数据库,然后进行相关操作。

4、Set指令执行过程

RedisServer、RedisDB与数据字典Dict

5、小结

本文通过讲解 redisServer、redisDB与数据字典dict之间的联系,同时通过分析Set指令(v7.0 版本目前有240个命令)的执行过程,可以对其底层原理有更深的认知。

曾经有一位技术大咖说过:若想学习一个好的开源项目,那么首推Redis,无论从代码功能、变量声明,甚至从注释来看都无可挑剔。

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月6日 19:35
下一篇 2023年5月6日 19:35

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信