redis的5种常见使用场景
10 分钟阅读
•
825 字
+
985 词
1.Redis的第一个用例是
缓存对象
以加速Web应用程序
2.第二个就是用redis来存储session,意在
无状态服务器之间共享会话数据。
2.Redis的第
二个用例是分布式锁
,当应用程序中的多个节点需要协调对某些共享资源的访问时,就会使用分布式锁。Redis用作分布式锁,其原子命令如SETNX
SETNX lock "1234abcd" EX 3
如果尚未设置key,则SETNX命令返回1,表示客户端1已获取锁
客户端1完成工作并通过删除key来释放锁
如果key已被设置,SETNX命令则返回0,表示锁已被另一个客户端持有
在这种情况下,客户端1等待并重试SETNX操作,直到另一个客户端释放锁。
3.第三个是
速率限制器
,通过在某些计数器上使用其增量命令并在这些计数器上设置过期时间,Redis可以用作速率限制器,通过INCR命令来增加对key的请求数量,将当前计数与允许的速率限制进行比较。
4.游戏排行榜可以用
zset实现
Redis 是一个高性能的内存数据库,广泛用于各种实时数据处理场景。以下是 Redis 在一些具体功能场景中的应用和实现方式:
-
Top-K 元素
:
- 实现 :可以使用 Redis 的 Sorted Set 数据结构来实现 Top-K 元素查询。Sorted Set 会为每个元素关联一个得分,并自动根据得分进行排序。
-
用法
:使用
ZADD来添加元素及其得分,使用ZREVRANGE或ZREVRANGEBYSCORE获取得分最高的前 K 个元素。
-
关注列表
:
- 实现 :可以利用 Redis 的 Set 数据结构来存储用户的关注关系。
-
用法
:每个用户的关注列表可以用一个 Set 来表示,使用
SADD添加关注关系,SREM移除关注关系,SMEMBERS获取关注列表。
-
排行榜
:
- 实现 :同样可以使用 Sorted Set 实现排行榜功能,因其支持按得分排序的特性。
-
用法
:使用
ZADD将用户及其得分添加到排行榜,ZRANK获取用户排名,ZREVRANGE获取前 N 名用户。
-
会话存储
:
- 实现 :可以使用 Redis 的 String 数据结构来存储用户会话信息。
-
用法
:将会话 ID 作为键,相关信息作为值,使用
SET和GET存取会话信息;可以利用EXPIRE设置过期时间来实现自动过期。
-
分布式锁
:
-
实现
:可以使用 Redis 的
SETNX命令来实现简单的分布式锁。 -
用法
:使用
SETNX尝试获取锁,成功则设置一个过期时间以防死锁,使用DEL释放锁。
-
实现
:可以使用 Redis 的
-
计数器
:
- 实现 :利用 Redis 的 String 数据结构,可以很方便地实现计数功能。
-
用法
:使用
INCR或INCRBY增加计数,DECR或DECRBY减少计数。
-
消息队列
:
- 实现 :Redis 的 List 数据结构可用于实现简单的消息队列。
-
用法
:
LPUSH将消息放入队列,RPOP消费消息。
-
连续签到
:
- 实现 :Redis 的 string将key作为用户的id,value是当前连续签到的天数,设置过期时间为明天的0点