Redis三种特殊数据类型的具体使用

 更新时间:2022年02月18日 15:41:35   作者:一心同学  
本文主要介绍了Redis三种特殊数据类型的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一、HyperLogLog 基数统计

1.1 什么是基数?

我们直接通过一个例子就可以明白什么是基数统计,比如数据集 {1, 2, 3, 3, 5, 5,}, 那么这个数据集的基数集为 {1,2,3,5}, 基数(不重复元素)为4。也就是说是不重复元素的个数。

1.2 使用基数统计的好处

每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。如果要从内存角度来比较的话Hyperloglog是首选。

1.3 应用场景

    网页的uv(一个人访问一个网站多次,但是还是算做一个人)

  • 🚀 传统的方式:set(因为set不允许重复,如果重复就覆盖)保存用户的id,然后就可以统计,set中元素数量作为标准判断,这个方式如果保存大量的用户id,就会比较麻烦并且在大型网站中会占用大量的内存。我们的目的是为了计数,而不是保存用户id。
  • 🚀 使用HyperLogLog:一个HyperLogLog 键只需要12KB,能够计算的数量却非常巨大,占用的内存空间大大减少。

1.4 注意事项 

如果允许容错(0.81% 错误率,计数的话可以忽略不计),那么一定可以使用Hyperloglog!如果不允许容错,就使用set或者自己的数据类型即可!

1.5 基本命令

序号命令及描述
1PFADD key element [element ...]
添加指定元素到 HyperLogLog 中。​
2PFCOUNT key [key ...]
返回给定 HyperLogLog 的基数估算值。​
3PFMERGE destkey sourcekey [sourcekey ...]
将多个 HyperLogLog 合并为一个 HyperLogLog​

1.6 使用

127.0.0.1:6379> pfadd mykey1 a b c d e f   #给第一组添加数据
(integer) 1
127.0.0.1:6379> pfcount mykey1  #统计mykey1的基数数量
(integer) 6
127.0.0.1:6379> pfadd mykey2 e e f j  #给第二组添加数据
(integer) 1
127.0.0.1:6379> pfcount mykey2     #统计mykey2的基数数量
(integer) 3
127.0.0.1:6379> pfmerge mykey3 mykey1 mykey2   # 合并两组 mykey1 mykey2 => mykey3 并集
OK
127.0.0.1:6379> pfcount mykey3    #统计mykey3的基数数量
(integer) 7

二、Geospatial 地理位置

2.1 介绍

Redis3.2 版本开始推出的Geospatial,可以推算地理位置的信息,两地之间的距离,方圆几里的人。

2.2 使用场景

  • 🚀 朋友定位
  • 🚀 查看附近的人
  • 🚀 打车距离计算

2.3 基本命令

序号命令及描述
1GEOADD key 经度 纬度 地点名称
将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
2GEOPOS key 地点名称
从key里返回所有给定位置元素的位置(经度和纬度)。
3GEODIST key 地点1 地点2 单位
返回两个给定位置之间的距离,如果两个位置之间的其中一个不存在, 那么命令返回空值。
4

GEORADIUS key 经度 纬度 范围数值 单位

以给定的经纬度为中心, 找出某一半径内的元素

5GEORADIUSBYMEMBER key 地点 距离数值 单位
找出位于指定范围内的元素,中心点是由给定的位置元素决定
6GEOHASH key 地点1 地点2
将返回11个字符的Geohash字符串,如果两个字符串越接近,那么则距离越近。
7zrange key start stop
获得指定key中坐标信息
8zrem key 地点
删除指定key下指定目标的数据

查询地点经纬度:

城市经纬度查询-国内城市经度纬度在线查询工具

2.4 详细讲解

2.4.1 GEOADD

作用:添加地理位置

规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入!

语法:GEOADD key 经度 纬度 地点名称

🔥 注意事项

有效的经度从-180度到180度。

有效的纬度从-85.05112878度到85.05112878度。

当坐标位置超出上述指定范围时,该命令将会返回一个错误。

🌵 使用

#添加单个信息
127.0.0.1:6379> geoadd address 116.708463 23.37102 shantou   
(integer) 1
#添加多个信息
127.0.0.1:6379> geoadd address 116.405285 39.904989 beijin 121.472644 31.231706 shanghai
(integer) 2

2.4.2 GEOPOS

作用:获得指定地点的位置信息(经纬度)

语法:GEOPOS key 地点名称

🌵 使用

127.0.0.1:6379> geopos address beijin   #获得北京的地理位置
1) 1) "116.40528291463851929"  #经度
   2) "39.9049884229125027"   #纬度

2.4.3 GEODIST

作用:返回两个给定位置之间的距离,如果两个位置之间的其中一个不存在, 那么命令返回空值。

语法:GEODIST key 地点1 地点2 单位

🔥 单位参数:

  • m 表示单位为米。
  • km 表示单位为千米。
  • mi 表示单位为英里。
  • ft 表示单位为英尺。

如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。

🌵 使用:

127.0.0.1:6379> geodist address beijin shanghai km  #查询北京与上海之间的距离
"1067.5980"

2.4.4 GEORADIUS

作用:以给定的经纬度为中心, 找出某一半径内的元素。

语法:GEORADIUS key 经度 纬度  范围数值  单位

🌵 使用:

#查找以116,39这个经纬度为中心,寻找方圆1500km的城市
127.0.0.1:6379> georadius address 116 39 1500 km
1) "shanghai"
2) "beijin"
 
