【Redis】数据结构&&持久化

一、redis数据结构有哪几种

Redis 常用的数据类型有五种:String、List、Hash、Set、Sorted Set(ZSet)。另外 Redis 还有 Bitmap、HyperLogLog、Geo、Stream 等扩展数据类型。底层实现会根据数据量和场景选择不同的数据结构,比如 SDS、ziplist/listpack、hashtable、quicklist、skiplist 等。

其中常问的数据类型是 ZSet

Redis 的 ZSet 底层有两种结构,小数据量使用 listpack,大数据量使用 skiplist+dict。

listpack 是连续内存结构,优点是节省内存,但是查询和插入效率较低,需要遍历,时间复杂度是 O(N)。

当数据量增大后,ZSet 有大量范围查询、排名查询和插入操作,listpack 性能不足,所以 Redis 会转换成 skiplist。

skiplist 是一种多层链表结构,平均查询和插入复杂度都是 O(logN),非常适合有序集合。

同时 Redis 还会配合 dict 使用,因为 dict 可以通过 member 快速找到 score,而 skiplist 负责按照 score 排序和范围查询。

listpack

和 ZipList 压缩列表几乎一样,但解决了连锁更新的问题,所以是新设计出来取代 ZipList 压缩列表的

SkipList 跳表

无论是 ZipList 还是 QuickList,在访问时,本质都是一个个遍历的访问,他们在查找首尾结点时性能高。但是要做范围查找时,只能一个一个遍历直到范围的起始点。

SkipList 跳表 是一种多层链表

  • 元素按 score 分数进行升序排序存储
  • 一个节点内可能包含多个指针,每个指针的跨度不同。链表遍历慢的原因就是因为指针的跨度为1
  • 当做范围查找时,利用高层级的指针,快速跳过大量无关节点,快速定位到范围的起始点
  • 跳表通过牺牲少量内存空间(存储多层指针),换取了更高效的范围查找性能

二、Redis持久化

在 Redis 的默认配置文件(redis.conf)中,RDB(Redis Database Backup File) 是 默认开启 的,而 AOF(Append-Only File)需要手动配置开启。

RDB

Redis数据备份文件,也被叫做Redis数据快照

把内存中的所有数据都记录到磁盘文件中,当Redis实例故障重启后,读取磁盘快照文件,恢复数据

RDB 异步持久化的底层原理

RDB异步持久化 即bgSave,就是开启一个子进程,由子进程读取内存数据,并写入RDB文件。

优点:宕机后恢复速度快、文件体积小

缺点:数据安全性有问题,因为RDB执行间隔时间长,两次RDB之间写入的数据有丢失风险。但是RDB的间隔时间又不能设置的过短,因为RDB的过程是比较耗时的,如果间隔时间过短,根本忙不过来。

AOF

AOF全称为Append Only File (追加文件) 。Redis处理的每一个写命令 都会记录在AOF文件。所以可以把Aof文件看做命令日志文件

优点:数据安全性更高,例如everysec策略,只会丢失1秒以内的数据

缺点:宕机后恢复速度慢,因为AOF文件记录的是命令,需要依次执行;文件体积大,需要进行AOF文件重写,此时会占用大量资源

混合持久化

开启混合持久化后,当 AOF 文件重写时

  1. 将当前内存数据以 RDB 格式 写入新 AOF 文件的开头
  2. 后续增量数据以 AOF 格式 追加到文件末尾
相关推荐
灯澜忆梦12 分钟前
【MySQL10】进阶篇 | 索引_#2性能优化
数据库·sql·mysql·性能优化
爱跳舞的烤冷面18 分钟前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
C++ 老炮儿的技术栈2 小时前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio
MC皮蛋侠客2 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
疯狂打码的少年2 小时前
【数据结构】队列:定义、顺序队列与链式队列
数据结构·笔记
蔬菜_3 小时前
前端转全栈-day5(数组、list、set)
java·前端·数据结构·list
zt1985q3 小时前
本地部署开源网络书签与内容管理工具 Karakeep 并实现外部访问
运维·服务器·网络·数据库·网络协议·开源
CV-X.WANG4 小时前
从零理解 ORB-SLAM3(二):系统全景、执行上下文与核心数据结构
数据结构
IvorySQL4 小时前
PostgreSQL 日报| PostgreSQL 19 默认 WAL 压缩算法(8 月 8 日)
数据库·postgresql·区块链
Doraemomo5 小时前
数据结构-二叉树
数据结构