vlambda博客
学习文章列表

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

点击查看往期精彩内容






Redis 中的 3 种特殊数据类型


Redis 中的 3 种特殊数据类型
转了吗
赞了吗
在看吗