Redis 中的 3 种特殊数据类型
目录
1. 前言
2. 三种特殊的数据类型
2.1 Gerspatial(地理位置)
2.2 Hyperloglog(基数统计)
2.3 Bitmap(位图)
1. 前言
Redis 中除开最常用的 5 种数据类型之外,还有 3 种特殊的数据类型,他们是:
-
Gerspatial(地理位置) -
Hyperloglog(基数统计) -
Bitmap(位图)
2. 三种特殊的数据类型
2.1 Gerspatial(地理位置)
主要针对地理位置操作,有如下 6 个命令:
命令 | 说明 | 备注 |
---|---|---|
geoadd |
添加地理位置 | 经度有效值:[-180, 180] 纬度有效值:[-85.05112878, 85.05112878] |
geodist |
两地之间的距离 | m 表示单位为米km 表示单位为千米mi 表示单位为英里ft 表示单位为英尺 |
geohash |
将二维的经纬度转换为一维的字符串。如果两个字符串越接近,那么则距离越近 | 返回 11 个字符的 geohash 字符串 |
geopos |
获得当前位置(坐标值) | |
georadius |
以给定的经纬度为中心, 找出某一半径内的元素 | |
georadiusbymember |
以给定的经纬度为中心, 找出某一半径内的元素 |
# 添加北京和上海的地理位置信息
127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
# 获取北京位置
geopos china:city beijing
# 计算北京上海的直线距离
127.0.0.1:6379> geodist china:city beijing shanghai km
# 以 120,40 为中心,搜索 1500km 范围内的城市
127.0.0.1:6379> georadius china:city 120 40 1500 km
# 搜索位于指定位置的其他元素
127.0.0.1:6379> georadiusbymember china:city beijing 1000 km
2.2 Hyperloglog(基数统计)
2.8.9 版本中新加入的数据类型,主要用来做 基数统计 的算法,适合于在输入元素的数量或体积较大时,计算基数所需空间总是固定且小额的。每个键只需要 12kb 内存,就能存下 个不同元素。HyperLogLog 只会根据输入元素来计算基数,而不会存储输入元素的本身,主要有三个命令:
命令 | 说明 |
---|---|
pfadd |
创建一组元素 |
pfcount |
统计元素基数数量 |
pfmerge |
整合两组元素 |
# 创建第一组元素
127.0.0.1:6379> pfadd key1 a b c b c d e
# 统计 key1 元素的基数数量
127.0.0.1:6379> pfcount key1
# 创建第二组元素
127.0.0.1:6379> pfadd key2 4 2 3 2 1 5
# 合并第一二组元素
127.0.0.1:6379> pfmerge mergekey key1 key2
# 查看并集基数数量
127.0.0.1:6379> pfcount mergekey
2.3 Bitmap(位图)
Bitmap(位图) 是通过一个 bit
来表示某个元素对应的值或状态,其中 key
是对应元素本身,常用于用户签到、统计活跃用户等场景,常用相关命令有:
命令 | 说明 |
---|---|
setbit |
设置位图值 |
getbit |
获取位图值 |
bitcount |
统计位图值为 1 的值个数 |
# 设置一周的签到次数
127.0.0.1:6379> setbit sign 1 1
127.0.0.1:6379> setbit sign 2 1
127.0.0.1:6379> setbit sign 3 1
127.0.0.1:6379> setbit sign 4 1
127.0.0.1:6379> setbit sign 5 1
127.0.0.1:6379> setbit sign 6 0
127.0.0.1:6379> setbit sign 7 0
# 获取周 5 的签到情况
127.0.0.1:6379> getbit sign 5
# 统计是否全勤
127.0.0.1:6379> bitcount sign
点击查看往期精彩内容