当前位置: 首页 > news >正文

Redis 特殊数据类型

目录

1、redis地理空间(GEO)

2、redis基数统计(HyperLogLog)

3、redis位图(bitmap)

4、redis位域bitfield)

5、redis流(Stream)


1、redis地理空间(GEO)

Redis 的地理空间数据结构(GEO)可以用于存储地理位置信息,并支持附近位置搜索等功能。

命令描述
GEOHASH返回一个或多个位置元素的 Geohash 表示
GEOPOS从key里返回所有给定位置元素的位置(经度和纬度)
GEODIST返回两个给定位置之间的距离
GEORADIUS以给定的经纬度为中心, 找出某一半径内的元素
GEOADD将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
GEORADIUSBYMEMBER找出位于指定范围内的元素,中心点是由给定的位置元素决定

 应用场景

  1. 附近的人/店铺搜索:可以使用 GEO 数据结构来存储用户或商店的地理位置信息,然后通过 Redis 提供的命令进行附近的人或店铺搜索,例如查找附近的餐馆、商店或其他服务设施。

  2. 地理围栏监控:通过 GEO 数据结构记录移动物体的实时位置,并结合有序集合(Sorted Set)来实现地理围栏监控,比如在特定区域内的移动车辆或设备监控。

  3. 地理位置标注:将地理位置信息与其他业务数据关联,比如将特定位置的销售点、活动场所等信息与地理位置进行标注,以支持位置相关的业务查询和展示。

2、redis基数统计(HyperLogLog)

Redis 的基数统计(HyperLogLog)数据结构用于估算一个集合中不重复元素的个数,能够在占用较小内存的同时对大数量级的数据进行近似计数。

PFADD 添加元素到 HyperLogLog 中

 示例:PFADD my_hyperloglog user1 user2 user3

 说明:向名为 my_hyperloglog 的 HyperLogLog 结构中添加了三个元

PFCOUNT 获取 HyperLogLog 中的近似基数

 示例:PFCOUNT my_hyperloglog

 说明:返回值为近似的基数,即 HyperLogLog 中不重复元素的数

PFMERGE合并多个 HyperLogLog

 示例:PFMERGE merged_hyperloglog my_hyperloglog1 my_hyperloglog2

 说明:将多个 HyperLogLog 合并为一个新的 HyperLogLo

应用场景

  1. 独立访客统计:可以使用 HyperLogLog 数据结构来进行网站或应用的独立访客数量统计,而不需要存储每个访客的详细信息,节省内存空间。

  2. 活跃用户统计:对于大型在线平台,可以使用 HyperLogLog 计数活跃用户数量,而无需维护每个用户的详细浏览记录。

  3. 广告点击量统计:在广告分析领域,HyperLogLog 可以用于估算独立用户的广告点击数量,而不必存储每次点击的详细信息。

3、redis位图(bitmap)

Redis中的位图(bitmap)是一种特殊的数据结构,它通常用于表示某种状态或者标记,每个比特位可以表示一个状态或者标记的存在与否。

setbit设置位图中的某一位

 示例:SETBIT user:1:online 1001 1

说明:将user 1的在线状态设置为1(在线),偏移量为1001

getbit获取位图中的某一位的值

​​​​​

 示例:GETBIT user:1:online 1001

 说明:返回值为0或1,表示偏移量为1001的位的

strlen统计字节数占用多少示例:user:1:online
bitcount统计位图中值为1的位数

 示例:BITCOUNT user:1:online

 说明:可选参数startend用于指定范围,不指定则统计整个位图中值为1的位

bitop对多个位图进行逻辑运算

 示例:BITOP AND online_users user:1:online user:2:online

 说明:将user 1和user 2的在线状态做与操作,存储到online_users位图

应用场景

  1. 用户在线状态:可以使用位图来表示用户的在线状态,每个比特位代表一个用户,值为1表示在线,值为0表示离线。
  2. 统计用户活跃度:使用位图记录用户每天的活跃情况,以便后续进行活跃度分析和统计。
  3. 标记用户行为:可以用位图来标记用户的某些行为,比如签到、阅读等,每个比特位代表一个行为,值为1表示有该行为,值为0表示没有。

4、redis位域bitfield)

Redis 的位域(Bitfield)数据结构提供了位级别的操作,可以方便地对二进制位进行读取和修改,适用于一些需要对大量位操作的场景。