# 显示到中间距离的位置
127.0.0.1:6379> georadius address 116 39 1500 km withdist
1) 1) "shanghai"
   2) "996.7313"
2) 1) "beijin"
   2) "106.5063"
 
#显示他人的定位信息
127.0.0.1:6379> georadius address 116 39 1500 km withcoord
1) 1) "shanghai"
   2) 1) "121.47264629602432251"
      2) "31.23170490709807012"
2) 1) "beijin"
   2) 1) "116.40528291463851929"
      2) "39.9049884229125027"
 
#筛选出最近的城市以及显示其距离
127.0.0.1:6379> georadius address 116 39 1500 km withdist withcoord count 1
1) 1) "beijin"
   2) "106.5063"
   3) 1) "116.40528291463851929"
      2) "39.9049884229125027"
 
 
#筛选最近两个城市以及显示其距离
127.0.0.1:6379> georadius address 116 39 1500 km withdist withcoord count 2
1) 1) "beijin"
   2) "106.5063"
   3) 1) "116.40528291463851929"
      2) "39.9049884229125027"
2) 1) "shanghai"
   2) "996.7313"
   3) 1) "121.47264629602432251"
      2) "31.23170490709807012"

2.4.5 GEORADIUSBYMEMBER

作用:找出位于指定范围内的元素,中心点是由给定的位置元素决定。

语法:GEORADIUSBYMEMBER  key 地点  距离数值  单位

🌵 使用:

#找出距离北京方圆1500km内的城市
127.0.0.1:6379> georadiusbymember address beijin 1500 km
1) "shanghai"
2) "beijin"

2.4.6 GEOHASH

作用:将返回11个字符的Geohash字符串,如果两个字符串越接近,那么则距离越近。

语法:GEOHASH  key 地点1  地点2

🌵 使用:

127.0.0.1:6379> geohash address beijin shantou
1) "wx4g0b7xrt0"
2) "ws4uzy8d030"

2.4.7 ZRANGE

作用:获得指定key中坐标信息。

语法:zrange  key  start stop

🌵 使用:

127.0.0.1:6379> zrange address 0 -1
1) "shantou"
2) "shanghai"
3) "beijin"

2.4.8 ZREM

作用:删除指定key下指定目标的数据。

语法:zrem  key 地点

🌵 使用:

127.0.0.1:6379> zrem address shanghai
(integer) 1

三、BitMap

🌴 介绍

BitMap是通过一个bit位来表示某个元素对应的值或者状态,只有0 和 1 两个状态,其中的key就是对应元素本身。365 天 = 365 bit ,1字节 = 8bit ,也就是说统计一年的用户状态只需要46 个字节左右,所以其能够节省很大的空间。

🌵 应用场景

  • (1)用户签到
  • (2)统计活跃用户
  • (3)用户在线状态(在线就设置为1,不在线就设置为0)

🔥 使用

  • 🚀 需求:记录 周一到周日的打卡
  • 1:表示有打卡
  • 0:表示没有打卡
127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 1
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0

🚀 查看某一天是否有打卡

127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 6
(integer) 0

🚀 统计本周的打卡记录

127.0.0.1:6379> bitcount sign
(integer) 4

小结

以上就是【一心同学】整理的【Redis】中的【三种特殊数据类型】,或许我们在平时很少用到,但如果我们能够用得到,那么其对我们的作用是非常大的,可以给我们【节省巨大的空间】以及【带来极快的速度】。

到此这篇关于Redis三种特殊数据类型的具体使用的文章就介绍到这了,更多相关Redis 特殊数据类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis中散列类型的常用命令小结

    Redis中散列类型的常用命令小结

    散列类型的键值其实也是一种字典解耦,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型,所以说散列类型不能嵌套其他的数据类型。下面就来详细介绍下Redis中散列类型的常用命令,有需要的可以参考学习。
    2016-09-09
  • 命令行清除Redis缓存的实现

    命令行清除Redis缓存的实现

    本文主要介绍了命令行清除Redis缓存的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • redis sentinel监控高可用集群实现的配置步骤

    redis sentinel监控高可用集群实现的配置步骤

    这篇文章主要介绍了redis sentinel监控高可用集群实现的配置步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • 深入解析Redis中常见的应用场景

    深入解析Redis中常见的应用场景

    这篇文章主要给大家介绍了关于Redis中常见的应用场景的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • 详解Redis数据结构之跳跃表

    详解Redis数据结构之跳跃表

    这篇文章主要介绍了Redis数据结构中的跳跃表的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Redis配置文件详解

    Redis配置文件详解

    这篇文章主要介绍了Redis配置文件详解,本文详细完整的用中文解释了Redis配置文件中各种参数的作用和功能,需要的朋友可以参考下
    2015-04-04
  • redis部署及各种数据类型使用命令详解

    redis部署及各种数据类型使用命令详解

    这篇文章主要介绍了redis部署及各种数据类型使用命令,编译安装redis及部署过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • redis集群搭建过程(非常详细,适合新手)

    redis集群搭建过程(非常详细,适合新手)

    这篇文章主要介绍了redis集群搭建过程,Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群,具体搭建过程跟随小编一起看看吧
    2021-11-11
  • redis快照模式_动力节点Java学院整理

    redis快照模式_动力节点Java学院整理

    这篇文章主要为大家详细介绍了redis快照模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • redis实现分布式的方法总结

    redis实现分布式的方法总结

    在本篇文章中小编给大家整理了关于redis分布式怎么做的具体内容以及知识点总结,有兴趣的朋友们参考下。
    2019-06-06

最新评论