Redis05_三种特殊数据类型


1. geospatial 地理位置

注:GEO的底层实现原理是Zset,可以使用Zset的命令操作GEO

应用场景:朋友的定位、附近的人、计算打车距离

geoadd 将指定的地理空间位置(经度、纬度、名称)添加到指定的key中

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 Chongqin
(integer) 1
127.0.0.1:6379> geoadd china:city 114.08 22.54 Shenzhen
(integer) 1
127.0.0.1:6379> geoadd china:city 120.15 30.28 Hangzhou
(integer) 1
127.0.0.1:6379> geoadd china:city 108.94 34.26 Xian
(integer) 1

geopos 获取指定位置的经度和纬度
geodist 获取两个位置的距离,默认单位为米,单位:m,km,mi(英里),ft(英尺)
georadius 以指定经纬度为中心,寻找指定半径内的位置,参数withcoord表示位置经纬度,参数withdist表示位置距离,参数count表示查询结果数量
georadiusbymember 以指定位置为中心,寻找指定半径内的位置
geohash 将指定位置二维的经纬度转为一维的字符串

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"

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> georadius china:city 110.00 30.00 500 km
1) "Chongqin"
2) "Xian"
127.0.0.1:6379> georadius china:city 110.00 30.00 500 km withcoord withdist count 1
1) 1) "Chongqin"
   2) "341.9374"
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"

127.0.0.1:6379> georadiusbymember china:city Shanghai 400 km
1) "Hangzhou"
2) "Shanghai"

127.0.0.1:6379> geohash china:city Beijing
1) "wx4fbxxfke0"

使用Zset命令操作GEO

127.0.0.1:6379> zrange china:city 0 -1
1) "Chongqin"
2) "Xian"
3) "Shenzhen"
4) "Hangzhou"
5) "Shanghai"
6) "Beijing"

127.0.0.1:6379> zrem china:city Beijing
(integer) 1

2. Hyperloglog 基数统计

什么是基数?

A {1,3,5,7,8,7}
B {1,3,5,7,8}
基数(不重复的元素1,3,5,7,8) = 5

Hyperloglog 是做基数统计的算法

应用场景:网站的UV(一个人多次访问一个网站,只算作1个人)
传统的方式,set (无序不重复集合) 保存用户的 id,统计 set 中的元素数量,保存了大量用户的id,比较占用空间
Hyperloglog 的优势:占用的内存固定且极小
注:Hyperloglog 存在约0.81%的错误率

pfadd 添加元素至指定的Hyperloglog数据结构中
pfcount 统计Hyperloglog中的基数估算值
pfmerge 合并Hyperloglog

127.0.0.1:6379> pfadd mykey a b c d e f g h i j
(integer) 1
127.0.0.1:6379> pfcount mykey
(integer) 10
127.0.0.1:6379> pfadd mykey2 i j z x c v b n m
(integer) 1
127.0.0.1:6379> pfcount mykey2
(integer) 9
127.0.0.1:6379> pfmerge mykey3 mykey mykey2
OK
127.0.0.1:6379> pfcount mykey3
(integer) 15

3. Bitmap 位图

应用场景:统计用户信息,登录状态,打卡记录

通过操作二进制位来记录,非0即1两个状态

示例,记录一周七天的打卡情况:1代表打卡,0代表未打卡

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

查看某一天是否打卡:

127.0.0.1:6379> getbit sign 4
(integer) 1

统计一周的打卡天数:

127.0.0.1:6379> bitcount sign
(integer) 3

猜你喜欢

转载自blog.csdn.net/BLU_111/article/details/108293010