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适合解决消息队列问题,其性能强大,兼容性强,功能多样

相关推荐
夜泉_ly2 小时前
MySQL -安装与初识
数据库·mysql
qq_529835353 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New5 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6755 小时前
数据库基础1
数据库
我爱松子鱼5 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo6 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser7 小时前
【SQL】多表查询案例
数据库·sql
Galeoto7 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
希忘auto7 小时前
详解Redis在Centos上的安装
redis·centos
人间打气筒(Ada)7 小时前
MySQL主从架构
服务器·数据库·mysql