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 km
    1) "chongqing"
    2) "xian"
  • 带上这些点的坐标一起显示

    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"
  • 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 -1
    1) "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 key2
OK
127.0.0.1:6379> pfcount key1
(integer) 13
127.0.0.1:6379> pfcount key2
(integer) 5

bitmaps

位存储

setbit 集合名 偏移 值

getbit 集合名 偏移量

bitcount 集合名 返回指定集合中1的总个数

  • bitcount 集合名 起始下标 结束小标 返回指定集合指定区间内1的总个数