Redis的RDB&AOF与五种基础结构

Redis RDB & AOF

RDB 快照持久化

原理:按配置周期,通过fork子进程+写时复制,生成内存全量二进制快照文件dump.rdb

特点:文件紧凑、数据恢复速度快;但两次快照间存在丢数据风险,大数据量下fork操作易短暂阻塞服务

AOF 日志持久化

原理:以文本形式追加记录每一条写命令,重启时重放命令恢复数据,支持自动重写压缩冗余日志

刷盘策略:提供always/everysec/no三档,默认每秒刷盘,兼顾性能与数据安全

特点:数据丢失风险极低、文件可读可人工干预;但文件体积更大,数据恢复速度慢于RDB

核心对比与最佳实践

差异:RDB胜在小体积、快恢复,适合冷备份;AOF胜在高可靠,适合数据零丢失场景

推荐方案:Redis 4.0+开启混合持久化,AOF文件头部存RDB快照、尾部存增量命令,兼顾快速加载与数据安全,生产环境建议同时开启两种持久化

Redis 5种核心基础结构

‌String‌:二进制安全的通用类型,支持原子自增,适用于缓存、计数器、分布式锁

‌Hash‌:字段-值映射集合,可单独读写对象属性,无需全量序列化,适用于用户信息、购物车存储

‌List‌:有序可重复的双向链表,支持两端快速增删,适用于轻量队列、Feed流、滚动日志

‌Set‌:无序自动去重,支持交并差集运算,适用于UV统计、共同好友、去重抽奖

‌ZSet‌:带分数自动排序的集合,范围查询高效,适用于排行榜、延时队列

String‌练习

c 复制代码
127.0.0.1:6379> set key1 v1      #设置值
OK
127.0.0.1:6379> get key1        #获得值
"v1"
127.0.0.1:6379> keys			#获得所有的key
1)"key1"
127.0.0.1:6379> EXISTS key1		#判断某一个key是否存在
(integer) 1
127.0.0.1:6379> APPEND key1 "hello" #追加字符串,如果当前key不存在,就相当于setkey
(integer) 7
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379> STRLEN key1		 #获取字符串的长度!
(integer) 7
127.0.0.1:6379> APPEND key1 ",kaungshen"
(integer) 17
127.0.0.1:6379> STRLEN key1
(integer) 17
127.0.0.1:6379> get key1
"vlhello,kaungshen"