diff --git a/notes/Redis.md b/notes/Redis.md index cab47ca5..8bd8aed0 100644 --- a/notes/Redis.md +++ b/notes/Redis.md @@ -10,14 +10,13 @@ * [字典](#字典) * [跳跃表](#跳跃表) * [四、使用场景](#四使用场景) - * [缓存](#缓存) * [计数器](#计数器) - * [消息队列](#消息队列) + * [缓存](#缓存) * [查找表](#查找表) - * [交集运算](#交集运算) - * [排行榜](#排行榜) - * [分布式 Session](#分布式-session) - * [分布式锁](#分布式锁) + * [消息队列](#消息队列) + * [会话缓存](#会话缓存) + * [分布式锁实现](#分布式锁实现) + * [其它](#其它) * [五、Redis 与 Memcached](#五redis-与-memcached) * [数据类型](#数据类型) * [数据持久化](#数据持久化) @@ -333,37 +332,43 @@ int dictRehash(dict *d, int n) { # 四、使用场景 -## 缓存 - -将热点数据放到内存中,设置内存的最大使用量以及过期淘汰策略来保证缓存的命中率。 - ## 计数器 -Redis 这种内存数据库能支持计数器频繁的读写操作。 +可以对 String 进行自增自减运算,从而实现计数器功能。 -## 消息队列 +例如对于网站访问量,如果使用 MySQL 数据库进行存储,那么每访问一次网站就要对磁盘进行读写操作。而对 Redis 这种内存型数据库的读写性能非常高,很适合存储这种频繁读写的计数量。 -使用 List 数据类型,它是双向链表。 +## 缓存 + +将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。 ## 查找表 -使用 HASH 数据类型。 +例如 DNS 记录就很适合使用 Redis 进行存储。 -## 交集运算 +查找表和缓存类似,也是利用了 Redis 快速的查找特性。但是查找表的内容不能失效,而缓存的内容可以失效。 -使用 SET 类型,例如求两个用户的共同好友。 +## 消息队列 -## 排行榜 +List 是一个双向链表,可以通过 lpop 和 lpush 写入和读取消息。 -使用 ZSET 数据类型。 +不过最好使用 Kafka、RabbitMQ 等消息中间件。 -## 分布式 Session +## 会话缓存 -多个应用服务器的 Session 都存储到 Redis 中来保证 Session 的一致性。 +在分布式场景下具有多个应用服务器,可以使用 Redis 来统一存储这些应用服务器的会话信息,使得某个应用服务器宕机时不会丢失会话信息,从而保证高可用。 -## 分布式锁 +## 分布式锁实现 -除了可以使用 SETNX 命令实现分布式锁之外,还可以使用官方提供的 RedLock 分布式锁实现。 +在分布式场景下,无法使用单机环境下的锁实现。当多个节点上的进程都需要获取同一个锁时,就需要使用分布式锁来进行同步。 + +除了可以使用 Redis 自带的 SETNX 命令实现分布式锁之外,还可以使用官方提供的 RedLock 分布式锁实现。 + +## 其它 + +Set 可以实现交集、并集等操作,例如共同好友功能。 + +ZSet 可以实现有序性操作,例如排行榜功能。 # 五、Redis 与 Memcached