您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
redis是什么(redis原理详解)
节点,哨兵,内存redis是什么(redis原理详解)
发布时间:2020-12-06加入收藏来源:互联网点击:
很多朋友想了解关于redis的一些资料信息,下面是小编整理的与redis相关的内容分享给大家,一起来看看吧。很多朋友想了解关于redis分布式锁的一些资料信息,下面是小编整理的与redis分布式锁相关的内容分享给大家,一起来看看吧。
又到了金三银四的跳槽季,很多同学已经开始行动了。今天我帮你一把,把这套Redis面试题发出来,帮你通关。
图片来自Pexels
为什么Redis反应很快?
数据保存在内存中
Redis数据存储在内存中,读写操作只需要访问内存,不需要磁盘IO。
底层数据结构
如下所示:
Redis数据以key:value的格式存储在哈希表中,时间复杂度为o(1)。Redis为value定义了丰富的数据结构,包括动态字符串、双向链表、压缩列表、hash、跳转表和整数数组。可以根据值的特征选择最有效的数据结构。
单线程模型
Redis采用单线程模型进行网络IO和数据读写,可以绑定CPU,避免了线程上下文切换带来的开销。
注意:Redis 6.0对网络请求引入了多线程模型,单线程用于读写操作。
Redis多线程网络模型如下图所示:
IO 多路复用
Redis采用Epoll网络模型,如下图所示:
内核会一直监听新的套接字连接事件和已建立的套接字连接的读写事件,并将监听到的事件放入事件队列中。Redis使用单线程不断地处理这个事件队列。这避免了阻塞等待连接和读写事件。
这些事件都绑定了回调函数,回调函数会调用Redis的处理函数进行处理。
Redis底层数据结构
Redis有五种数据类型,包括字符串、列表、集合、有序集和字典。
Redis底层有六种数据结构,包括动态字符串、双向链表、ziplist、哈希表、跳转表和整数数组。
Redis数据类型和底层数据结构有以下对应关系:
字符串类型
底层数据结构是一个动态字符串。
rrow-right" data-track="42">②列表如果同时满足下面条件,就使用压缩列表,否则使用双向链表:
列表中单个元素小于 64 字节列表中元素个数少于 512压缩列表在内存中是一块儿连续的内存空间,结构如下:
压缩列表查找时间复杂度是 o(n)。
③集合
如果同时满足下面条件,就使用有序整数数组,否则使用 hash 表:
集合中元素都是整数类型集合中元素个数不超过 512 个④有序集合
如果同时满足下面 2 个条件,就使用压缩列表,否则使用跳表:
集合中元素都小于 64 字节集合中元素个数小于 128 个注意:有序集合还有一个 HASH 表用于保存集合中元素的分数,做 ZSCORE 操作时,查询的就是这个 HASH 表,所以效率很高。
跳表的结构如下:
如果不加索引,查找 10 这个数字需要查询 10 次,使用了二级索引,查找 10 这个数字需要 5 次,而使用一级索引,需要查询 3 次。
跳表的每一层都是一个有序链表,最下面一层保存了全部数据。跳表插入、删除、查询的时间复杂度是 o(logN)。跳表需要存储额外的索引节点,会增加额外的空间开销。
⑤字典
如果同时满足下面 2 个条件,就使用压缩列表,否则使用 hash 表:
字典中每个 entry 的 key/value 都小于 64 字节字典中元素个数小于 512 个Redis 缓存淘汰策略
Redis 总共有 8 种淘汰策略,如下图:
volatile-lfu 和 allkeys-lfu 策略是 4.0 版本新增的:
lru:是按照数据的最近最少访问原则来淘汰数据,可能存在的问题是如果大批量冷数据最近被访问了一次,就会占用大量内存空间,如果缓存满了,部分热数据就会被淘汰掉。lfu:是按照数据的最小访问频率访问次数原则来淘汰数据,如果两个数据的访问次数相同,则把访问时间较早的数据淘汰。Redis 数据持久化
Redis 持久化的方式有 2 种,一种是写后日志(AOF),一种是内存快照(RDB)。
①AOF 日志
AOF 日志记录了每一条收到的命令,Redis 故障宕机恢复时,可以加载 AOF 日志中的命令进行重放来进行故障恢复。
AOF 有 3 种同步策略,如下图:
如果不是对丢失数据特别敏感的业务,推荐使用 everysec,对主线程的阻塞少,故障后丢失数据只有 1s。
②RDB 快照
RDB 快照是一个内存快照,记录了 Redis 某一时刻的全部数据。
③混合日志
从 Redis 4.0 开始,AOF 文件也可以保存 RDB 快照,AOF 重写的时候 Redis 会把 AOF 文件内容清空,先记录一份 RDB 快照,这份数据以"REDIS"开头。
记录 RDB 内容后,AOF 文件会接着记录 AOF 命令。故障恢复时,先加载 AOF 文件中 RDB 快照,然后回放 AOF 文件中后面的命令。
④主从同步
Redis 主从同步时,主节点会先生成一份 RDB 快照发送给从节点,把快照之后的命令写入主从同步缓存区(replication buffer),从节点把 RDB 文件加载完成后,主节点把缓存区命令发送给从节点。
⑤AOF 重写
AOF 日志是用记录命令的方式追加的,这样可能存在对同一个 key 的多条命令,这些命令是可以合并成 1 条的。比如对同一个 key 的多个 set 操作日志,可以合成一条。
上一篇:redmi note 7 pro怎么样 准备好入手了吗
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |