Redis学习记录(2)

一、前文回顾

在上一篇文章中简单的介绍了为什么会出现Redis以及如何安装Redis,同时也简单的说明了一些常见的数据结构是如何使用的。这篇文章将会继续学习Redis相关知识。

二、Redis高级数据结构

前文中简单讲解了String和List两种,接下来将要讲解一下Redis中相对高级的结构。

1、BitMap

(1)概念

Redis bitmaps are an extension of the string data type that lets you treat a string like a bit vector. You can also perform bitwise operations on one or more strings.
译文:Redis位图是字符串数据类型的扩展,可以将字符串视为位向量。您还可以对一个或多个字符串执行逐位操作。

(2)使用方式
设置key:SETBIT key offset value
获取key:GETBIT key offset
统计长度:BITCOUNT **key **[start end [BYTE | BIT]]

image.png
(bit:也就是位,只有0和1)
(3)使用场景
场景1:电商举办活动,参与每日打卡超过一定次数可以领取奖品,此时就可以使用bitmap来处理
key可以是用户ID,offset(偏移量,可以设置定为从那天开始),value:1表示打卡 2:表示未打卡。
当然也可以使用数据库来实现这一需求,只不过是两者在实现的成本上有所不同。以打卡一个月为例,bitmap最多只需要30bit就可以存储,数据库可能就需要30条数据。同时bitmap可以支持任意范围的搜索(数据库也可以只不过是效率相对较低)
场景2(摘自官网):假设在现场部署了1000个传感器,标记为0-999。您希望快速确定给定的传感器是否在一小时内ping了服务器。(当然用数据库也可以实现)

2、HyperLogLog

(1)概念

HyperLogLog is a data structure that estimates the cardinality of a set. As a probabilistic data structure, HyperLogLog trades perfect accuracy for efficient space utilization.
The Redis HyperLogLog implementation uses up to 12 KB and provides a standard error of 0.81%.
译文:HyperLogLog是一种估计集合基数的数据结构。作为一种概率数据结构,HyperLogLog以完美的精度换取高效的空间利用率。Redis HyperLogLog实现最多使用12 KB,并提供0.81%的标准错误。

(HyperLogLog可以估计最多包含18446744073709551616(2^64)个成员的集合的基数),HyperLogLog有点类似于Java中的Set
(2)使用方式
常见命令:
PFADD key value
PFCOUNT key
image.png
(3)使用场景
HyperLogLog多用于估算,既然是估算所有有一定的错误率,所以HyperLogLog多用于对数据准确性没有那么高要求的场景。
场景:统计用户访问量(UV,同一用户一天内只计算一次)
实现方式一:基于数据库
优点:数据准确
缺点:效率相对较低
实现方式二:采用Redis的 HyperLogLog
优点:效率高,占用空间小,最大12KB。
缺点:可能存在一定误差
不过对于UV来说,并不一定要求十分准确的数据,允许存在一定的误差。

3、geospatial

(1)概念

Redis geospatial indexes let you store coordinates and search for them. This data structure is useful for finding nearby points within a given radius or bounding box.
Redis地理空间索引允许您存储坐标并进行搜索。此数据结构对于查找给定半径或边界框内的附近点很有用。

(2)使用方式
常用命令:
GEOADD key [NX | XX] [CH] longitude latitude member [longitude latitude member …]
GEODIST key member1 member2 [M | KM | FT | MI]
完整命令:https://redis.io/commands/?group=geo
image.png
(3)使用场景
例如社交软件做附近的人,就可以使用geospatial,当然用数据库也可以实现。还是那句话成本问题

(暂时先介绍这么多相对使用较多的高级数据结构,当然还有Stream、Streams tutorial,相对用的,以后再补充)

三、Redis高级部分

1、管道

(1)概念

Redis pipelining is a technique for improving performance by issuing multiple commands at once without waiting for the response to each individual command. Pipelining is supported by most Redis clients.
Redis流水线是一种通过一次发出多个命令而无需等待每个命令的响应来提高性能的技术。大多数Redis客户端都支持流水线。

例如我们要对一个Key执行3个命令+1的命令,如果没有管道技术,我们将这样做
image.png
使用了管道技术之后:
image.png

2、发布订阅(Pub/Sub)

(1)概念:Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。
Redis 客户端可以订阅任意数量的频道。
(2)使用:
第一步:创建一个订阅频道
image.png
订阅者中有3个参数
消息是一个有三个元素的多块响应 。

  • 如果参数1为:subscribe 表示我们成功订阅到响应的;第二个元素提供的频道;第三个参数代表我们现在订阅的频道的数量。
  • 如果参数1为unsubscribe:表示我们成功取消订阅到响应;第二个元素提供的频道;第三个参数代表我们目前订阅的频道的数量。当最后一个参数是0的时候,我们不再订阅到任何频道。当我们在Pub/Sub以外状态,客户端可以发出任何redis命令。
  • 如果参数1:为:message: 这是另外一个客户端发出的发布命令的结果。第二个元素是来源频道的名称,第三个参数是实际消息的内容。

第二步:再开启一个Redis客户端在该频道上发布消息
image.png
此时再看第一个Redis客户端
image.png
至此我们就完成了一个简单的发布订阅,当然Redis中的Pub/Sub模式只能用作简单的发布订阅,和专业的发布订阅组件,例如消息队列还是有很大差别的。例如没有持久化,数据丢失之后很难恢复,所以只能用于简单的发布订阅。

四、小结

本文介绍一些Redis中相对较高级的部分,当然还有很多方面是没有涉及到的,接下来的文章也会继续介绍Redis高级部分,希望对你有所帮助,未完待续。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值