三种特殊数据类型
geospatial(地理位置)
用于定位,附近的人,距离计算
添加元素
geoadd key 经度 纬度 描述名称
,可一次添加多个元素
127.0.0.1:6379> geoadd china:city 113.28 23.12 guangzhou
(integer) 1
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai 106.50 29.53 chongqi 114.05 22.52 sshengzhen
(integer) 3
获取元素
获取key中某个字段的经纬度,可一次获取多个字段的经纬度
127.0.0.1:6379> geopos china:city guangzhou chongqi
1) 1) "113.27999979257583618"
2) "23.1199990030198208"
2) 1) "106.49999767541885376"
2) "29.52999957900659211"
计算两点之间的距离
跟上km参数表示结果使用千米作为单位。参数m表示米
127.0.0.1:6379> geodist china:city guangzhou chongqi km
"981.9531"
实现看我附近的人功能
georadius
以给定的经纬度为中心,查找某一半径内的元素
#从china:city集合中查找 以经纬度为110 30为圆心,1000km内的所有的元素
127.0.0.1:6379> georadius china:city 110 30 1000 km
1) "chongqi"
2) "sshengzhen"
3) "guangzhou"
参数
- withdist,附近的人并且显示两点的直线距离
- withcoord,同时显示找到的元素的经纬度
指定geospatial类型元素进行查询
127.0.0.1:6379> georadiusbymember china:city guangzhou 1000 km
1) "sshengzhen"
2) "guangzhou"
3) "chongqi"
geohash
该命令会返回一个由经纬度编码的hash值
127.0.0.1:6379> geohash china:city guangzhou chongqi
1) "ws0e98zgz20"
2) "wm5xzrybty0"
geospatial底层实现其实就是zset
那么我们就可以使用zset 的命令来操作geospatial类型,比如删除元素,获取成员列表
127.0.0.1:6379> zrange china:city 0 -1
1) "chongqi"
2) "sshengzhen"
3) "guangzhou"
4) "shanghai"
127.0.0.1:6379> zrem china:city chongqi
(integer) 1
127.0.0.1:6379> zrange china:city 0 -1
1) "sshengzhen"
2) "guangzhou"
3) "shanghai"
Hyperloglog
一种数据结构,优点是节省内存空间,可以用来计数,例如统计网站的用户访问量(UV)。但是会出现一定的错误率,要在允许容错的情况下使用
127.0.0.1:6379> pfadd key1 a b c d e f g h i j #添加hyperloglog
(integer) 1
127.0.0.1:6379> pfcount key1 #统计key中的元素个数
(integer) 10
127.0.0.1:6379> pfadd key2 i j z x c v b n m
(integer) 1
127.0.0.1:6379> pfcount key2
(integer) 9
127.0.0.1:6379> pfmerge key3 key1 key2 #将多个key做并集操作,第一个参数就是输出的key
OK
127.0.0.1:6379> pfcount key3
(integer) 15
bitmaps
位图,通过操作二进制位来表示信息,一个位只有两个表示0、1,可以用来统计用户信息,例如用户登陆状态、活跃状态等
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 0
(integer) 0
127.0.0.1:6379> getbit sign 0 #获取位
(integer) 1
127.0.0.1:6379> getbit sign 2
(integer) 0
127.0.0.1:6379> bitcount sign #统计所有位为1的数量
(integer) 2