【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 格式 追加到文件末尾
相关推荐
何中应18 小时前
Spring Boot整合Doris
java·数据库·spring boot
剑锋所指,所向披靡!18 小时前
数据结构之关键路径
数据结构·算法
来一碗刘肉面19 小时前
队列的链式实现
数据结构·c++·算法·链表
KaMeidebaby19 小时前
卡梅德生物技术快报|原核膜蛋白表达优化实操手册,膜蛋白的纯化梯度洗脱完整流程
前端·网络·数据库·人工智能·算法
Summer-Bright19 小时前
深度 | Agent 协议标准化:一场决定了 AI 经济底层规则的基础设施战争
java·数据库·人工智能·ai
我叫张小白。19 小时前
LangChain 结构化输出(Structured Output)技术文档
java·数据库·langchain
吴声子夜歌19 小时前
MongoDB 4.x——数据模型
数据库·mongodb
七夜zippoe20 小时前
DolphinDB实时排名计算:Top-N实时排行
数据库·dolphindb·计算·实时排名·top-n
cmes_love20 小时前
CME、LME、CBOT、NYMEX等交易所外盘期货tick和分钟历史行情数据下载和分析
数据库·区块链