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

目录

1.Bitmaps

应用场景

常用命令

2.HyperLogLog

应用场景

优点

常见命令

3.Geospatial

应用场景

常见命令


1.Bitmaps

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

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

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

应用场景

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

常用命令

1.setbit

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

例子:

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

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

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

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

2.getbit

获取第offset的值

例子: 

 3.bitcount 

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

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

例子: 

4.bitpos

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

例子:

9月5号

9月4号

合并

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.

例子:

也可一次插入多个数据

2.pfcount

计算words的近似基数

 例子:

3.pfmerge

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

 例子:

创建两个hyperLogLog集合,words和word

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

3.Geospatial

应用场景

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

常见命令

1.geoadd

 例子:

数据有效范围:

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

2.geopos

获取指定地区的坐标值

例子:

3.geodist

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

可选参数:

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

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

例子: 

4.georadius 

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

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

例子:

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zoeil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值