redis详细教程(4.GEO,bitfield,Stream)

GEO

Redis GEO 是 Redis 数据库中的一个功能模块,自 Redis 3.2 版本开始引入,专门用于处理地理位置信息。这个模块使得 Redis 能够存储并查询地理坐标,非常适合用于需要地理位置数据的应用,如实时位置查询、地理围栏、距离计算等。

Redis GEO 的数据结构是基于有序集合(Sorted Set)。每个地理位置信息由经度、纬度和一个唯一的标识符组成。

常用命令:

  1. GEOADD:向有序集合中添加地理位置坐标。
  2. GEOPOS:从有序集合中获取指定位置的坐标。
  3. GEODIST:计算两个位置之间的距离。
  4. GEORADIUS:根据给定的经纬度坐标,查询指定范围内的所有位置。
  1. longitude: 查询的中心点经度
  2. latitude:查询中心点纬度
  3. radius:查询半径
  4. WITHCOORD:返回结果包含经纬度
  5. WITHDISH:返回包含地理哈希值

1.设定值,查询值,查询指定范围内的位置:

2.计算两个位置之间的距离:

Redis GEO 的经纬度范围有一定的限制,经度范围是 -180 到 180 度,纬度范围是 -85.05112878 到 85.05112878 度,超出这个范围的位置信息将无法正确存储和查询。

bitfield

BITFIELD 是 Redis 中的一个命令,用于对字符串键进行位操作。BITFIELD 命令可以执行多个子命令来同时对字符串键的不同位域进行读取、设置和自增/自减操作。

基本语法:

BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]

GET type offset:从偏移量 offset 开始,获取长度为 type 的位域,并返回其十进制值。type 可以是 int 后跟位宽度(例如 int16),或者 u(无符号)后跟位宽度(例如 u8)。

SET type offset value:从偏移量 offset开始,设置长度为 type 的位域为 value。type和 value的定义与 GET子命令相同。

INCRBY type offset increment:从偏移量 offset 开始,将长度为 type 的位域增加 increment。如果结果超出了位域可以表示的范围,可以指定溢出行为(默认是 WRAP)。

OVERFLOW WRAP|SAT|FAIL:指定当 INCRBY 操作发生溢出时的行为。WRAP 表示回绕(默认行为),SAT 表示饱和(即达到最大值后不再增加),FAIL 表示操作失败并不改变值。

这个命令对偏移量100处的8位符号整数加一,也获取0处4位无符号整数值

BITFIELD允许对单个位进行操作,因此可以非常节省空间。

Stream

Redis 是 StreamRedis 5.0 版本引入的一种新的数据结构,用于存储一系列顺序不可变的记录。这些记录是由字段和值组成的映射,类似于 Redis 的 Hash 结构。Redis Stream 主要用于消息传递系统,它可以看作是一个持久化的消息队列,能够保证消息的有序性和可靠性。

一个消息由一个唯一的标识符(ID)和一个或多个字段-值对组成,流是消息的集合,每个流都有一个唯一的键名。

基本命令

  1. XADD:向流中添加消息。
  2. XREAD:从流中读取消息。
  3. XRANGE:获取流中一定范围内的消息。
  4. XREVRANGE:与 XRANGE 类似,但是返回的消息是倒序的。
  5. XDEL:从流中删除消息。
  6. XLEN:获取流中消息的数量。
  7. XGROUP CREATE:创建消费者组。
  8. XREADGROUP GROUP:从消费者组中读取消息。

1.让 Redis 自动生成一个唯一的消息 ID,name 和 age是字段名,ZhangSan 和 30 是对应的值。

2.从流中读取消息,获取流中一定范围内的消息。

10是设定读取数量,0是设定初始读取值

3.XRANGE:获取流中一定范围内的消息。

4.倒序**。**

5.删除消息,然后获取流中消息的数量。

6.创建消费者组,并从消费者组中读取消息

使用stream适合解决消息队列问题,其性能强大,兼容性强,功能多样

相关推荐
薛不痒2 分钟前
使用python操作MySQL
数据库·mysql
xiaoshujiaa5 分钟前
Java大厂面试实录:谢飞机硬刚互联网医疗微服务架构,Spring Cloud+Redis+Kafka全踩坑
spring boot·redis·微服务·kafka·flyway·java面试·互联网医疗
TG:@yunlaoda360 云老大8 分钟前
华为云国际站代理商VIAS主要有什么作用呢?
数据库·人工智能·华为云
云和数据.ChenGuang12 分钟前
openeuler下的git指令集合
linux·运维·数据库·centos
一 乐13 分钟前
养老院信息|基于springboot + vue养老院信息管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
cike_y16 分钟前
Mybatis之作用域(Scope)和生命周期-解决属性名和字段名不一致的问题&ResultMap结果集映射
java·开发语言·数据库·tomcat·mybatis
液态不合群20 分钟前
【面试题】MySQL 中的索引数量是否越多越好?为什么?
android·数据库·mysql
imbackneverdie23 分钟前
2025国自然资助率12.29%创新低!2026年如何用数据与AI“破局”?
数据库·人工智能·自然语言处理·aigc·ai写作·课题·国家自然科学基金
38242782727 分钟前
python:mysql数据库
数据库·python·mysql
小宇的天下27 分钟前
Calibre DESIGNrev DRC/LVS启动和准备文件(10-1)
服务器·数据库·oracle