深入浅析redis中的三种特殊数据类型
时间:2021-09-03
来源:互联网
标签:
今天PHP爱好者给大家带来本篇文章带大家了解一下redis中的三种特殊数据类型,感兴趣的朋友可以学 习了解一下~望对大家有所帮助。
redis 三种特殊的数据类型
Geospatial 地理位置
Hyperloglog 基数统计
Bitmap 位图场景
Geospatial 地理位置
redis 3.2 版本就推出了 Geospatial
官方文档上可以详细的看到用法:
https://www.redis.net.cn/order/3685.html
Geospatial 可以使用在如下场景:
附近的人
打车计算距离
朋友定位
等一系列跟定位有关的场景
Geospatial 只有 六个命令
GEOADD
GEODIST
GEOHASH
GEOPOS
GEORADIUS
GEORADIUSBYMEMBER
GEOADD
添加地理位置
有效的经度从-180度到180度。
有效的纬度从-85.05112878度到85.05112878度。
当坐标位置超出上述指定范围时,该命令将会返回一个错误。
GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member ...]
添加经纬度,城市名
127.0.0.1:6379> GEOADD city 113.087559 28.251818 changsha
(integer) 1
127.0.0.1:6379> GEOADD city 114.064552 22.548457 shenzhen
(integer) 1
127.0.0.1:6379> GEOADD city 104.087045 30.666416 chengdu
(integer) 1
127.0.0.1:6379> GEOADD city 118.802422 32.064653 nanjing
(integer) 1
127.0.0.1:6379> GEOADD city 106.558434 29.568996 chongqing
(integer) 1
127.0.0.1:6379> GEOADD city 121.463615 31.195908 shanghai
(integer) 1
127.0.0.1:6379> GEOADD city 117.208093 39.091103 tianjin
(integer) 1
GEOPOS
GEOPOS key member [member ...]
获取指定城市的经纬度信息
127.0.0.1:6379> GEOPOS city changsha
1) 1) "113.08755666017532349"
2) "28.25181827470789386"
127.0.0.1:6379> GEOPOS city tianjin
1) 1) "117.20809489488601685"
2) "39.0911021322545551"
GEODIST
GEODIST key member1 member2 [m|km|ft|mi]
其中有如下 4 个单位:
m :米
km:公里
ft:英尺
mi:英里
获取两个城市之间的距离
127.0.0.1:6379> GEODIST city changsha tianjin
"1264101.6876"
127.0.0.1:6379> GEODIST city changsha tianjin km
"1264.1017"
127.0.0.1:6379> GEODIST city changsha shenzhen km
"641.9034"
GEOHASH
GEOHASH key member [member ...]
返回一个或者多个GEOHASH 表示的元素, 返回 11 个字符 Geohash 字符串
127.0.0.1:6379> GEOHASH city changsha
1) "wt02tr5fg00"
127.0.0.1:6379> GEOHASH city changsha beijing
1) "wt02tr5fg00"
2) (nil)
127.0.0.1:6379> GEOHASH city changsha beijing tianjin chongqing
1) "wt02tr5fg00"
2) (nil)
3) "wwgq7hk64t0"
4) "wm7b0yc7zk0"
GEORADIUS
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOR
指定经纬度作为原点,指定半径,查询在指定范围内的城市,这些城市都是在我们自己的集合里面
127.0.0.1:6379> GEORADIUS city 110 30 500 m
(empty array)
127.0.0.1:6379> GEORADIUS city 110 30 500 km
1) "chongqing"
2) "changsha"
127.0.0.1:6379> GEORADIUS city 110 30 1000 km
1) "chongqing"
2) "chengdu"
3) "shenzhen"
4) "changsha"
5) "nanjing"
127.0.0.1:6379> GEORADIUS city 110 30 700 km withcoord
1) 1) "chongqing"
2) 1) "106.55843228101730347"
2) "29.56899626404301529"
2) 1) "chengdu"
2) 1) "104.08704489469528198"
2) "30.6664164635846177"
3) 1) "changsha"
2) 1) "113.08755666017532349"
2) "28.25181827470789386"
127.0.0.1:6379> GEORADIUS city 110 30 700 km withdist
1) 1) "chongqing"
2) "335.6530"
2) 1) "chengdu"
2) "572.3911"
3) 1) "changsha"
2) "357.4711"
127.0.0.1:6379> GEORADIUS city 110 30 700 km withhash
1) 1) "chongqing"
2) (integer) 4026059435699931
2) 1) "chengdu"
2) (integer) 4026137831798506
3) 1) "changsha"
2) (integer) 4050903792284309
GEORADIUSBYMEMBER
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]
找出位于指定元素周围的城市
127.0.0.1:6379> GEORADIUSBYMEMBER city tianjin 1000 km
1) "nanjing"
2) "tianjin"
3) "shanghai"
127.0.0.1:6379> GEORADIUSBYMEMBER city tianjin 500 km
1) "tianjin"
127.0.0.1:6379> GEORADIUSBYMEMBER city tianjin 5000 km
1) "chongqing"
2) "chengdu"
3) "shenzhen"
4) "changsha"
5) "shanghai"
6) "nanjing"
7) "tianjin"
Geospatial 底层的原理就是使用 Zset 有序集合来实现的,我们可以使用 Zset 有序集合的命令来操作 Geo ,咱们是用 Zset 的指令来感受一波
127.0.0.1:6379> ZRANGE city 0 -1
1) "chongqing"
2) "chengdu"
3) "shenzhen"
4) "changsha"
5) "shanghai"
6) "nanjing"
7) "tianjin"
127.0.0.1:6379> ZCARD city
(integer) 7
Hyperloglog 基数统计
基数是个啥?
基数,就是不重复的数,例如:
A = {1,2,3,4,5}
B = {2,3,4,5,6}
那么 A 和 B 的取并集的基数就是 6
简介
Hyperloglog 是 redis 2.8.9 版本开始有的这种数据结构
redis hyperloglog 基数统计也是一种算法
例如有这样的应用场景:
网页访问人数统计,同一个用户多次访问网站,也是只算作 1
传统的方式是使用 set 集合的方式来保存 id,统计 set 里面 id 的个数,来计算人数
这种方式也没有问题,但是若数据量很大的时候,就会非常麻烦,因为我们拿 id 是没有用的,我们只需要计数而已
优点
Hyperloglog 占用的内存空间是固定的,2^16 次方,只需要占用 12 KB 内存,从内存的角度来技术选型,Hyperloglog 是首选哦
PFADD key element [element ...]
向 Hyperloglog 中添加一个或者多个元素
PFMERGE destkey sourcekey [sourcekey ...]
将多个 Hyperloglog 取并集,得到一个结果 Hyperloglog ,里面的数据是不会重复的
127.0.0.1:6379> PFADD myhash 1 2 3 4 5 6 7 8
(integer) 1
127.0.0.1:6379> pfadd myhash2 3 4 5 6 7 8 9 0 88 99
(integer) 1
127.0.0.1:6379> PFMERGE res myhash myhash2
OK
127.0.0.1:6379> PFCOUNT res
(integer) 12
127.0.0.1:6379> PFCOUNT myhash
(integer) 8
127.0.0.1:6379> PFCOUNT myhash2
(integer) 10
Bitmaps 位图场景
Bitmaps 位图,位存储
一般用于,统计用户信息,活跃,不活跃,
登录,不登录
打卡,不打卡 等等,两种状态
Bitmaps 位图,也是一种数据结构,是操作二进制的方式来进行记录的,只有 0 和 1 两种状态
例如我们举个例子,来记录着一周每天的心情,1 是开心,0 是沮丧
SETBIT key offset value
设置 bit 位的值
GETBIT key offset
获取 bit 位的值
127.0.0.1:6379> SETBIT week 0 1
(integer) 0
127.0.0.1:6379> SETBIT week 1 1
(integer) 0
127.0.0.1:6379> SETBIT week 2 1
(integer) 0
127.0.0.1:6379> SETBIT week 3 0
(integer) 0
127.0.0.1:6379> SETBIT week 4 0
(integer) 0
127.0.0.1:6379> SETBIT week 5 1
(integer) 0
127.0.0.1:6379> SETBIT week 6 1
(integer) 0
127.0.0.1:6379> GETBIT week 6
(integer) 1
127.0.0.1:6379> GETBIT week 5
(integer) 1
以上就是深入浅析redis中的三种特殊数据类型的详细内容,更多请关注php爱好者其它相关文章!
-
如何注册谷歌账号(谷歌账号注册方法) 怎么跳过手机验证 时间:2025-09-29
-
access数据库8个经典实例 时间:2025-09-29
-
mmc.exe是什么进程 mmc.exe应用程序错误的原因及解决方法 时间:2025-09-29
-
4种基本的编程命名规范介绍(匈牙利命名法、驼峰式命名法、帕斯卡命名法、下划线命名法) 时间:2025-09-29
-
Ghostscript下载、安装教程 Ghostscript命令参数详解 时间:2025-09-29
-
Linux中内存管理NUMA架构详解 时间:2025-09-29
今日更新
-
ImmutableX链游代币交易指南:币安IMX交易所全解析
阅读:18
-
想知道饲养员是什么梗?揭秘网络热词背后的趣味含义和流行用法!
阅读:18
-
NEAR代币交易首选币安 安全高效的NEAR公链买卖平台
阅读:18
-
AR代币安全交易指南:币安交易所Arweave存储攻略
阅读:18
-
松岗是什么梗揭秘日本声优松岗祯丞的爆笑名场面
阅读:18
-
APT币交易首选币安 一键买卖Aptos生态代币
阅读:18
-
松下梗揭秘:原来是指松下员工内卷到用洗衣机煮火锅的职场文化梗
阅读:18
-
币安HBAR交易指南 Hedera哈希图代币买卖教程
阅读:18
-
卡尔达诺ADA币交易指南 安全买卖平台首选币安
阅读:18
-
宋丹丹找梗是什么梗?揭秘她如何用幽默征服观众,看完秒懂!
阅读:18