这是我参与8月更文挑战的第26天,活动详情查看:8月更文挑战
三种特殊数据类型
🥠Redis作为一个高性能的NoSQL数据库,在给我们提供了五种基本数据类型之外,还提供了三种特殊数据类型Geospatal、HyperLogLog、BitMaps
。在上一篇文章中 从五种基本数据类型了解Redis主要介绍了Redis的五种基本数据类型,下面将主要介绍这三种特殊的数据类型.
Geospatal
Geospatal是Redis3.2.0版本推出的一个数据结构,通过他可以将用户给定的地理位置信息存储起来,并对这些信息进行操作,用来实现如计算两个位置之间的距离、查找附近的人这类依赖于地理位置信息的功能,Geospatal底层是zset通过来实现的。
常见操作
geoadd key longitude(经度) latitude(纬度) member(名称) [longitude latitude member ...]
将指定经纬度的地理位置及其名称添加到指定的zset集合中,支持一次添加多个,该命令的返回值为添加到zset有序集合的数目。如添加一个经纬度为116.413384 39.910925
(表示潮州的经纬度,经纬度之间以空格分开)到key为cityzset集合中,如下
geopos key member [member ...]
根据key、member名称获取指定的经纬度,如获取上面我们保存的潮州的地理位置,支持一次获取多个。
geodist key member1 member2 [m|km|ft|mi]]
返回两个给定位置之间的距离,可以应用在求两个地理位置之间的距离。如果两个位置之间的其中一个不存在, 那么命令返回空值。其中指定单位的参数 unit 必须是以下单位的其中一个(默认为m):m
表示单位为米。km
表示单位为千米。mi
表示单位为英里。ft
表示单位为英尺。 示例: 计算广州和北京之间的距离。
-
georadius key longitude(经度) latitude(纬度) radius [m|km|ft|mi]] [withcoord] [withdist]
通过该命令可以实现以给定的经纬度为中心,找出指定半径内的元素member,如可以应用在查找附近的人。 -
georadiusbymember key member radius [m|km|ft|mi]] [withcoord] [withdist]
找出指定元素周围的其他元素,与上一条命令不同的是,georadiusbymember是根据member和指定的查找距离radius来搜索,并将查找结果保存到另外的集合中。 -
zrem key member [member ...]
geo的底层是zset,因此可以用zrem key member
来删除指定的member元素 -
zrange key min max
查看指定key中对应的所有member元素
HyperLogLog
HyperLogLog是实现基数统计的数据结构。那还什么是基数呢?例如有两个集合A、B他们的内容分别为A{1、3、5}
、B{2、4、4、6、8}
,那么这集合A的基数就是3、集合B的基数就是4,从这个简单例子我们可以得出所谓基数,就是不重复的元素的个数。Redis提供的HyperLogLog占用的内存是固定的、存储2^64个不同的元素只需要16kb的内容。它常应用于网站的UV统计。
常用操作
-
pfadd key element1 element2 [element...]
添加1个或n个element到指定key对应的集合中 -
pfmerge destkey sourcekey1 sourcekey2 [sourcekey....]
合并n个指定的元素的基数到指定的destkey元素的基数中(取并集) -
pfcount key
统计指定key中对应的基数值(自动去重)
如下示例:
BitMaps
位图不是实际的数据类型,而是在String类型上定义的一组面向位的操作。由于字符串是二进制安全的,并且最大长度为512MB,因此可以设置多达
2^32
个不同的位,其通过操作二进制位来进行记录,只有0 和 1 两个状态,可以应用在统计用户每日打卡情况。
常用操作
-
setbit key offset value
设置offset和value必须 为Integer类型,且value只能取 0 或 1 -
getbit key offset
-
bitcount key [start end]
统计指定范围内value取值为1的数量 -
bitop AND|OR|NOT|XOR destkey key [key...]
命令可以在不同的字符串之间执行按位运算,提供的位运算有逻辑并、逻辑或、逻辑异或,并将结果保存到destkey中。 -
bitpos key bit [start] [end]
查找指定范围内为0或1的第一位。
应用:统计员工一周出勤情况(0代表缺勤、1代表出勤):
🏁以上就是对Redis三种特殊数据类型的简单介绍,如果有错误的地方,还请留言指正,如果觉得本文对你有帮助那就点个赞👍吧😋😻😍