当前位置:网站首页>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实例中。注:模运算是除法的余数,在许多编程语言中通常由%运算符实现。
边栏推荐
- The interviewer asked me TCP three handshake and four wave, I really
- C语言指针详解
- 一文了解大厂的DDD领域驱动设计
- 再见了繁琐的Excel,掌握数据分析处理技术就靠它了
- C语言实验四 循环结构程序设计(一)
- Distributed transaction processing solution big PK!
- 剑指offer基础版--- 第23天
- Kubernetes加入集群的TOKEN值过期
- Unity mobile game performance optimization series: performance tuning for the CPU side
- MYSQL下载及安装完整教程
猜你喜欢

剑指offer专项突击版 ---- 第 6 天

Anaconda配置环境指令

Centos7 install mysql5.7

docker安装postgresSQL和设置自定义数据目录

面试官竟然问我怎么分库分表?幸亏我总结了一套八股文

精解四大集合框架:List 核心知识总结

About the problems encountered by Xiaobai installing nodejs (npm WARN config global `--global`, `--local` are deprecated. Use `--location=glob)

剑指offer专项突击版 --- 第 4 天

MySQL8.0安装教程,在Linux环境安装MySQL8.0教程,最新教程 超详细

On-line monitoring system for urban waterlogging and water accumulation in bridges and tunnels
随机推荐
剑指offer基础版 ----- 第28天
第7章 网络层第1次练习题答案(第三版)
剑指offer基础版 ---- 第27天
Typec手机有线网卡网线转网口转接口快充方案
质量小议12 -- 以测代评
C语言实验三 选择结构程序设计
剑指offer基础版 --- 第24天
剑指offer基础版 ---- 第26天
The interviewer asked me how to divide the database and the table?Fortunately, I summed up a set of eight-part essays
Unity resources management series: Unity framework how to resource management
Centos7 install mysql5.7
数据库上机实验4 数据更新和视图
Paginate the list collection and display the data on the page
mysql5.7.35安装配置教程【超级详细安装教程】
The interviewer asked me TCP three handshake and four wave, I really
Anaconda configure environment directives
工作流编排引擎-Temporal
Flink sink redis 写入Redis
Redis Advanced - Cache Issues: Consistency, Penetration, Penetration, Avalanche, Pollution, etc.
“档次法”——用于物品体积分布不均匀的01背包问题的求解方法