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的访问次数