写点什么

Redis 管道技术 / 分区

作者:黎燃
  • 2022 年 7 月 23 日
  • 本文字数:1510 字

    阅读完需:约 5 分钟

Redis管道技术/分区

Redis 管道技术

Redis 是一种基于客户机-服务器模型和请求/响应协议的 TCP 服务。这意味着请求通常将遵循以下步骤:客户端向服务器发送查询请求,并侦听套接字返回,通常处于阻塞模式,等待服务器响应。服务器处理该命令并将结果返回给客户端。Redis 管道技术允许客户端在服务器没有响应时继续向服务器发送请求,最后一次读取所有服务器的响应。

实例

要查看 redis 管道,只需启动 redis 实例并输入以下命令:


$(echo -en "PING\r\n SET runoobkey redis\r\nGET runoobkey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379
+PONG+OKredis:1:2:3
复制代码


在上面的示例中,我们使用 ping 命令检查 redis 服务是否可用。然后我们将 runoobkey 的值设置为 redis,然后我们得到 runoobkey 的值,并使访问者自动增加三倍。在返回的结果中,我们可以看到这些命令一次提交到 redis 服务,最后一次读取所有服务器的响应管道技术最显著的优势是提高 redis 服务的性能。一些测试数据


require 'rubygems' require 'redis'def bench(descr) start = Time.now yield puts "#{descr} #{Time.now-start} seconds" enddef without_pipelining r = Redis.new 10000.times {     r.ping } enddef with_pipelining r = Redis.new r.pipelined {     10000.times {         r.ping     } } endbench("without pipelining") {     without_pipelining } bench("with pipelining") {     with_pipelining }
复制代码


在接下来的测试中,我们将使用 redis 的 Ruby 客户端来支持流水线技术的特性,并测试流水线技术的提速效果。在局域网中的 Mac OS X 系统上执行的上述简单脚本的数据表明,在开启管道操作后,往返延迟已显著改善。

Redis

分区是将数据划分为多个 redis 实例的过程,因此每个实例只保存密钥的子集。分区的优势通过使用多台计算机的内存总和,我们可以构建一个更大的数据库。通过多核和多台计算机,我们可以扩展我们的计算能力;通过多台计算机和网络适配器,我们可以扩展网络带宽。分区不足 redis 的一些功能在分区方面表现不佳:通常不支持涉及多个键的操作。例如,当两个集合映射到不同的 redis 实例时,您无法对这两个集合执行交集操作。不能使用涉及多个密钥的 Redis 事务。使用分区时,数据处理更加复杂。例如,您需要处理多个 rdb/aof 文件,并备份来自多个实例和主机的持久文件。添加或删除容量也很复杂。大多数 redis 集群支持在运行时添加和删除节点的透明数据平衡,但其他系统(如客户端分区和代理)不支持此功能。然而,一种叫做预硬化的技术是有帮助的。

分区类型

Redis 有两种类型的分区。假设有四个 redis 实例 R0、R1、R2、R3 和多个键代表用户,例如 user:1 和 user:2。对于给定的键,有许多不同的方法来选择该键存储在哪个实例中。换句话说,有不同的系统将密钥映射到 redis 服务。

范围分区

最简单的分区方法是按范围,即将特定范围内的对象映射到特定的 redis 实例。例如,ID 为 0 到 10000 的用户将保存到实例 R0,ID 为 10001 到 20000 的用户将保存到 R1,依此类推。该方法是可行的,可以在实践中使用。缺点是有一个从区间范围到实例的映射表。此表需要管理。同时,它还需要各种对象的映射表,这通常不是 redis 的好方法。

哈希分区

另一种分区方法是哈希分区。这适用于任何键,并且不需要是对象名称:该形式与以下描述一样简单:使用哈希函数将密钥转换为数字,例如,使用 CRC32 哈希函数。在键 foobar 上执行 CRC32(foobar)将输出一个类似于 93024922 的整数。取这个整数的模并将其转换为 0 到 3 之间的数字,然后这个整数可以映射到四个 redis 实例之一。93024922%4=2,这意味着键 foobar 应该保存在 R2 实例中。注:模运算是除法的余数,在许多编程语言中通常由 %运算符实现。



发布于: 2 小时前阅读数: 7
用户头像

黎燃

关注

前端工程师 2022.05.06 加入

专注学习分享前端知识。

评论

发布
暂无评论
Redis管道技术/分区_7月月更_黎燃_InfoQ写作社区