BITFIELD设置位域中的指定位

示例:BITFIELD mykey SET u8 0 1 GET u4 5

说明:在名为 mykey 的位域中,将第 0 位设置为 1,并获取第 5 位到第 8 位的值

GETBIT获取位域中的指定位

示例:GETBIT mykey 0

返回值为指定偏移处的位的值。

BITOP对位域进行位运算

示例:BITOP AND destkey key1 key2

说明:将多个位域进行指定的位运算(AND/OR/XOR/NOT)后存储到目标位域。

应用场景

  1. 权限管理:位域可以用于表示用户或角色的权限,每一位代表一种权限状态,通过位运算可以方便地进行权限的赋予与撤销。

  2. 实时状态标记:对于实时状态的标记,比如设备状态、用户在线状态等,位域可以高效地存储并更新这些状态信息。

  3. 布隆过滤器:布隆过滤器是一种空间效率很高的概率型数据结构,常用于快速判断一个元素是否存在。在 Redis 中,可以利用位域来实现布隆过滤器。

5、redis流(Stream)

Redis 的流(Stream)数据结构是一个有序、可持久化的消息队列,可以用于实现消息发布订阅系统、事件日志、通知系统等功能。

XADD发布消息到流

示例:XADD mystream * name John age 30

说明:向名为 mystream 的流中添加一条消息,使用 * 作为自动生成的消息ID。

XREAD消费者消费消息

示例:XREAD BLOCK 10000 STREAMS mystream 0

说明:从名为 mystream 的流中读取消息,并阻塞 10 秒等待新消息。

XACK消费者确认消息

示例:XACK mystream mygroup 1606388386385-0 1606388386386-0

说明:消费者组 mygroup 确认处理了特定的消息ID。

XGROUP创建消费者组

示例:XGROUP CREATE mystream mygroup $ MKSTREAM

说明:创建名为 mygroup 的消费者组,并使用 $ 表示从最新的消息开始消费。

应用场景

  1. 消息队列:流可以作为高性能的消息队列使用,允许按照发布的顺序进行消费,支持多个消费者并行处理消息。这种模式非常适合需要处理大量实时消息的业务场景。

  2. 事件日志:流可以用于记录系统的事件日志,包括用户操作、系统状态变化等,以便后续进行分析和故障排查。

  3. 通知系统:流可以用于构建实时的通知系统,例如实时推送用户的消息、提醒和通知。

http://www.lryc.cn/news/227545.html

相关文章:

  • 【Windows网络编程】二.TCP套接字编程与主机上线实验
  • Qt 事件循环
  • 【趣味随笔】YOLO的“进化史”极简版(YOLO v1-->YOLOP)
  • Leetcode421. 数组中两个数的最大异或值
  • SPRINGBOOT整合CXF发布WEB SERVICE和客户端调用(用户和密码验证)
  • 代码随想录训练营Day5:哈希数组
  • 腾讯云3年轻量2核2G4M和2核4G5M服务器540元三年
  • 程序员的护城河:职业发展的关键元素
  • 基于SpringBoot+Vue的在线学习平台系统
  • Kafka+redis分布式锁结合使用心得总结
  • cmd打开idea
  • javaScript爬虫程序抓取评论
  • RT-DETR 应用 CARAFE:特征内容感知重新组装
  • Git Commit 之道:规范化 Commit Message 写作指南
  • 【机试题】LazyIterator迭代器懒加载问题
  • 【面试经典150 | 位运算】位1的个数
  • vue中数据代理和事件处理
  • Unity之NetCode多人网络游戏联机对战教程(8)--玩家位置同步
  • spring boot 中@Value读取中文配置时乱码
  • 选择.NET 还是 Java?
  • vue 高阶组件;高阶组件
  • 数据结构:树的基本概念(二叉树,定义性质,存储结构)
  • 【Qt之QStandardItemModel类】介绍
  • 01-Spring中的工厂模式
  • Linux是什么,Linux系统介绍
  • 爬虫项目(11):使用多线程对36手机高清壁纸批量抓取
  • JavaScript_动态表格_删除功能
  • 一步一步开发微信小程序(Django+Mysql)
  • mysql 讲解(1)
  • k8s关于metadata、spec.containers、spec.volumes的属性介绍(yaml格式)