Redis 迭代历程

图片来源: https://bytebytego.com 2010 - 独立版 Redis(Standalone Redis) Redis 1.0 发布,架构简单,通常用作业务应用的缓存 特点:数据完全存储在内存中 问题:重启 Redis 会丢失所有数据,所有流量直接打到数据库 2013 - 持久化(Persistence) Redis 2.8 发布,引入持久化机制 RDB:内存数据快照,定期保存数据状态到磁盘 AOF(Append-Only File):记录每条写命令,保证数据在重启后恢复 2013 - 主从复制(Replication) Redis 2.8 增加复制功能,提高可用性 主节点:处理实时读写请求 从节点:同步主节点数据,实现高可用 2013 - Sentinel Redis 2.8 引入 Sentinel,用于监控 Redis 实例 功能: 监控实例状态 事件通知 自动故障转移(failover) 配置提供者(配置管理) 2015 - 集群(Cluster) Redis 3.0 发布,增加 Redis 集群功能 Redis Cluster:分布式数据库解决方案,通过分片管理数据 数据分片机制:将数据分为 16384 个槽位,每个节点负责部分槽位 后续发展 2017 - Redis 5.0:增加 Stream 数据类型 2020 - Redis 6.0:引入网络模块多线程 I/O ...

July 20, 2024 · 1 min · 78 words · Guangyang Zhong

Redis 如何持久化数据

图片来源: https://bytebytego.com 一、AOF(Append-Only File) 特点:写后日志(Write-after log),记录执行过的命令而不是数据本身 工作原理: Redis 先在内存中执行命令修改数据 然后将命令写入 AOF 文件 优势: 基于事件的设计,数据恢复简单 不阻塞当前写操作,性能高 注意:AOF 是命令日志,恢复时需要重放日志,日志大时恢复较慢 二、RDB(Redis Database) 特点:数据快照,在特定时间点记录整个数据集 工作原理: 主线程 fork 出 bgsave 子进程,共享内存数据 bgsave 读取数据并写入 RDB 文件 主线程修改数据时,创建数据副本(Copy-on-write) 主线程对副本操作,bgsave 继续写入 RDB 文件 优势: 数据恢复快速,只需加载快照即可 限制: 快照频率低时可能丢失最近修改的数据 三、混合策略(Mixed Approach) 生产环境常用策略: 使用 RDB 定时生成数据快照 使用 AOF 记录快照之后的命令 优势: 结合 RDB 快速恢复和 AOF 高可靠性,兼顾性能与安全

July 19, 2024 · 1 min · 54 words · Guangyang Zhong

Redis 为什么这么快

图片来源: https://bytebytego.com 一、基于内存(RAM-based) 1. Redis 使用内存而非磁盘 Redis 的数据主要存储在 RAM(内存) 中 避免了磁盘 IO 带来的巨大延迟 2. 不同存储介质的延迟对比(近似值) 存储层级 延迟 CPU Register ~0.3 ns L1 Cache ~0.9 ns L2 Cache ~2.8 ns L3 Cache ~12.9 ns RAM ~120 ns SSD 50–150 μs HDD 1–10 ms 内存访问速度比 SSD 快 数百倍,比 HDD 快 数万倍,这是 Redis 高性能的根本原因 二、IO 多路复用 + 单线程模型 1. IO 多路复用(IO Multiplexing) Redis 使用 IO 多路复用机制(如 epoll / kqueue / select) 一个线程即可同时监听 大量 Socket 连接 示意: ...

July 18, 2024 · 1 min · 213 words · Guangyang Zhong

Redis 应用场景

图片来源: https://bytebytego.com 1. 会话管理(Session) 用途:在分布式系统中共享用户会话数据 实现方式:Redis STRING 或 HASH 存储 session 信息 2. 缓存(Cache) 用途:缓存对象、页面或热点数据,减少数据库压力 实现方式:Redis STRING / HASH / ZSET 3. 分布式锁(Distributed Lock) 用途:保证多个分布式服务间的资源互斥访问 实现方式:Redis STRING + 设置过期时间 + 原子操作(SETNX / Lua 脚本) 4. 计数器(Counter) 用途:统计文章点赞数、阅读量等 实现方式:Redis INCR / INCRBY 5. 限流器(Rate Limiter) 用途:限制特定用户或 IP 的请求频率 实现方式:Redis STRING / HASH + TTL 或令牌桶算法 6. 全局 ID 生成器(Global ID Generator) 用途:生成分布式系统全局唯一 ID 实现方式:Redis INCR / INCRBY 7. 购物车(Shopping Cart) 用途:存储用户购物车中的商品及数量 实现方式:Redis HASH(key=用户ID,field=商品ID,value=数量) 8. 用户留存计算(User Retention) 用途:统计用户每日登录情况,计算留存率 实现方式:Redis BITMAP 或 HyperLogLog 9. 消息队列(Message Queue) 用途:实现简单的队列消息传递机制 实现方式:Redis LIST(LPUSH / RPOP) 10. 排行榜(Ranking) 用途:对文章、用户或商品进行排名展示 实现方式:Redis ZSET(有序集合,按分数排序)

July 18, 2024 · 1 min · 93 words · Guangyang Zhong

全方位理解 Redis

图片来源: https://bytebytego.com 一、什么是 Redis Redis = Remote Dictionary Server(远程字典服务) 特点:多模型数据库,延迟低至毫秒以下 角色: 二、Redis 的应用 被众多知名公司采用:X, Pinterest, Airbnb, Uber, Slack, Instagram 等 三、Redis 如何改变数据库格局 支持 内存读写 + 全量持久化(AOF / Snapshot) 高可用性:当实例失败时,可以通过 AOF 或 Snapshot 恢复数据 → 无数据丢失 四、Redis 数据结构 Redis 是 KV 数据模型,但支持多种数据类型: STRING:“Bytebytego” BITMAP:0100001 01101101 0110100 LIST:A → B → C → E SET:{A, B, C} HASH:{ “e”: “bytebyte”, “b”: “go” } 五、基本命令 类型 命令 示例 设置 SET SET username “adam smith” 获取 GET GET username 删除 DEL DEL username 自增 INCR INCR visitor_count Hash 设置 HSET HSET user:1000 name “Alice” age 30 六、Redis 模块 Redis 扩展模块: ...

July 18, 2024 · 1 min · 125 words · Guangyang Zhong