Redis三种特殊数据类型

三种特殊数据类型

geospatial 地理位置

Redis的Geo的Redis的3.2版本 ,可以推算地理位置信息,两地之间的距离,方圆几里的人

  • 需要查询经纬度

官网的几个命令

添加位置 : geoadd

bash 复制代码
127.0.0.1:6379> geoadd china:city 115.892151 28.676493 nanchang
(integer) 1
127.0.0.1:6379> geoadd china:city 120.153576 30.287459 hangzhou
(integer) 1
127.0.0.1:6379> geoadd china:city 113.280637 23.125178 guangzhou
(integer) 1
127.0.0.1:6379> geoadd china:city 117.190182 39.125596 tianjin
(integer) 1

获得当前位置 ---- geopos

bash 复制代码
127.0.0.1:6379> geopos china:city nanchang guangzhou
1) 1) "115.89214950799942017"
   2) "28.67649306190701708"
2) 1) "113.28063815832138062"
   2) "23.12517743834835215"

获取两个之间的直线距离------ geodist

  • m 表示单位为米。
  • km 表示单位为千米。
  • mi 表示单位为英里。
  • ft 表示单位为英尺。

如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。

bash 复制代码
127.0.0.1:6379> geodist china:city nanchang hangzhou
"449788.1376"
127.0.0.1:6379> geodist china:city nanchang hangzhou km
"449.7881"

以给定的经纬度为中心, 找出某一半径内的元素 --- georadius

bash 复制代码
127.0.0.1:6379> georadius china:city 110 30 1000 km
1) "guangzhou"
2) "nanchang"
3) "hangzhou"
                            key      经度 纬度 半径范围  经纬度  直线距离   从全部中返回三个
127.0.0.1:6379> georadius china:city 110 30 1000 km withcoord withdist count 3
1) 1) "nanchang"
   2) "589.8852"
   3) 1) "115.89214950799942017"
      2) "28.67649306190701708"
2) 1) "guangzhou"
   2) "831.2636"
   3) 1) "113.28063815832138062"
      2) "23.12517743834835215"
3) 1) "hangzhou"
   2) "976.8197"
   3) 1) "120.15357345342636108"
      2) "30.28745790721532671"
  • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
  • WITHCOORD: 将位置元素的经度和维度也一并返回。
  • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。

命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:

  • ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。
  • DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。

在默认情况下, GEORADIUS 命令会返回所有匹配的位置元素。 虽然用户可以使用 COUNT <count> 选项去获取前 N 个匹配元素, 但是因为命令在内部可能会需要对所有被匹配的元素进行处理, 所以在对一个非常大的区域进行搜索时, 即使只使用 COUNT 选项去获取少量元素, 命令的执行速度也可能会非常慢。 但是从另一方面来说, 使用 COUNT 选项去减少需要返回的元素数量, 对于减少带宽来说仍然是非常有用的。

georadiusbymember

找出位于指定范围内的元素,中心点是由给定的位置元素决定

bash 复制代码
127.0.0.1:6379> georadiusbymember china:city guangzhou 1000 km
1) "guangzhou"
2) "nanchang"

是基于zset 的,我们可以通过zset来操纵数据,比如说 查看所有的,删除

HyperLogLog

  • 基数统计
  • 基数就是不重复的集合

应用场景:

传统方式:

  • 用Set存储, set是不重复的,所以可以统计Set元素

    当数量很多时,就会占有内存,比较麻烦

Redis HyperLogLog

  • 在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

  • 每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数

  • 占用内存小

bash 复制代码
# 添加元素
127.0.0.1:6379> pfadd key1 name
(integer) 1
127.0.0.1:6379> pfadd key1 age
(integer) 1
127.0.0.1:6379> pfadd key1 sex
(integer) 1
# 计算数量
127.0.0.1:6379> pfcount key1
(integer) 3
127.0.0.1:6379> pfadd key2 1
(integer) 1
127.0.0.1:6379> pfadd key2 2
(integer) 1
127.0.0.1:6379> pfadd key2 3
(integer) 1
127.0.0.1:6379> pfcount key2
(integer) 3
# 将key 2 合并到key1中 ,保留key2
127.0.0.1:6379> pfmerge key1 key2
OK
127.0.0.1:6379> pfcount key1
(integer) 6
127.0.0.1:6379> pfcount key2
(integer) 3

允许一次性创建一个key与多个值

pfmerge也是一样的

Bitmap

位存储

应用: 两个状态的 ,,,,都可以用0 , 1表示

统计用户信息,,活跃,不活跃、登陆与未登录 ,打卡,

bash 复制代码
# 设置 周一到周末   打卡  ,0 与 1
#set bit key offset value 
127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 1
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 0
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0
127.0.0.1:6379> getbit sign 1
(integer) 1
127.0.0.1:6379> getbit sign 2
(integer) 0
bash 复制代码
#获取全部的值
127.0.0.1:6379> bitcount sign
(integer) 4
相关推荐
好奇的菜鸟3 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
tan180°3 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
满昕欢喜3 小时前
SQL Server从入门到项目实践(超值版)读书笔记 20
数据库·sql·sqlserver
Hello.Reader4 小时前
Redis 延迟排查与优化全攻略
数据库·redis·缓存
简佐义的博客5 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
爬山算法5 小时前
MySQL(116)如何监控负载均衡状态?
数据库·mysql·负载均衡
老纪的技术唠嗑局8 小时前
OceanBase PoC 经验总结(二)—— AP 业务
数据库
阿里云大数据AI技术8 小时前
OpenSearch 视频 RAG 实践
数据库·人工智能·llm
m0_6239556611 小时前
Oracle使用SQL一次性向表中插入多行数据
数据库·sql·oracle
阿蒙Amon11 小时前
C#读写文件:多种方式详解
开发语言·数据库·c#