Redis 三种特殊类型的使用命令

Geospatial(地理位置)

使用经纬度定位地理坐标并用一个有序集合zset保存,所以zset命令也可以使用

有效的经纬度

  • 有效的经度从-180度到180度。
  • 有效的纬度从-85.05112878度到85.05112878度。

指定单位的参数 unit 必须是以下单位的其中一个:

  • m 表示单位为米。
  • km 表示单位为千米。
  • mi 表示单位为英里。
  • ft 表示单位为英尺。
  1. geoadd key longitud(经度) latitude(纬度) member [..]: 将具体经纬度的坐标存入一个有序集合
127.0.0.1:6379> GEOADD map 116.724762 39.904897 beijing
(integer) 1
127.0.0.1:6379> GEOADD map 121.473720 31.230350 shanghai
(integer) 1
127.0.0.1:6379> GEOADD map 113.264360 23.129080 guangzhou 113.264360 23.129080 shenzhen 113.264360 23.129080 hangzhou
(integer) 3
  1. geopos key member [member..]: 获取集合中的一个/多个成员坐标
127.0.0.1:6379> GEOPOS map beijing shanghai
1) 1) "116.72476083040237427"
   2) "39.90489717295076133"
2) 1) "121.47371917963027954"
   2) "31.2303488312778228"
  1. geodist key member1 member2 [unit]: 返回两个给定位置之间的距离。默认以米作为单位。
127.0.0.1:6379> GEODIST map beijing shanghai km
"1055.7415"
127.0.0.1:6379> GEODIST map beijing shanghai m
"1055741.4993"
  1. georadius key longitude latitude radius m|km|mi|ft [WITHCOORD][WITHDIST] [WITHHASH] [COUNT count]: 以给定的经纬度为中心, 返回集合包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

通过georadius就可以完成 附近的人功能

  • withcoord:带上坐标
  • withdist:带上距离,单位与半径单位相同
  • COUNT n : 只显示前n个(按距离递增排序)
127.0.0.1:6379> GEORADIUS map 116.379988 39.921480 10000 km WITHCOORD WITHDIST count 2 desc
1) 1) "guangzhou"
   2) "1890.6163"
   3) 1) "113.26436251401901245"
      2) "23.12908090893373725"
2) 1) "hangzhou"
   2) "1890.6163"
   3) 1) "113.26436251401901245"
      2) "23.12908090893373725"
  1. GEORADIUSBYMEMBER key member radius...: 功能与GEORADIUS相同,只是中心位置不是具体的经纬度,而是使用结合中已有的成员作为中心点。
127.0.0.1:6379> GEORADIUSBYMEMBER map beijing 1500 km
1) "shanghai"
2) "beijing"
  1. geohash key member1 [member2..]: 返回一个或多个位置元素的Geohash表示。使用Geohash位置52点整数编码。
127.0.0.1:6379> GEOHASH map shanghai beijing # 获取成员经纬坐标的geohash表示
1) "wtw3sjq3yy0"
2) "wx5500kqu50"

Hyperloglog(基数统计)

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。

花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。

因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 > > HyperLogLog 不能像集合那样,返回输入的各个元素。

其底层使用string数据类型

什么是基数?

  • 数据集中不重复的元素的个数。

应用场景:

  • 网页的访问量(UV):一个用户多次访问,也只能算作一个人。

传统实现,存储用户的id,然后每次进行比较。当用户变多之后这种方式及其浪费空间,而我们的目的只是计数,Hyperloglog就能帮助我们利用最小的空间完成。

  1. PFADD key element1 [elememt2..]: 添加指定元素到 HyperLogLog 中
127.0.0.1:6379> PFADD myelemx a b c d e f g h i j k  # 添加元素
(integer) 1
127.0.0.1:6379> type myelemx  # hyperloglog底层使用String
string
  1. PFCOUNT key [key]: 返回给定 HyperLogLog 的基数估算值。
127.0.0.1:6379> PFCOUNT myelemx # 估算myelement的基数
(integer) 11
  1. PFMERGE destkey sourcekey [sourcekey..]: 将多个 HyperLogLog 合并为一个 HyperLogLog
127.0.0.1:6379> PFADD myelemy i j k z m c b v p q s
(integer) 1
127.0.0.1:6379> PFCOUNT myelemy
(integer) 11
127.0.0.1:6379> PFMERGE myelemz myelemx myelemy  # 合并myelemx和myelemy 成为myelemz
OK
127.0.0.1:6379> PFCOUNT myelemz # 估算基数
(integer) 17

如果允许容错,那么一定可以使用Hyperloglog !

如果不允许容错,就使用set或者自己的数据类型即可 !

BitMaps(位图)

使用位存储,信息状态只有 0 和 1

Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),在bitmap上可执行AND,OR,XOR,NOT以及其它位操作。

应用场景:

  • 签到统计、状态统计
  1. setbit key offset value: 为指定key的offset位设置值
127.0.0.1:6379> setbit sign 0 1 # 设置sign的第0位为 1 
(integer) 0
127.0.0.1:6379> setbit sign 2 1 # 设置sign的第2位为 1  不设置默认 是0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> type sign
string
  1. getbit key offset: 获取offset位的值
127.0.0.1:6379> getbit sign 2  # 获取第2位的数值
(integer) 1
127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 4  # 未设置默认是0
(integer) 0
  1. bitcount key [start end]: 统计字符串被设置为1的bit数,也可以指定统计范围按字节
127.0.0.1:6379> BITCOUNT sign # 统计sign中为1的位数
(integer) 4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值