😆你了解Redis三种特殊数据类型么

643 阅读4分钟

这是我参与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集合中,如下

image.png

  • geopos key member [member ...] 根据key、member名称获取指定的经纬度,如获取上面我们保存的潮州的地理位置,支持一次获取多个。

image.png

  • geodist key member1 member2 [m|km|ft|mi]] 返回两个给定位置之间的距离,可以应用在求两个地理位置之间的距离。如果两个位置之间的其中一个不存在, 那么命令返回空值。其中指定单位的参数 unit 必须是以下单位的其中一个(默认为m):
    • m 表示单位为米。
    • km 表示单位为千米。
    • mi 表示单位为英里。
    • ft 表示单位为英尺。 示例: 计算广州和北京之间的距离。

image.png

  • 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中对应的基数值(自动去重)

如下示例:

image.png

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代表出勤):

image.png

🏁以上就是对Redis三种特殊数据类型的简单介绍,如果有错误的地方,还请留言指正,如果觉得本文对你有帮助那就点个赞👍吧😋😻😍

默认标题_动态分割线_2021-07-15-0.gif