Redis之十大类型(三)(下)

文章介绍了Redis中的特殊数据结构,包括位图用于高效的签到和状态统计,HyperLogLog用于基数估计以节省内存,地理空间数据支持地理位置查询,Stream作为消息队列的实现,以及位域进行高效的小整数存储。这些特性使Redis在多种场景下展现出强大的功能。
摘要由CSDN通过智能技术生成

3.6 Redis位图(bitmap)

由 0 和 1 表示的二进制位的 bit 数组

介绍
  • 用String类型作为底层数据结构实现的一种统计二值状态的数据类型
  • 位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)
  • Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2的32次方 = 4294967296)
基本命令
SETBIT key offset value    // 将第offset的值设为value  value只能是0或1  offset 从0开始
GETBIT key offset        // 获得第offset位的值
STRLEN key              // 得出占多少字节 超过8位后自己按照8位一组一byte再扩容
BITCOUNT key         // 得出该key里面含有几个1
BITOP and destKey key1 key2 // 对一个或多个 key 求逻辑并,并将结果保存到 destkey 
BITOP or destKey key1 key2 // 对一个或多个 key 求逻辑或,并将结果保存到 destkey 
BITOP XOR destKey key1 key2 // 对一个或多个 key 求逻辑异或,并将结果保存到 destkey 
BITOP NOT destKey key // 对key 求逻辑非,并将结果保存到 destkey 
应用
  • 做签到很适合位图
    • 每天使用1个1亿位的Bitmap约占12MB的内存(10^8/8/1024/1024),10天的Bitmap的内存开销约为120MB,内存压力不算太高。
    • 在实际使用时,最好对Bitmap设置过期时间,让Redis自动删除不再需要的签到记录以节省内存开销。
  • 对于电影和广告是否被点击播放过也可以用位图

3.7 Redis基数统计(HyperLogLog)

介绍
  • 去重复统计功能的基数估计算法就是 HyperLogLog
  • 基数
    • 是一种数据集,去重复后的真实个数
  • 基数统计
    • 用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算
    • 只需要花费12KB内存,就能记录 2的64次方=18446744073709551616 个不同元素的基数
基本命令

在这里插入图片描述
在这里插入图片描述

应用
  • 统计某个网页的UV、某个文章的UV
    • UV Unique Visitor 独立访客,一般理解为客户端IP,需要去重
  • 用户搜索网站关键词数量
  • 统计用户每天搜索不同词条个数

3.8Redis地理空间(GEO)

介绍

​ 地球上的地理位置是使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],只要我们确定一个点的经纬度就可以名取得他在地球的位置。

  • 例如滴滴打车,最直观的操作就是实时记录更新各个车的位置
  • 然后当我们要找车时,在数据库中查找距离我们(坐标x0,y0)附近r公里范围内部的车辆
基本命令
  • 经纬度去地图上直接复制

GEOADD添加经纬度坐标

在这里插入图片描述

会出现中文乱码

  • redis -cli -a 123456 – raw

GEOPOS 返回经纬度

在这里插入图片描述

GEOHASH返回坐标的 geohash 表示 (base32编码)

在这里插入图片描述

GEODIST 返回两个位置之间的距离

在这里插入图片描述

GEORADIUS 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

在这里插入图片描述

GEORADIUSBYMEMBER 找出指定范围内的元素,中心点是由给定的位置元素决定
在这里插入图片描述

应用
  • 美团附近的饭店、酒店
  • 高德地图附近的店

3.9Redis流(Stream)

介绍
  • 实现消息队列的三个方式
    • List实现消息队列
    • Pub/Sub 发布订阅
    • Stream流 (Redis版的MQ消息中间件+阻塞队列)
      在这里插入图片描述

在这里插入图片描述

​ Stream流实现消息队列,它支持消息的持久化、支持自动生成全局唯一 ID、支持ack确认消息的模式、支持消费组模式等,让消息队列更加的稳定和可靠

Stream结构

在这里插入图片描述

基本命令

队列指令

在这里插入图片描述

消费组指令

在这里插入图片描述
在这里插入图片描述

消费组里的消费者进行轮询

在这里插入图片描述

3.10Redis位域(bitfield)

介绍
  • 将很多小的整数存储到一个长度较大的位图中,又或者将一个非常庞大的键分割位多个较小的键来进行储存,从而高效利用内存
  • 也就是将 Redis 字符串看作是一个 由二进制位组成的数组 并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改
基本命令

在这里插入图片描述

溢出控制:

WRAP: 使用回绕 (Wrap around) 方法处理有符号和无符号整数溢出
在这里插入图片描述

Set: 使用饱和计算(saturation arithmetic) 方法处理溢出, 下溢计算的结果为最小的整数值,而上溢计算的结果为最大的整数值

在这里插入图片描述

FAIL :命令将拒绝执行那些会导致上溢或者下溢情况出现的计算,并向用户返回空值表示计算未被执行

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

晓风残月Lx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值