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 能在高性能场景下稳定运行。建议结合具体业务需求,参考官方网页及最佳实践。

相关推荐
weixiao043013 小时前
Linux网络 NAT、代理服务、内⽹穿透
1024程序员节
B站_计算机毕业设计之家13 小时前
基于大数据的游戏数据可视化分析与推荐系统 Steam游戏 电子游戏 娱乐数据 Flask框架 selenium爬虫 协同过滤推荐算法 python✅
大数据·python·深度学习·游戏·信息可视化·1024程序员节·steam
云望无线图传模块13 小时前
无线图传模块:引领科技未来的创新突破
1024程序员节·无线通信模块·无线模块·远距离无线模块
impossible199472713 小时前
如何开发一个自己的包并发布到npm
node.js·1024程序员节
周杰伦_Jay13 小时前
【计算机网络核心】TCP/IP模型与网页解析全流程详解
网络·网络协议·tcp/ip·计算机网络·算法·架构·1024程序员节
啊吧怪不啊吧13 小时前
SQL之表的增删
服务器·数据库·sql·1024程序员节
小马爱打代码13 小时前
堆外内存泄漏排查:K8s中Java容器频繁OOM被重启,但堆dump无异常
1024程序员节
终焉代码14 小时前
【C++】C++11特性学习(1)——列表初始化 | 右值引用与移动语义
c语言·c++·学习·1024程序员节
ganshenml15 小时前
【Android】 Gradle 下载后本地使用方式(macOS / Windows通用)
1024程序员节