linux下redis三种特殊数据类型

7 篇文章 0 订阅
6 篇文章 0 订阅


三种特殊数据类型

一、geospatial 地理位置处理

在这里插入图片描述

时间复杂度:每一个元素添加是O(log(N)) ,N是sorted set的元素数量。

将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。这些数据将会存储到sorted set这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作。
该命令以采用标准格式的参数x,y,所以经度必须在纬度之前。这些坐标的限制是可以被编入索引的,区域面积可以很接近极点但是不能索引。具体的限制,由EPSG:900913 / EPSG:3785 / OSGEO:41001 规定如下:
有效的经度从-180度到180度。
有效的纬度从-85.05112878度到85.05112878度。

当坐标位置超出上述指定范围时,该命令将会返回一个错误。

GEO 底层实现原理是Zset!我们可以直接使用Zset命令操作geo

127.0.0.1:6379> zrange china:city 0 -1
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
5) "shanghai"
6) "beijing"
127.0.0.1:6379> zrem china:city beijing
(integer) 1
127.0.0.1:6379> zrange china:city 0 -1
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
5) "shanghai"

1.geoadd

Redis GEOADD 命令 - 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中

[root@gesuo ~]# redis-cli -p 6379
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing
(integer) 1
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen
(integer) 2
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 2

2.geopos

Redis GEOPOS 命令 - 从key里返回所有给定位置元素的位置(经度和纬度)


127.0.0.1:6379> geopos china:city beijing
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
127.0.0.1:6379> geopos china:city beijing shanghai
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
2) 1) "121.47000163793563843"
   2) "31.22999903975783553"

3.geodist

Redis GEODIST 命令 - 返回两个给定位置之间的距离

在这里插入图片描述

127.0.0.1:6379> geodist china:city beijing shanghai
"1067378.7564"
127.0.0.1:6379> geodist china:city beijing shanghai km
"1067.3788"
127.0.0.1:6379> geodist china:city beijing xian km
"910.0565"

4.geodist

Redis GEORADIUS 命令 - 以给定的经纬度为中心, 找出某一半径内的元素 (获得附近的人的地址,定位!)

127.0.0.1:6379> georadius china:city 110 30 1000 km
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
127.0.0.1:6379> georadius china:city 110 30 500 km
1) "chongqing"
2) "xian"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist
1) 1) "chongqing"
   2) "341.9374"
2) 1) "xian"
   2) "483.8340"
127.0.0.1:6379> georadius china:city 110 30 500 km withcoord
1) 1) "chongqing"
   2) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xian"
   2) 1) "108.96000176668167114"
      2) "34.25999964418929977"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist withcoord count 1
1) 1) "chongqing"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist withcoord count 2
1) 1) "chongqing"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xian"
   2) "483.8340"
   3) 1) "108.96000176668167114"
      2) "34.25999964418929977"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist withcoord count 3
1) 1) "chongqing"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
2) 1) "xian"
   2) "483.8340"
   3) 1) "108.96000176668167114"
      2) "34.25999964418929977"

5.georadiusbymember

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

在这里插入图片描述

127.0.0.1:6379> georadiusbymember china:city beijing 1000 km
1) "beijing"
2) "xian"
127.0.0.1:6379> georadiusbymember china:city shanghai 400 km
1) "hangzhou"
2) "shanghai"

6.geohash

Redis GEOHASH 命令 - 返回一个或多个位置元素的 Geohash 表示

Geohash字符串属性:
该命令将返回11个字符的Geohash字符串,所以没有精度Geohash,损失相比,使用内部52位表示。返回的geohashes具有以下特性:
他们可以缩短从右边的字符。它将失去精度,但仍将指向同一地区。
它可以在 geohash.org 网站使用,网址 http://geohash.org/。查询例子:http://geohash.org/sqdtr74hyu0.
与类似的前缀字符串是附近,但相反的是不正确的,这是可能的,用不同的前缀字符串附近。

返回值:
一个数组, 数组的每个项都是一个 geohash 。 命令返回的 geohash 的位置与用户给定的位置元素的位置一一对应。

127.0.0.1:6379> geohash china:city beijing chongqing
1) "wx4fbxxfke0"
2) "wm5xzrybty0"

二、hyperloglog 基数统计

什么是基数? 不重复数的个数就叫基数
例如:例如: A{1 1 2 3 4 3 5} 那么A的基数就是 5

1.pfadd

Redis Pfadd 命令 - 添加指定元素到 HyperLogLog 中。

127.0.0.1:6379> pfadd mykey 1 2
(integer) 1
127.0.0.1:6379> pfadd mykey1 1 3
(integer) 1

2.pfcount

Redis Pfcount 命令 - 返回给定 HyperLogLog 的基数估算值。

127.0.0.1:6379> pfadd mykey 1 1 2 3 4 5 1 2
(integer) 1
127.0.0.1:6379> pfcount mykey
(integer) 5
127.0.0.1:6379>

2.pfmerge

Redis Pgmerge 命令 - 将多个 HyperLogLog 合并为一个 HyperLogLog

127.0.0.1:6379> pfadd mykey 1 2
(integer) 1
127.0.0.1:6379> pfadd mykey1 1 3
(integer) 1
127.0.0.1:6379> pfmerge my mykey mykey1
OK
127.0.0.1:6379> pfcount my
(integer) 3
127.0.0.1:6379>

三、Bitmaps 位存储

使用:记录用户状态信息,如是否登录,是否打卡等等…
两个状态的,都可以使用!
Bitmaps 位图,数据结构!都是操作二进制位来进行记录
只有0和1两个状态

例:
使用bitmaps来记录周一到周日的打卡

1.setbit 设置值

127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0

2.getbit 获取值

127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 5
(integer) 0

3.bitcount 统计值

127.0.0.1:6379> bitcount sign
(integer) 3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值