redis的基础知识

Redis 是一个开源的内存数据结构存储系统,支持多种数据类型和原子操作,广泛应用于缓存、消息队列、分布式锁等场景。以下是其核心知识点:


​一、核心特性​

  1. ​内存存储​

    数据完全存储在内存中,读写速度极快(单节点可达数十万至百万 ops/s)。

  2. ​丰富的数据类型​

    支持 String、Hash、List、Set、Sorted Set 等基础类型,以及 Bitmap、HyperLogLog、Geo 等扩展类型。

  3. ​原子性与事务​

    单个命令原子执行;通过 MULTI/EXEC实现事务(不支持回滚);Lua 脚本可保证多命令原子性。

  4. ​持久化机制​

    • ​RDB​​:定时生成内存快照,恢复速度快但可能丢失数据。

    • ​AOF​​:记录写命令日志,数据更完整但文件较大。

    • 混合持久化:结合 RDB 和 AOF,平衡性能与数据安全。


​二、核心数据结构与使用场景​

数据类型 特点与用途 典型命令
​String​ 最基础类型,存储字符串或二进制数据(如图片),支持计数器、缓存等场景 SET, GET, INCR
​Hash​ 键值对集合,适合存储对象(如用户信息),节省内存 HSET, HGET, HGETALL
​List​ 双向链表,支持消息队列、任务调度,可阻塞操作(如 BLPOP LPUSH, RPOP, LRANGE
​Set​ 无序集合,支持去重、交集/并集/差集操作,适合标签系统、共同关注等场景 SADD, SMEMBERS, SINTER
​Sorted Set​ 带分数的有序集合,用于排行榜、延迟队列(按分数排序) ZADD, ZRANGE, ZREVRANK
​Bitmap​ 位图操作,高效统计二值状态(如签到、用户活跃) SETBIT, GETBIT
​HyperLogLog​ 基数估算,内存极小,用于 UV 统计(误差约 0.81%) PFADD, PFCOUNT
​Stream​ 日志流结构,支持消息队列(ACK、消费组),适合可靠消息传递 XADD, XREADGROUP

​三、高可用与扩展​

  1. ​主从复制​

    异步复制数据到从节点,支持读扩展和备份,但存在数据延迟风险。

  2. ​哨兵模式(Sentinel)​

    自动监控主节点状态,触发故障转移(选举新主节点)。

  3. ​集群模式(Cluster)​

    数据分片存储(16384 个哈希槽),支持水平扩展,需注意跨槽操作限制。


​四、内存管理与性能优化​

  1. ​内存淘汰策略​

    设置 maxmemory限制,配置策略如 volatile-lru(淘汰最近最少使用的带过期时间的键)。

  2. ​持久化与恢复​

    • RDB 优先用于快速恢复,AOF 用于数据完整性。

    • 混合持久化(AOF + RDB)平衡性能与数据安全。

  3. ​性能优化技巧​

    • 使用管道(Pipelining)减少 RTT。

    • 避免 KEYS *SMEMBERS等 O(N) 命令,改用 SCAN分页。

    • 热点数据分散存储,避免单点瓶颈。


​五、常见问题与解决方案​

  1. ​缓存穿透​

    • 问题:查询不存在的数据导致数据库压力大。

    • 方案:缓存空值或使用布隆过滤器。

  2. ​缓存击穿​

    • 问题:热点数据过期后大量请求涌入数据库。

    • 方案:互斥锁(Redisson)或逻辑过期(异步重建)。

  3. ​缓存雪崩​

    • 问题:大量 Key 同时失效。

    • 方案:为 TTL 添加随机值,分散失效时间。


​六、典型应用场景​

  • ​缓存​​:减轻数据库压力,提升响应速度。

  • ​分布式锁​ ​:通过 SETNX或 RedLock 实现资源互斥访问。

  • ​消息队列​​:基于 List 或 Stream 实现异步通信。

  • ​排行榜​​:利用 Sorted Set 按分数排序。


​七、常用命令示例​

复制代码
# 字符串操作
SET key value       # 设置键值
GET key             # 获取键值

# 哈希操作
HSET user name "Alice"  # 存储对象字段
HGETALL user          # 获取所有字段及值

# 列表操作
LPUSH task "task1"    # 左端插入元素
RPOP task             # 右端弹出元素

# 事务操作
MULTI               # 开启事务
EXEC                # 提交事务

通过合理选择数据结构和配置持久化策略,Redis 能在高性能场景下稳定运行。建议结合具体业务需求,参考官方网页及最佳实践。

相关推荐
u0103055275 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u0103055275 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝7 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u0103055277 天前
Java图像处理实战指南
人工智能·1024程序员节
u0103055277 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552710 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552710 天前
Java I/O核心操作实战
人工智能·1024程序员节
u01030552711 天前
ArrayList操作详解与实战应用
人工智能·1024程序员节
u01030552712 天前
Java模块化编程实战指南
人工智能·笔记·1024程序员节
u01030552713 天前
使用BufferedReader读取控制台输入
人工智能·1024程序员节