Redis的十大数据类型的常用命令(下)

4.6 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自动删除不再需要的签到记录以节省内存开销。
  • 对于电影和广告是否被点击播放过也可以用位图

4.7 HyperLogLog 的常用命令

介绍

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

会有点误差0.81%

HyperLogLog只是计算基数,但不会存储元素本身

在这里插入图片描述

在这里插入图片描述

应用:

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

4.8 GEO的常用命令

介绍

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

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

在这里插入图片描述

基本命令

经纬度去地图上复制

GEOADD   //添加经纬度坐标
GEOPOS   //返回经纬度
GEOHASH  //返回坐标的 geohash 表示 (base32编码)
GEODIST  //返回两个位置之间的距离
GEORADIUS  //以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUSBYMEMBER   //找出指定范围内的元素,中心点是由给定的位置元素决定

GEOADD 添加经纬度坐标

在这里插入图片描述

在这里插入图片描述

GEOPOS 返回经纬度

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

GEORADIUSBYMEMBER 找出指定范围内的元素,中心点是由给定的位置元素决定

在这里插入图片描述

应用:

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

4.9 Stream的常用命令

实现Redis消息队列的三个方式

  • List实现消息队列
  • Pub/Sub 发布订阅
  • Stream流 (Redis版的MQ消息中间件+阻塞队列)

List实现消息队列,点对点模式

采用异步队列

在这里插入图片描述

Pub/Sub发布订阅

在这里插入图片描述

Redis 发布订阅(pub/sub)有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。而且也没有Ack机制来保证数据的可靠性,假设一个消费者都没有,那消息就直接被丢弃了。

Stream结构

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

Stream结构是一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的ID和对应的内容

在这里插入图片描述

在这里插入图片描述

基本命令

队列相关指令

在这里插入图片描述

在这里插入图片描述

用同一个时间戳不能添加值

在这里插入图片描述

在这里插入图片描述

XDEL 根据主键(时间戳)删

在这里插入图片描述

XTRIM 截取Stream长度

在这里插入图片描述

XREAD

在这里插入图片描述

语法:

在这里插入图片描述

非阻塞

在这里插入图片描述

阻塞

在这里插入图片描述

总结:

在这里插入图片描述

消费组相关指令

在这里插入图片描述

在这里插入图片描述

XGROUP CREATE 创建消费者组

在这里插入图片描述

XREADGROUP GROUP 读取消费者组内的消息

在这里插入图片描述

同一组消费者不能消费同一条消息

在这里插入图片描述

不同消费组的消费者可以消费同一条消息

在这里插入图片描述

消费组的目的是 让组内的多个消费者共同分担读取消息,所以,我们通常会让每个消费组读取部分消息,从而实现消息读取负载在多个消息者间是均衡分布的。

在这里插入图片描述

重点问题

在这里插入图片描述

XPENDING

在这里插入图片描述

已读取,但尚未确认

在这里插入图片描述

查看具体读取了哪些数据

在这里插入图片描述

XACK

在这里插入图片描述

XINFO

在这里插入图片描述

四个特殊符号

在这里插入图片描述

4.10 bitfield的常用命令

介绍

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

基本命令

在这里插入图片描述

get

在这里插入图片描述

set

在这里插入图片描述

incrby

在这里插入图片描述

溢出控制

在这里插入图片描述

wrap循环溢出

在这里插入图片描述

sat

在这里插入图片描述

fall

在这里插入图片描述

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值