Redis新数据类型详解(图文结合)

导读:本篇文章讲解 Redis新数据类型详解(图文结合),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

1.Bitmaps

应用场景

常用命令

2.HyperLogLog

应用场景

优点

常见命令

3.Geospatial

应用场景

常见命令


1.Bitmaps

现代计算机用二进制作为信息的基本单位,1个字节等于8位,合理的使用操作位能够有效的提高内存使用率和开发效率。

Redis提供了 Bitmaps这个“数据类型”可以实现对位的操作:

  • Bitmaps本身不是一种数据类型,实际上它就是字符串(key-value)但是它可以对字符串的位进行操作。
  •  Bitmaps单独提供了一套命令,所以在Redis 中使用 Bitmaps和使用字符串的方法不太相同。 可以把 Bitmaps 想象成一个以位为单位的数组,数组的每个单元只能存诸0和1,数组的下标在Bitmaps中叫做偏移量。

Redis新数据类型详解(图文结合)

 

应用场景

可用于标记独立用户是否访问过网站,有访问的置为1,没有的为0

常用命令

1.setbit

设置Bitmaps中某个偏移量的值(0或者1)

Redis新数据类型详解(图文结合)

例子:

用偏移量作为用户id,假设现在有uid=1.3.9的用户访问网站,那么将该位置的值置为1

users:20220905 可以表示这一天内访问网站的用户

Redis新数据类型详解(图文结合)

 注:一般用户的id都是一大串随机数字,如果偏移量非常大的话势必会造成一定的内存浪费,那么可以先减去一个基数使得偏移量变小以节省内存空间

ps: 感觉有点像c++中的一种数据结构–bitset  有兴趣的小伙伴可以去查一下。

2.getbit

获取第offset的值

Redis新数据类型详解(图文结合)

例子: 

Redis新数据类型详解(图文结合)

 3.bitcount 

统计字符串被设置为1的 bit 数。

start 和 end 参数的设置,可以使用负数值:比如 -1 表示最后一个位,而-2表示倒数第二个位, start、end 是指bit 组的字节的下标数,二者皆包含。

Redis新数据类型详解(图文结合)

例子: 

Redis新数据类型详解(图文结合)

 

4.bitpos

bitop 是一个复合操作,它可以做多个Bitmaps的and(交集)、or(并集)、not(非)、xor(异或) 操作并将结果保存在destkey中。

Redis新数据类型详解(图文结合)

例子:

9月5号

Redis新数据类型详解(图文结合)

9月4号

Redis新数据类型详解(图文结合) 

合并

Redis新数据类型详解(图文结合) 

2.HyperLogLog

应用场景

        HyperLogLog可用于解决与统计相关的功能需求,比如统计网站的页面访问量,虽然可以使用Redis的incr、incrby轻松实现。但像 独立访客、独立IP数、搜索记录数等需要去重计数的问题如何解决?这种求集合中不重复元素个数的问题称为基数问题。”
        

        解决基数问题有很多种方案:

  • 数据存储在MySQL 表中,使用distinct count计算不重复个数
  • 使用Redis 提供的 hash、setbitmaps等数据结构来处理

以上的方案结果精确,但随着数据不断增加,导致占用空间越来越大,对于非常大的数据集是不切实际的。
        Redis推出了HyperLogLog,这种数据结构能够降低一定的精度来平衡存储空间。

优点

        Redis HyperLogLog是用来做基数统计的算法,HyperLogLog的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。

        在Redis里面,每个HyperLogLog 键只需要花费12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为 HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。这也是其占用内存少的原因。

常见命令

1.pfadd 

将元素添加到指定的HyperLogLog数据结构中,如果执行命令后words估计的近似基数发生变化,则返回1,否则返回0.

Redis新数据类型详解(图文结合)

例子:

也可一次插入多个数据

Redis新数据类型详解(图文结合)

 

2.pfcount

计算words的近似基数

Redis新数据类型详解(图文结合)

 例子:

Redis新数据类型详解(图文结合)

 

3.pfmerge

即将一个或多个hyperLogLog数据结构合并后的结果存放到另一个hyperLogLog中

Redis新数据类型详解(图文结合)

 例子:

创建两个hyperLogLog集合,words和word

Redis新数据类型详解(图文结合)

 合并后集合的近似基数为合并前两个集合的基数之和

Redis新数据类型详解(图文结合)

3.Geospatial

应用场景

        Redis 3.2 中增加了对 GEO 类型的支持。GEO,Geographic,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。redis 基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度 Hash等常见操作。

常见命令

1.geoadd

Redis新数据类型详解(图文结合)

 例子:

Redis新数据类型详解(图文结合)

数据有效范围:

经度从 -180度到180度。纬度从-8505112878度到85.05112878 度。
当坐标位置超出指定范围时,该命令将会返回一个错误。已经添加的数据,是无法再次往里面添加的。

2.geopos

获取指定地区的坐标值

Redis新数据类型详解(图文结合) 

例子:

Redis新数据类型详解(图文结合)

 

3.geodist

获取两个位置之间的直线距离

Redis新数据类型详解(图文结合)

可选参数:

  • m表示单位为米[默认值]。
  • km 表示单位为千米。
  • mi表示单位为英里。
  • ft 表示单位为英尺。

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

例子: 

Redis新数据类型详解(图文结合)

4.georadius 

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

longitude:经度       latitude:纬度     radius:半径      可选参数:单位

Redis新数据类型详解(图文结合)

例子:

Redis新数据类型详解(图文结合) 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118520.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!