redis中的三种特殊数据类型
本篇内容主要讲解“redis中的三种特殊数据类型”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“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>GEOADDcity113.08755928.251818changsha(integer)1127.0.0.1:6379>GEOADDcity114.06455222.548457shenzhen(integer)1127.0.0.1:6379>GEOADDcity104.08704530.666416chengdu(integer)1127.0.0.1:6379>GEOADDcity118.80242232.064653nanjing(integer)1127.0.0.1:6379>GEOADDcity106.55843429.568996chongqing(integer)1127.0.0.1:6379>GEOADDcity121.46361531.195908shanghai(integer)1127.0.0.1:6379>GEOADDcity117.20809339.091103tianjin(integer)1GEOPOS
GEOPOS key member [member ...]
获取指定城市的经纬度信息
127.0.0.1:6379>GEOPOScitychangsha1)1)"113.08755666017532349"2)"28.25181827470789386"127.0.0.1:6379>GEOPOScitytianjin1)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>GEODISTcitychangshatianjin"1264101.6876"127.0.0.1:6379>GEODISTcitychangshatianjinkm"1264.1017"127.0.0.1:6379>GEODISTcitychangshashenzhenkm"641.9034"GEOHASH
GEOHASH key member [member ...]
返回一个或者多个GEOHASH 表示的元素, 返回 11 个字符 Geohash 字符串
127.0.0.1:6379>GEOHASHcitychangsha1)"wt02tr5fg00"127.0.0.1:6379>GEOHASHcitychangshabeijing1)"wt02tr5fg00"2)(nil)127.0.0.1:6379>GEOHASHcitychangshabeijingtianjinchongqing1)"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>GEORADIUScity11030500m(emptyarray)127.0.0.1:6379>GEORADIUScity11030500km1)"chongqing"2)"changsha"127.0.0.1:6379>GEORADIUScity110301000km1)"chongqing"2)"chengdu"3)"shenzhen"4)"changsha"5)"nanjing"127.0.0.1:6379>GEORADIUScity11030700kmwithcoord1)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>GEORADIUScity11030700kmwithdist1)1)"chongqing"2)"335.6530"2)1)"chengdu"2)"572.3911"3)1)"changsha"2)"357.4711"127.0.0.1:6379>GEORADIUScity11030700kmwithhash1)1)"chongqing"2)(integer)40260594356999312)1)"chengdu"2)(integer)40261378317985063)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>GEORADIUSBYMEMBERcitytianjin1000km1)"nanjing"2)"tianjin"3)"shanghai"127.0.0.1:6379>GEORADIUSBYMEMBERcitytianjin500km1)"tianjin"127.0.0.1:6379>GEORADIUSBYMEMBERcitytianjin5000km1)"chongqing"2)"chengdu"3)"shenzhen"4)"changsha"5)"shanghai"6)"nanjing"7)"tianjin"
Geospatial 底层的原理就是使用 Zset 有序集合来实现的,我们可以使用 Zset 有序集合的命令来操作 Geo ,咱们是用 Zset 的指令来感受一波
127.0.0.1:6379>ZRANGEcity0-11)"chongqing"2)"chengdu"3)"shenzhen"4)"changsha"5)"shanghai"6)"nanjing"7)"tianjin"127.0.0.1:6379>ZCARDcity(integer)7Hyperloglog 基数统计
基数是个啥?
基数,就是不重复的数,例如:
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>PFADDmyhash12345678(integer)1127.0.0.1:6379>pfaddmyhash3345678908899(integer)1127.0.0.1:6379>PFMERGEresmyhashmyhash3OK127.0.0.1:6379>PFCOUNTres(integer)12127.0.0.1:6379>PFCOUNTmyhash(integer)8127.0.0.1:6379>PFCOUNTmyhash3(integer)10Bitmaps 位图场景
Bitmaps 位图,位存储
一般用于,统计用户信息,活跃,不活跃,
登录,不登录
打卡,不打卡 等等,两种状态
Bitmaps 位图,也是一种数据结构,是操作二进制的方式来进行记录的,只有 0 和 1 两种状态
例如我们举个例子,来记录着一周每天的心情,1 是开心,0 是沮丧
SETBIT key offset value
设置 bit 位的值
GETBIT key offset
获取 bit 位的值
127.0.0.1:6379>SETBITweek01(integer)0127.0.0.1:6379>SETBITweek11(integer)0127.0.0.1:6379>SETBITweek21(integer)0127.0.0.1:6379>SETBITweek30(integer)0127.0.0.1:6379>SETBITweek40(integer)0127.0.0.1:6379>SETBITweek51(integer)0127.0.0.1:6379>SETBITweek61(integer)0127.0.0.1:6379>GETBITweek6(integer)1127.0.0.1:6379>GETBITweek5(integer)1
到此,相信大家对“redis中的三种特殊数据类型”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。