今天我们来聊聊 redis 的使用案例。
redis 是一种内存键值数据库。它支持多种数据结构,如 string, hash, list, set 和 sortedset。
01 缓存
redis 的最常用的用例是缓存,以加快网络应用的速度。在这种用例中,redis 将经常请求的数据存储在内存中。它允许网络服务器频繁访问的数据。这就减少了数据库的负载,并缩短应用程序的响应时间。在大规模应用中,缓存分布在 redis 服务器集群中。
redis 作为分布式缓存时需要考虑的其他问题包括:
设置正确的 ttl (time to live)
处理冷启动时对数据库的密集访问
02 session 存储
另一个常见用例是将 redis 用作 session 存储,在无状态服务之间共享 session 数据。
当用户登录网络应用程序时,服务端会创建一个唯一的 session id,session 数据会存储在 redis 中,然后 session 作为 cookie 的一部分返回给客户端。
当用户向应用程序发出请求时,session id 会包含在请求中。无状态网络服务器会使用 session 数据。值得注意的是 redis 是内存数据库。如果 redis 服务器重启,存储在 redis 中的 session 数据会丢失。
即使 redis 提供了 rdb 和 aof 等持久化选项,但这些选项在重启时加载数据的时间往往太长,不实用。在实际生产环境中,数据会复制到备份实例。如果主实例崩溃,备份迅速升级,接管流量。
03 分布式锁
需要协调对某些共享资源的访问时,就会使用分布式锁。redis 通过其原子命令(如 setnx, set if not exists)来做分布式锁。它允许调用者设置一个不存在的键。
比如,客户端通过设置一个唯一的 key 来获取锁:
setnx lock 1234abcd ex 3
如果 key 尚未设置,setnx 命令返回 1,表明锁已被客户端获取。客户端完成工作后 删除 key ,释放锁。
如果 key 已被设置,setnx 命令返回 0,表明锁已被其他客户机持有。在这种情况下,客户端会等待并重试 setnx 操作,直到锁被其他客户端释放。
请注意,这种简单的实现对于许多用例来说已经足够好了,但并非完全容错。对于生产应用,许多 redis 客户端库提供高质量的分布式锁实现。
04 限流
redis 可用作限流。一个非常基本的限流算法是这样工作的:
对于每个用户请求,其请求的 ip 或用户 id 用作 key。每个请求都会使键值递增。将当前计数与允许的速率限制进行比较,如果计数在速率限制范围内,则处理请求。如果计数超过速率限制,则拒绝请求。key可以设置为在特定时间窗口(如一分钟)后过期,以重置下一个时间窗口的计数。
05 游戏排行榜
对于大多数规模不是很大的游戏来说,redis 是一种很好的实现方式。sortedset 是实现这一功能的基本数据结构。
sortedset 的每个元素都有一个与之相关的分数。元素按分数排序。这样就可以在对数时间内 完成排序。
06 购物车
我们可以使用 hash 来表示购物车中的键值对。对于简单的电商平台来说,在 redis 中实现购物车可以兼顾用户体验和快速交付。
07 计算用户留存率
我们可以使用 bitmap 来表示每天登录的用户并计算用户保留率。这种计数功能占用的内存很少。
08 消息队列
我们可以使用 list 来做消息队列。也可以使用 redis 的 pubsub 功能来实现类似的消息总线功能。
新款马路机器人现身,未来将会有更多种类的机器人
印度智能手机市场竞争激烈,联想要在印度市场复兴不容易
vlookup怎么用详细步骤
厉害了wuli石墨烯!石墨烯超级电容公交车充电30秒行5公里!
物联网系统如何运作看了就知道
聊聊Redis的使用案例
噪声扬尘在线监测系统安装的好处
USB TYPE-C领夹式麦克风5V充电方案
哈佛大学团队创造一种新的微型运动中心遥控机械手——“mini-RCM”
MLCC电容为什么会啸叫?电容啸叫解决方案一招解决啸叫
华为何刚:预计nova下月累计出货超一亿台
中国无人机助国际快运公司实现全自动递送 可减少80%成本
仙童半导体公司的故事
杉杉股份如何掀起电解液“翻身仗”?
英途信息智慧教室教学应用案例分享
主板电容器的作用与签别
Vishay 推出新款Power Metal Strip®电阻
图文详解Powermat无线充电系统
世界顶级零部件+工业4.0工厂!爱驰U6构建全新安全性能
一加7Pro获得HDR10+权威认证 相较HDR10有哪些不同