目录
1、redis地理空间(GEO)
Redis 的地理空间数据结构(GEO)可以用于存储地理位置信息,并支持附近位置搜索等功能。
命令 | 描述 |
---|---|
GEOHASH | 返回一个或多个位置元素的 Geohash 表示 |
GEOPOS | 从key里返回所有给定位置元素的位置(经度和纬度) |
GEODIST | 返回两个给定位置之间的距离 |
GEORADIUS | 以给定的经纬度为中心, 找出某一半径内的元素 |
GEOADD | 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中 |
GEORADIUSBYMEMBER | 找出位于指定范围内的元素,中心点是由给定的位置元素决定 |
应用场景
-
附近的人/店铺搜索:可以使用 GEO 数据结构来存储用户或商店的地理位置信息,然后通过 Redis 提供的命令进行附近的人或店铺搜索,例如查找附近的餐馆、商店或其他服务设施。
-
地理围栏监控:通过 GEO 数据结构记录移动物体的实时位置,并结合有序集合(Sorted Set)来实现地理围栏监控,比如在特定区域内的移动车辆或设备监控。
-
地理位置标注:将地理位置信息与其他业务数据关联,比如将特定位置的销售点、活动场所等信息与地理位置进行标注,以支持位置相关的业务查询和展示。
2、redis基数统计(HyperLogLog)
Redis 的基数统计(HyperLogLog)数据结构用于估算一个集合中不重复元素的个数,能够在占用较小内存的同时对大数量级的数据进行近似计数。
PFADD | 添加元素到 HyperLogLog 中 | 示例: 说明:向名为 |
PFCOUNT | 获取 HyperLogLog 中的近似基数 | 示例: 说明:返回值为近似的基数,即 HyperLogLog 中不重复元素的数 |
PFMERGE | 合并多个 HyperLogLog | 示例: 说明:将多个 HyperLogLog 合并为一个新的 HyperLogLo |
应用场景
-
独立访客统计:可以使用 HyperLogLog 数据结构来进行网站或应用的独立访客数量统计,而不需要存储每个访客的详细信息,节省内存空间。
-
活跃用户统计:对于大型在线平台,可以使用 HyperLogLog 计数活跃用户数量,而无需维护每个用户的详细浏览记录。
-
广告点击量统计:在广告分析领域,HyperLogLog 可以用于估算独立用户的广告点击数量,而不必存储每次点击的详细信息。
3、redis位图(bitmap)
Redis中的位图(bitmap)是一种特殊的数据结构,它通常用于表示某种状态或者标记,每个比特位可以表示一个状态或者标记的存在与否。
setbit | 设置位图中的某一位 | 示例: 说明:将user 1的在线状态设置为1(在线),偏移量为1001 |
getbit | 获取位图中的某一位的值 | 示例: 说明:返回值为0或1,表示偏移量为1001的位的 |
strlen | 统计字节数占用多少 | 示例:user:1:online |
bitcount | 统计位图中值为1的位数 | 示例: 说明:可选参数 |
bitop | 对多个位图进行逻辑运算 | 示例: 说明:将user 1和user 2的在线状态做与操作,存储到 |
应用场景
- 用户在线状态:可以使用位图来表示用户的在线状态,每个比特位代表一个用户,值为1表示在线,值为0表示离线。
- 统计用户活跃度:使用位图记录用户每天的活跃情况,以便后续进行活跃度分析和统计。
- 标记用户行为:可以用位图来标记用户的某些行为,比如签到、阅读等,每个比特位代表一个行为,值为1表示有该行为,值为0表示没有。
4、redis位域bitfield)
Redis 的位域(Bitfield)数据结构提供了位级别的操作,可以方便地对二进制位进行读取和修改,适用于一些需要对大量位操作的场景。
BITFIELD | 设置位域中的指定位 | 示例: 说明:在名为 |
GETBIT | 获取位域中的指定位 | 示例: 返回值为指定偏移处的位的值。 |
BITOP | 对位域进行位运算 | 示例: 说明:将多个位域进行指定的位运算(AND/OR/XOR/NOT)后存储到目标位域。 |
应用场景
-
权限管理:位域可以用于表示用户或角色的权限,每一位代表一种权限状态,通过位运算可以方便地进行权限的赋予与撤销。
-
实时状态标记:对于实时状态的标记,比如设备状态、用户在线状态等,位域可以高效地存储并更新这些状态信息。
-
布隆过滤器:布隆过滤器是一种空间效率很高的概率型数据结构,常用于快速判断一个元素是否存在。在 Redis 中,可以利用位域来实现布隆过滤器。
5、redis流(Stream)
Redis 的流(Stream)数据结构是一个有序、可持久化的消息队列,可以用于实现消息发布订阅系统、事件日志、通知系统等功能。
XADD | 添加消息到队列末尾 | 示例: 说明:向名为 |
XTRIM | 用于对stream的长度进行截取,如超长会进行截取 | 示例:用于对stream的长度进行截取,如超长会进行截取 |
XDEL | 删除消息 | 示例:XDEL mystream 1669453973537-0 |
XLEN | 获取Stream中的消息长度 | 示例:XLEN mystream |
XRANGE | 获取消息列表,忽略删除的消息 | 示例:XRANGE mystream - + |
XREVRANGE | 获取消息列表,ID从大到小 | 示例:XREVRANGE mystream + 1 |
XREAD | 获取消息(阻塞,非阻塞),返回大于指定ID的消息 | 示例:XREAD BLOCK 10000 STREAMS mystream 0 |
XACK | 消费者确认消息 | 示例: 说明:消费者组 |
XGROUP CREAT | 创建消费者组 | 示例: 说明:创建名为 |
XREADGROUP GROUP | 用于以群组方式读取流中的数据。它允许多个消费者组在流中协同工作,每个组内有多个消费者。 | 示例:XREADGROUP GROUP mygroup myconsumer BLOCK 10000 STREAMS mystream > 说明:命令将阻塞最多10,000毫秒(10秒),等待在名为"mystream"的流中出现新消息,并将其传递给"mygroup"消费者组中的"myconsumer"消费者 |
XGPENDING | 查询每个消费组内所有消费者「已读取、但尚未确认」的消息 查看某个消费者具体读取了哪些数据团 | 示例:XPENDING mystream groupc |
XACK | 用于将一个或多个消息标记为已处理(已确认) | 示例:XACK mystream mygroup 1604953644406-0 1604953652219-0 说明: |
应用场景
-
消息队列:流可以作为高性能的消息队列使用,允许按照发布的顺序进行消费,支持多个消费者并行处理消息。这种模式非常适合需要处理大量实时消息的业务场景。
-
事件日志:流可以用于记录系统的事件日志,包括用户操作、系统状态变化等,以便后续进行分析和故障排查。
-
通知系统:流可以用于构建实时的通知系统,例如实时推送用户的消息、提醒和通知。