Redis 知识梳理
一、数据结构
- string:作为基本数据类型,能缓存任意对象的数据 。
- hash:常用于缓存对象,但性能比 string 稍差 。
- set:属于集合类型,不允许元素重复 。
- zset:有序集合,字符串元素不能重复,每个元素都关联一个浮点分数 。
- list:链表结构,按插入顺序排序,可作为消息队列使用 。
- bitmap:通过字符串当作数组的位来处理,实现高效位操作 。
- HyperLogLogs:是概率性数据结构,用于估算唯一元素数量 。
- Geospatial:地理空间结构,支持经纬度索引及相关地理位置操作 。
- stream:Redis 5 新增,适用于消息队列场景,保障消息不丢失且有序 。
二、内存淘汰策略
- noeviction:内存不足时不淘汰数据,直接报错 。
- allkeys-lru:内存不足时,依据 LRU 算法移除数据 。
- volatile-lru:使用 LRU 算法淘汰设置了过期时间的数据 。
- allkeys-random:内存不足时随机移除数据 。
- volatile-random:随机淘汰设置过期时间的数据 。
- volatile-ttl:淘汰已过期的数据 。
- volatile-lfu:淘汰一定时间内访问次数少且已过期的数据 。
- allkeys-lfu:淘汰访问次数最少的数据 。
- 设置命令:
CONFIG SET maxmemory-policy allkeys-lru(以设置 allkeys-lru 策略为例) 。
三、删除策略
- 惰性删除:访问 key 时检查是否过期,过期则删除,未访问时过期 key 仍存于内存 。
- 定期删除:Redis 随机检查部分 key,删除其中过期的,但并非所有过期 key 都会立即删除 。
- 内存淘汰策略:当内存达到 maxmemory 限制且配置相应策略时,按照策略删除过期键,为新操作腾出空间 。
四、持久化方案
- RDB(Redis Database Backup) :快照式持久化,周期性将数据转为二进制存储到磁盘,适合数据备份恢复以及重启时加载大量数据 。
- AOF(Append - Only File) :追加写日志方式,记录每一个写操作,数据恢复性好,数据完整性和持久性更佳 。
- RDB&AOF:同时使用两者,可提高数据安全性和可靠性,通过修改 Redis 配置文件中的相关参数实现 。
五、使用场景
- 缓存:在分布式系统中用于会话管理等 。
- 分布式 session:借助 redis setNX 指令、redisson 框架等实现 。
- 分布式锁:基于 list 或 stream(Redis 5 后)数据结构 。
- 消息队列 :stream 等数据结构可适用 。
- 限流 :利用 Redis 实现 。
- 实时数据处理:借助 zset 结构实现计数器、排行榜等实时数据处理和分析 。
六、集群方案
-
sentinel:通过多个 Redis 实例和 Sentinel 监控节点实现故障转移和自动恢复,适用于小规模高可用场景 。
-
codis :未详细介绍 。
-
Twitter Twemproxy :未详细介绍 。
-
Redis - cluster:Redis 官方提供的原生分布式方案,使用哈希槽(hash slot)分割数据并分配到多个节点。至少需要三个主节点,每个主节点有多个从节点,提供数据复制和高可用性,具备自动故障切换和节点自动发现功能,每个节点都能提供完整的数据访问 。
#Redis #数据结构 #内存管理 #持久化 #集群