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
相关推荐
bug菌¹33 分钟前
滚雪球学Oracle[4.2讲]:PL/SQL基础语法
数据库·oracle
逸巽散人43 分钟前
SQL基础教程
数据库·sql·oracle
月空MoonSky1 小时前
Oracle中TRUNC()函数详解
数据库·sql·oracle
momo小菜pa1 小时前
【MySQL 06】表的增删查改
数据库·mysql
向上的车轮2 小时前
Django学习笔记二:数据库操作详解
数据库·django
编程老船长2 小时前
第26章 Java操作Mongodb实现数据持久化
数据库·后端·mongodb
全栈师3 小时前
SQL Server中关于个性化需求批量删除表的做法
数据库·oracle
Data 3173 小时前
Hive数仓操作(十七)
大数据·数据库·数据仓库·hive·hadoop
BergerLee4 小时前
对不经常变动的数据集合添加Redis缓存
数据库·redis·缓存
gorgor在码农4 小时前
Mysql 索引底层数据结构和算法
数据结构·数据库·mysql