您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

Reids之三种特殊数据类型Bitmaps,HyperLogLog,Geospatial

在这里插入图片描述

Bitmaps

简介

现代计算机用二进制(位)作为信息的基础单位,1个字节等于8位,例如“abc”字符串是由3个字节组成,但实际在计算机存储时将其用二进制表示,“abc” 分别对用的ASCLL码分别是97,98,99, 对应的二进制分别是01100001,01100010和01100011,如下图:

在这里插入图片描述
合理地使用操作位能够有效的提高内存使用率和开发效率。

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

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

在这里插入图片描述

命令

  • setbit key offset value : 设置Bitmaps中的每个key值的偏移量的值(0或者1)
    例子:每个独立用户是否访问过网站存放在Bitmaps中,将访问的哟用户记做1,没有访问的用户记做0,用偏移量作为用户的id,
    设置键的第 offset个为的值(从0算起),假设现在有20个用户,userid=1,6,11,15,19的用户对网站进行了访问,那么当前Bitmaps 初始化结果如图:
    在这里插入图片描述
    在这里插入图片描述
    注意:很多应用的用户id以一个指定数字(列如10000开头或者是一个随机的20数字),直接将用户id作为Bitmaps的偏移量必回照成一定的浪费,通过的做法是每次做setbit操作时姜用户id做一个算法,减少数字的大小。
    在第一次初始化Bitmaps时,假如偏移量非常大,那么整个初始化过程执行会比较慢,可能会照成redis的阻塞

  • getbit key offset : 获取Bitmaps中某个偏移量的值

  • bitcount key [start end] 统计字符串从start字节到end字节比特值为1的数量
    在这里插入图片描述

  • bitop and(or/not/xor) destkey [key…] :bitop是一个复合操作,他可以做多个Bitmaps的and(交集),or(并集),not(非),xor(异或)操作并将结果保存到destkey中

实例:
2020-11-04 日访问网站的userid = 1,2,5,9.
setbit unique:users:20201104 1 1
setbit unique:users:20201104 2 1
setbit unique:users:20201104 5 1
setbit unique:users:20201104 9 1

2020-11-03 日访问网站的userid = 0,1,4,9.
setbit unique:users:20201103 0 1
setbit unique:users:20201103 1 1
setbit unique:users:20201103 4 1
setbit unique:users:20201103 9 1

计算出两天都访问过网站的用户数量:使用and
bitop and unique:users:and:20201104_03 unique:users:20201103 unique:users:20201104
在这里插入图片描述

HyperLogLog

简介

在工作当中,我们经常会遇到与统计相关的功能需求,比如统计网站PV(PageView页面访问量),可以使用Reids的incr,incrby轻松实现,但是随着数据不断增加,导致占用空间越来越大

Redis推出了HyperLogLog降低一定的精度来平衡存储空间来解决这个问题

命令

  • pfadd key element [element…] : 添加指定元素到HyperLogLog中,返回1:添加成功,0:重复数据,不会添加
    在这里插入图片描述
  • pfcount key [key…] : 计算HLL的近似基数,可以计算多个HLL,比如用HLL存储每天的UV,计算一周的UV可以使用7天的UV合并计算即可
    在这里插入图片描述
    在这里插入图片描述
  • pfmerge destkey sourceKey [sourceKey…] 将一个或多个HLL合并后的结果存储在另一个HLL中
    在这里插入图片描述
Geospatial

简介

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

命令

  • geoadd key logitude latitude member [ logitude latitude member …] : 添加地理位置(经度,纬度,名称)
    在这里插入图片描述
    注意:两级无法直接添加,有效的经度从 -180度到180度。有效的纬度从 -85.05112878 度到 85.05112878度
  • geopos key member [member…] 获得指定定去的坐标值
    在这里插入图片描述
  • geodist key member1 member2 [m|km|ft|mi] :获取两个位置之间的直线距离
    单位:
    m : 表示单位为米(默认值)
    km: 表示单位为千米
    mi: 表示单位为英里
    ft: 表示单位为 英尺
    在这里插入图片描述
  • georadius key longitude latitude radius m|km|ft|mi : 以给定的经纬度为中心,找出radius 半径内的元素
    在这里插入图片描述

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进