Version: Next
三种特殊数据类型
geospatial
hyperloglog
bitmaps
geospatial
地理位置:
定位、附近的人、城市距离、城市经度纬度
http://www.jsons.cn/lngcode,可以查看一些地理数据
geoadd 键 经度 纬度 成员名
添加地理位置
geoadd china:city 116.40 39.90 beijing
geoadd china:city 121.47 31.23 shanghai
geoadd china:city 106.50 29.53 chongqing
geoadd china:city 114.05 22.54 shenzhen
geoadd china:city 108.96 34.26 xian
geopos 键 成员
geopos china:city xian
获取西安市的地理信息
geodist 键 成员1 成员2
返回成员1到成员2之间的地理距离
geodist china:city shanghai hangzhou
返回上海到杭州的距离geodist china:city shanghai hangzhou km
以千米为单位返回距离
georadius 键 经度 纬度 半径 单位
返回指定地理点指定半径内的其他成员
127.0.0.1:6379> georadius china:city 110 30 500 km1) "chongqing"2) "xian"带上这些点的坐标一起显示
127.0.0.1:6379> georadius china:city 110 30 500 km withcoord1) 1) "chongqing"2) 1) "106.49999767541885376"2) "29.52999957900659211"2) 1) "xian"2) 1) "108.96000176668167114"2) "34.25999964418929977"
georadius china:city 110 30 500 km count n
显示范围内的n个点
GEORADIUSBYMEMBER 键 成员 半径 单位
显示指定成员指定范围内的其他成员
GEORADIUSBYMEMBER china:city shanghai 1200 km
gepspatial的底层使用zset实现的,有序集合。我们可以使用zset命令操作geospatial
zrange
127.0.0.1:6379> zrange china:city 0 -11) "chongqing"2) "xian"3) "shenzhen"4) "hangzhou"5) "shanghai"6) "beijing"
zrem
移除成员
zrem china:city shanghai
hyperloglog
什么是基数
- 一个集合内不重复的元素
Redis Hyperloglog是基数统计的算法
网站的Unique Visitor(UV),一个人访问一个网站多次,还是算作一个人
- 传统方式,用set集合保存用户id,由于set不允许重复成员,就可以实现UV 这种方式如果存在大量的用户id,很占用空间,我们的目的是为了计数,不是为了保存大量用户id
- hyperloglog:占用内存固定,2^64 个不同元素的基数,只需要消耗12KB内存
pfadd 键 元素1 元素2 元素3....
pfadd key1 a b c d e f g h i j
pfadd key2 x y z a b
pfcount 键
返回指定hyperloglog的成员个数(不重复,基数)
127.0.0.1:6379> pfcount key1(integer) 10
pfmerge 目标集合 源集合
将目标集合和源集合合并进目标集合127.0.0.1:6379> pfmerge key1 key2OK127.0.0.1:6379> pfcount key1(integer) 13127.0.0.1:6379> pfcount key2(integer) 5
bitmaps
位存储
setbit 集合名 偏移 值
getbit 集合名 偏移量
bitcount 集合名
返回指定集合中1
的总个数
bitcount 集合名 起始下标 结束小标
返回指定集合指定区间内1
的总个数