当前位置:网站首页>Redis管道技术/分区
Redis管道技术/分区
2022-07-31 05:09:00 【黎燃(主号)】
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
+OK
redis
: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"
end
def without_pipelining
r = Redis.new
10000.times {
r.ping
}
end
def with_pipelining
r = Redis.new
r.pipelined {
10000.times {
r.ping
}
}
end
bench("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实例中。注:模运算是除法的余数,在许多编程语言中通常由%运算符实现。
边栏推荐
- 梳理一下自己常用的快捷键
- 剑指offer专项突击版 --- 第 3 天
- Redis Advanced - Cache Issues: Consistency, Penetration, Penetration, Avalanche, Pollution, etc.
- Redis 事务学习有感
- [MQ I can speak for an hour]
- C语言教程(一)-准备
- 剑指offer基础版 ----- 第28天
- ES source code API call link source code analysis
- Qt Creator + CMake 运行调试总会自动 build 所有目标
- Centos7 install mysql5.7
猜你喜欢
面试官:生成订单30分钟未支付,则自动取消,该怎么实现?
Temporal客户端模型
Typec手机有线网卡网线转网口转接口快充方案
The interviewer asked me TCP three handshake and four wave, I really
分布式事务——分布式事务简介、分布式事务框架 Seata(AT模式、Tcc模式、Tcc Vs AT)、分布式事务—MQ
Interview Redis High Reliability | Master-Slave Mode, Sentinel Mode, Cluster Cluster Mode
Sword Point Offer Special Assault Edition ---- Day 2
Apache DButils使用注意事项--with modifiers “public“
<urlopen error [Errno 11001] getaddrinfo failed>的解决、isinstance()函数初略介绍
基于web3.0使用钱包Metamask的三方登陆
随机推荐
分布式事务——分布式事务简介、分布式事务框架 Seata(AT模式、Tcc模式、Tcc Vs AT)、分布式事务—MQ
MYSQL一站式学习,看完即学完
剑指offer基础版 ---- 第26天
Goodbye to the cumbersome Excel, mastering data analysis and processing technology depends on it
Linux的mysql报ERROR 1045 (28000) Access denied for user ‘root‘@‘localhost‘ (using password NOYSE)
第7章 网络层第2次练习题答案(第三版)
Distributed Transactions - Introduction to Distributed Transactions, Distributed Transaction Framework Seata (AT Mode, Tcc Mode, Tcc Vs AT), Distributed Transactions - MQ
Swordsman Offer Special Assault Edition --- Day 3
剑指offer基础版 --- 第21天
The TOKEN value of Kubernetes joining the cluster expires
限流的原理
剑指offer基础版 ----- 第25天
Centos7 install mysql5.7
【MQ我可以讲一个小时】
梳理一下自己常用的快捷键
Three handshakes and four waves
matlab simulink欠驱动水面船舶航迹自抗扰控制研究
MySQL (updating)
面试官:生成订单30分钟未支付,则自动取消,该怎么实现?
docker安装postgresSQL和设置自定义数据目录