Geo 类型
Redis3.2.0 版本推出
可以将用户给定的地理位置信息存储起来, 并对这些信息进行操作
- GEOADD key longitude latitude member [longitude latitude member ...]
- // 在使用排序集表示的地理空间索引中添加一个或多个地理空间项, 时间复杂度 O(log(N))
- 127.0.0.1:6379> geoadd key1 121.3996887207031 31.04559326171875 member1 116.3883056640625 39.92889404296875 member2
- (integer) 2
- GEODIST key member1 member2 [unit]
- // 返回地理空间索引的两个成员之间的距离, 时间复杂度 O(log(N))
- 127.0.0.1:6379> geodist key1 member1 member2
- "1086809.8477"// 默认单位为 m
- 127.0.0.1:6379> geodist key1 member1 member2 m
- "1086809.8477"
- 127.0.0.1:6379> geodist key1 member1 member2 km
- "1086.8098"
- 127.0.0.1:6379> geodist key1 member1 member2 ft
- "3565649.1067"// 英尺
- 127.0.0.1:6379> geodist key1 member1 member2 mi
- "675.3140"// 英里
- GEOHASH key member [member ...]
- // 将地理空间索引的成员作为标准的 geohash 字符串返回, 时间复杂度 O(log(N))
- 127.0.0.1:6379> geohash key1 member1 member2
- 1) "wtw2de8t9v0"
- 2) "wx4g0kz6sj0"
- GEOPOS key member [member ...]
- // 返回地理空间索引成员的经度和纬度, 时间复杂度 O(log(N))
- 127.0.0.1:6379> geopos key1 member1 member2
- 1) 1) "121.39969021081924438"
- 2) "31.0455930059736076"
- 2) 1) "116.38830453157424927"
- 2) "39.92889337816622941"
- GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
- // 官方解释: 查询表示地理空间索引的已排序集, 以获取与给定的最大距离相匹配的成员
- // 以给定的经纬度为中心, 返回给定 key 包含的位置元素当中, 与给定的中心不超过给定最大距离的所有位置元素, 时间复杂度为 O(N+log(M)),N 为指定半径范围内的元素个数, M 为要返回的个数
- //WITHDIST: 在返回位置元素的同时将位置元素与中心之间的距离也一并返回, 距离的单位和用户给定的范围单位保持一致
- //WITHCOORD: 将位置元素的经度和维度也一并返回
- //WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值, 这个选项主要用于底层应用或者调试, 实际中的作用并不大
- // 命令默认返回未排序的位置元素. 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:
ASC: 根据中心位置, 按照从近到远的方式返回位置元素
DESC: 根据中心位置, 按照从远到近的方式返回位置元素
- //COUNT: 获取前 N 个匹配元素
- 127.0.0.1:6379> geoadd key2 121.3996887207031 31.04559326171875 member1 116.3883056640625 39.92889404296875 member2 113.5325012207031 34.68359375 member3 115.9332885742188 28.55000305175781 member4
- (integer) 4
- 127.0.0.1:6379> georadius key2 116.3883056640625 39.92889404296875 1500 km
- 1) "member4"
- 2) "member1"
- 3) "member3"
- 4) "member2"
- 127.0.0.1:6379> georadius key2 116.3883056640625 39.92889404296875 1500 km withcoord withdist withhash
- 1) 1) "member4"
- 2) "1266.3179"
- 3) (integer) 4051459586134239
- 4) 1) "115.93328922986984253"
- 2) "28.55000287189253072"
- 2) 1) "member1"
- 2) "1086.8099"
- 3) (integer) 4054751755931817
- 4) 1) "121.39969021081924438"
- 2) "31.0455930059736076"
- 3) 1) "member3"
- 2) "635.6729"
- 3) (integer) 4064933024035472
- 4) 1) "113.53250294923782349"
- 2) "34.6835946401745403"
- 4) 1) "member2"
- 2) "0.0001"
- 3) (integer) 4069885541758997
- 4) 1) "116.38830453157424927"
- 2) "39.92889337816622941"
- 127.0.0.1:6379> georadius key2 116.3883056640625 39.92889404296875 1500 km withcoord withdist withhash count 2 desc
- 1) 1) "member4"
- 2) "1266.3179"
- 3) (integer) 4051459586134239
- 4) 1) "115.93328922986984253"
- 2) "28.55000287189253072"
- 2) 1) "member1"
- 2) "1086.8099"
- 3) (integer) 4054751755931817
- 4) 1) "121.39969021081924438"
- 2) "31.0455930059736076"
- GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
- // 官方解释: 查询表示地理空间索引的已排序集, 以获取与成员匹配的给定最大距离的成员
- // 给定距离由自定义成员变成了 key 中成员, 时间复杂度为 O(log(N)+M),N 为指定半径范围内的元素个数, M 为要返回的个数
HyperLogLog 类型
Redis2.8.9 版本推出
Redis 的基数统计, 这个结构可以非常省内存的去统计各种计数, 比如注册 IP 数, 每日访问 IP 数, 页面实时 UV, 在线用户数等. 但它也有局限性, 就是只能统计数量, 而没办法去知道具体的内容是什么. HyperLogLog 在 Redis 中每个键占用的内容都是 12K, 理论存储近似接近 2^64 个值, 不管存储的内容是什么, 它是一个基于基数估算的算法, 只能比较准确的估算出基数, 可以使用少量固定的内存去存储并识别集合中的唯一元素. 而且这个估算的基数并不一定准确, 是一个带有 0.81% 标准错误的近似值.
- PFADD key element [element ...]
- // 将指定的元素添加到指定的 HyperLogLog.
- PFCOUNT key [key ...]
- // 返回由 HyperLogLog at key 观察到的集合的近似基数.
- PFMERGE destkey sourcekey [sourcekey ...]
- // 将 N 个不同的 HyperLogLogs 合并为一个.
- 127.0.0.1:6379> PFADD key10 "aaa" "bbb" "ccc"
- (integer) 1
- 127.0.0.1:6379> pfadd keys1 "aaa" "bbb" "ccc"
- (integer) 1
- 127.0.0.1:6379> pfcount keys1
- (integer) 3
- 127.0.0.1:6379> pfadd keys2 "bbb" "ccc" "ddd"
- (integer) 1
- 127.0.0.1:6379> pfcount keys1 keys2
- (integer) 4
- 127.0.0.1:6379> pfmerge keys3 keys1 keys2
- OK
- 127.0.0.1:6379> pfcount keys3
- (integer) 4
来源: https://www.cnblogs.com/JoshWill/p/11938729.html