Redis——Redis的进阶使用(管道/发布订阅/事务/布隆过滤器)

本文介绍了Redis的进阶使用技巧,包括管道(pipelining)以降低通信成本,发布订阅(Pub/Sub)实现实时消息传递,事务保证数据一致性,以及布隆过滤器用于防止缓存穿透。文章通过实例解释了各个特性的应用场景和工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis的进阶使用

在上一篇文章中我们详解 Redis的 key-value 键值对模型中 value 的细节点,重点在于理解 value 支持的五种数据结构,对于每种数据结构的基本用法(即常用命令),我们还要对每种数据结构的优劣势,以及常用业务场景要做到心中有数

作为缓存之王,Redis 绝对不可能只有这么一点儿功能,下面我们就来学习一下 Redis 的进阶使用

其实从 Redis 官网我们即可学习到所有的用法:http://redis.cn/documentation.html

一、管道(pipelining)

官网:http://redis.cn/topics/pipelining.html

管道是什么概念呢?

如果客户端对 redis 服务进程发出一连串的命令,其实每发一次命令都要走一次数据的传输,执行完返回,返回结果之后才能线性执行第二个命令。这意味着通常情况下一个请求会遵循以下步骤:

  • 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
  • 服务端处理命令,并将结果返回给客户端。

因此,例如下面是4个命令序列执行情况:

  • Client: INCR X
  • Server: 1
  • Client: INCR X
  • Server: 2
  • Client: INCR X
  • Server: 3
  • Client: INCR X
  • Server: 4

客户端和服务器通过 TCP 网络进行连接,无论网络延如何延时,数据包总是能从客户端到达服务器,并从服务器返回数据回复客户端。这个时间被称之为 RTT (Round Trip Time - 往返时间),毫无疑问这种单次发送一个命令会带来大量的往返时间消耗,影响系统性能

此时我们自然而然就想到了一种优化方法——buffer 缓冲区,一次能够传输一批命令,对应在 Redis 中的实现就是管道

一次请求/响应服务器能实现处理新的请求,即使旧的请求还未被响应。这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复,这就是管道(pipelining)

管道使用案例:

$ (printf "PING\r\nPING\r\nPING\r\n"; sleep 1) | nc localhost 6379
+PONG
+PONG
+PONG

这一次我们没有为每个命令都花费了RTT开销,而是只用了一个命令的开销时间。

非常明确的,用管道顺序操作的第一个例子如下:

  • Client: INCR X
  • Client: INCR X
  • Client: INCR X
  • Client: INCR X
  • Server: 1
  • Server: 2
  • Server: 3
  • Server: 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值