Redis-三大特殊类型

208 阅读3分钟

1. Geo 地理位置

底层是zset实现,可通过zset来操作geo

1.1 geoadd 添加

GEOADD key longitude latitude member [longitude latitude member ...] 添加 地理位置member(经度longitude纬度 latitude)到key中

  • 有效的经度从-180度到180度。
  • 有效的纬度从-85.05112878度到85.05112878度。
  • 当坐标位置超出上述指定范围时,该命令将会返回一个错误。

1.2 GEOPOS key member [member ...] 获取指定member的经纬度

1.3 GEODIST key member1 member2 [unit] 两个member之间的距离

如果两个位置之间的其中一个不存在, 那么命令返回空值。

指定单位的参数 unit 必须是以下单位的其中一个:

m 表示单位为米。 km 表示单位为千米。 mi 表示单位为英里。 ft 表示单位为英尺。 如果用户没有显式地指定单位参数, 那么 GEODIST** 默认使用米作为单位。**

GEODIST 命令在计算距离时会假设地球为完美的球形, 在极限情况下, 这一假设最大会造成 0.5% 的误差。

1.4 GEORADIUS key longitude latitude radius 指定经纬度半径内的元素

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

  • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
  • WITHCOORD: 将位置元素的经度和维度也一并返回。
  • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
  • ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。
  • DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。
  • 使用 COUNT 选项去获取前 N 个匹配元素,命令的执行速度也可能会非常慢

1.5GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

与GEORADIUS相似,但是是以元素半径来查找

2.hyperloglog

用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存

2.1 添加 PFADD key element [element ...]

2.2 统计 PFCOUNT key [key ...]

2.3 合并 PFMERGE destkey sourcekey [sourcekey ...]

3.bitmaps

Bitmaps本身不是一种数据结构,实际上就是字符串,但是它可以对字符串的位进行操作。

可以把Bitmaps想象成一个以位为单位数组,数组中的每个单元只能存0或者1,数组的下标在bitmaps中叫做偏移量。单个bitmaps的最大长度是512MB,即2^32个比特位。

3.1 添加 SETBIT key offset value

setbit unique:users:2017-07-11 0 1

在2017-07-11 这一天0号用户访问了(1代表访问,0代表没有)

3.2 获取 GETBIT key offset

getbit user 0 获取0号用户的

3.3 统计 BITCOUNT key [start end]

bitcount peter 统计Peter的访问次数