全部教程·
数据库·
Redis
[目录]
·
Redis 管道技术
Redis 教程
Redis 安装教程
Redis 安装 Redis 配置 Redis 命令运行Redis 数据类型
Redis 数据类型 Redis 键(Key) Redis 字符串(String) Redis 哈希(Hash) Redis 列表(List) Redis 集合(Set) Redis 有序集合(ZSet)Redis 高级教程
Redis 连接 Redis 事务 Redis 服务器 Redis 发布订阅 Redis 脚本 Redis HyperLogLog Redis GEO Redis Stream Redis 备份与恢复 Redis 安全 Redis 性能测试 Redis 客户端连接 Redis 管道技术 Redis 分区/分片 Java 使用 Redis PHP 使用 RedisRedis 命令参考
Redis 命令手册 Redis DEL 命令 Redis EXISTS 命令 Redis EXPIRE 命令 Redis KEYS 命令 Redis TTL 命令 Redis RANDOMKEY Redis SET 命令 Redis GET 命令 Redis MGET 命令 Redis MSET 命令 Redis INCR 命令 Redis DECR 命令 Redis APPEND 命令 Redis HDEL 命令 Redis HEXISTS 命令 Redis HGET 命令 Redis HLEN 命令 Redis HSET 命令 Redis LPUSH 命令 Redis LPOP 命令 Redis LLEN 命令 Redis RPOP 命令 Redis RPUSH 命令 Redis SADD 命令 Redis SISMEMBER 命令 Redis SPOP 命令 Redis ZADD 命令 Redis ZRANGE 命令 Redis ZRANK 命令
Redis 教程
Redis 安装教程
Redis 安装 Redis 配置 Redis 命令运行Redis 数据类型
Redis 数据类型 Redis 键(Key) Redis 字符串(String) Redis 哈希(Hash) Redis 列表(List) Redis 集合(Set) Redis 有序集合(ZSet)Redis 高级教程
Redis 连接 Redis 事务 Redis 服务器 Redis 发布订阅 Redis 脚本 Redis HyperLogLog Redis GEO Redis Stream Redis 备份与恢复 Redis 安全 Redis 性能测试 Redis 客户端连接 Redis 管道技术 Redis 分区/分片 Java 使用 Redis PHP 使用 RedisRedis 命令参考
Redis 命令手册 Redis DEL 命令 Redis EXISTS 命令 Redis EXPIRE 命令 Redis KEYS 命令 Redis TTL 命令 Redis RANDOMKEY Redis SET 命令 Redis GET 命令 Redis MGET 命令 Redis MSET 命令 Redis INCR 命令 Redis DECR 命令 Redis APPEND 命令 Redis HDEL 命令 Redis HEXISTS 命令 Redis HGET 命令 Redis HLEN 命令 Redis HSET 命令 Redis LPUSH 命令 Redis LPOP 命令 Redis LLEN 命令 Redis RPOP 命令 Redis RPUSH 命令 Redis SADD 命令 Redis SISMEMBER 命令 Redis SPOP 命令 Redis ZADD 命令 Redis ZRANGE 命令 Redis ZRANK 命令Redis 管道技术
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:
- 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
- 服务端处理命令,并将结果返回给客户端。
1. Redis 管道技术
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 的值并使得 visitor 自增 3 次。
在返回的结果中我们可以看到这些命令一次性向 redis 服务提交,并最终一次性读取所有服务端的响应
2. 管道技术的优势
管道技术最显著的优势是提高了 redis 服务的性能。
在下面的测试中,我们将使用Redis的Ruby客户端,支持管道技术特性,测试管道技术对速度的提升效果。
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
}
从处于局域网中的Mac OS X系统上执行上面这个简单脚本的数据表明,开启了管道操作后,往返延时已经被改善得相当低了。
without pipelining 1.185238 seconds with pipelining 0.250783 seconds
如你所见,开启管道后,我们的速度效率提升了5倍。
下一章:Redis 分区/分片
Redis 分区也叫分片,是把数据分割到多个 Redis 实例的处理过程,因此每个 Redis 实例只保存 key 的一个子集。1. 分区的优势:通过利用多台计算机内存的和值,允许我们构造更大的数据库。2. 分区的不足:涉及多个key的操作通常是不被支持的。举例来说,当两个set映射到不同的redis范例上时,你就不能对这两个set执行交集操作。3. 分区类型< :范围法分区 和 哈希法分区。
AI 中文社