- 浏览: 84266 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (110)
- 异常信息 (3)
- JVM (3)
- Maven (2)
- 安全加密 (4)
- server服务类 (8)
- 前端技术类 (7)
- 设计模式 (2)
- memcached (0)
- mongodb (3)
- pinyin4j (1)
- struts2 (1)
- 杂烩 (26)
- 爬虫 (3)
- Java反射 (2)
- RMI (1)
- Velocity (2)
- node.js (0)
- GIT (4)
- ffmpeg与java (1)
- Spring Boot (0)
- Linux (3)
- Spring (4)
- 七牛云服务 (1)
- shell (2)
- python (0)
- JNI实现Java和其他语言的通信 (0)
- nutz (1)
- zookeeper (1)
- dubbo (0)
- Druid数据库连接池 (1)
- redis (14)
- hessian (0)
- RabbitMQ (0)
- ActiveMQ (1)
- JFinal极速 web 开发框架 (0)
- solr (0)
- jersey【RESTful Web Services in Java】 (0)
- GO学习 (6)
- nginx (1)
- TapeStry (2)
- Disruptor,并发 (1)
- Mybatis (1)
最新评论
-
qii404:
推荐另一个Redis可视化客户端,开源并且跨平台支持,性能可以 ...
redis可视化工具RedisClient使用
Redis 管道技术
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:
客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
服务端处理命令,并将结果返回给客户端。
Redis 管道技术
Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。
实例
查看 redis 管道,只需要启动 redis 实例并输入以下命令:
$(echo -en "PING\r\n SET w3ckey redis\r\nGET w3ckey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379
+PONG
+OK
redis
:1
:2
:3
以上实例中我们通过使用 PING 命令查看redis服务是否可用, 之后我们们设置了 w3ckey 的值为 redis,然后我们获取 w3ckey 的值并使得 visitor 自增 3 次。
在返回的结果中我们可以看到这些命令一次性向 redis 服务提交,并最终一次性读取所有服务端的响应
管道技术的优势
管道技术最显著的优势是提高了 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实例的处理过程,因此每个实例只保存key的一个子集。
分区的优势
通过利用多台计算机内存的和值,允许我们构造更大的数据库。
通过多核和多台计算机,允许我们扩展计算能力;通过多台计算机和网络适配器,允许我们扩展网络带宽。
分区的不足
redis的一些特性在分区方面表现的不是很好:
涉及多个key的操作通常是不被支持的。举例来说,当两个set映射到不同的redis实例上时,你就不能对这两个set执行交集操作。
涉及多个key的redis事务不能使用。
当使用分区时,数据处理较为复杂,比如你需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件。
增加或删除容量也比较复杂。redis集群大多数支持在运行时增加、删除节点的透明数据平衡的能力,但是类似于客户端分区、代理等其他系统则不支持这项特性。然而,一种叫做presharding的技术对此是有帮助的。
分区类型
Redis 有两种类型分区。 假设有4个Redis实例 R0,R1,R2,R3,和类似user:1,user:2这样的表示用户的多个key,对既定的key有多种不同方式来选择这个key存放在哪个实例中。也就是说,有不同的系统来映射某个key到某个Redis服务。
范围分区
最简单的分区方式是按范围分区,就是映射一定范围的对象到特定的Redis实例。
比如,ID从0到10000的用户会保存到实例R0,ID从10001到 20000的用户会保存到R1,以此类推。
这种方式是可行的,并且在实际中使用,不足就是要有一个区间范围到实例的映射表。这个表要被管理,同时还需要各 种对象的映射表,通常对Redis来说并非是好的方法。
哈希分区
另外一种分区方法是hash分区。这对任何key都适用,也无需是object_name:这种形式,像下面描述的一样简单:
用一个hash函数将key转换为一个数字,比如使用crc32 hash函数。对key foobar执行crc32(foobar)会输出类似93024922的整数。
对这个整数取模,将其转化为0-3之间的数字,就可以将这个整数映射到4个Redis实例中的一个了。93024922 % 4 = 2,就是说key foobar应该被存到R2实例中。注意:取模操作是取除的余数,通常在多种编程语言中用%操作符实现。
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:
客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
服务端处理命令,并将结果返回给客户端。
Redis 管道技术
Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。
实例
查看 redis 管道,只需要启动 redis 实例并输入以下命令:
$(echo -en "PING\r\n SET w3ckey redis\r\nGET w3ckey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379
+PONG
+OK
redis
:1
:2
:3
以上实例中我们通过使用 PING 命令查看redis服务是否可用, 之后我们们设置了 w3ckey 的值为 redis,然后我们获取 w3ckey 的值并使得 visitor 自增 3 次。
在返回的结果中我们可以看到这些命令一次性向 redis 服务提交,并最终一次性读取所有服务端的响应
管道技术的优势
管道技术最显著的优势是提高了 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实例的处理过程,因此每个实例只保存key的一个子集。
分区的优势
通过利用多台计算机内存的和值,允许我们构造更大的数据库。
通过多核和多台计算机,允许我们扩展计算能力;通过多台计算机和网络适配器,允许我们扩展网络带宽。
分区的不足
redis的一些特性在分区方面表现的不是很好:
涉及多个key的操作通常是不被支持的。举例来说,当两个set映射到不同的redis实例上时,你就不能对这两个set执行交集操作。
涉及多个key的redis事务不能使用。
当使用分区时,数据处理较为复杂,比如你需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件。
增加或删除容量也比较复杂。redis集群大多数支持在运行时增加、删除节点的透明数据平衡的能力,但是类似于客户端分区、代理等其他系统则不支持这项特性。然而,一种叫做presharding的技术对此是有帮助的。
分区类型
Redis 有两种类型分区。 假设有4个Redis实例 R0,R1,R2,R3,和类似user:1,user:2这样的表示用户的多个key,对既定的key有多种不同方式来选择这个key存放在哪个实例中。也就是说,有不同的系统来映射某个key到某个Redis服务。
范围分区
最简单的分区方式是按范围分区,就是映射一定范围的对象到特定的Redis实例。
比如,ID从0到10000的用户会保存到实例R0,ID从10001到 20000的用户会保存到R1,以此类推。
这种方式是可行的,并且在实际中使用,不足就是要有一个区间范围到实例的映射表。这个表要被管理,同时还需要各 种对象的映射表,通常对Redis来说并非是好的方法。
哈希分区
另外一种分区方法是hash分区。这对任何key都适用,也无需是object_name:这种形式,像下面描述的一样简单:
用一个hash函数将key转换为一个数字,比如使用crc32 hash函数。对key foobar执行crc32(foobar)会输出类似93024922的整数。
对这个整数取模,将其转化为0-3之间的数字,就可以将这个整数映射到4个Redis实例中的一个了。93024922 % 4 = 2,就是说key foobar应该被存到R2实例中。注意:取模操作是取除的余数,通常在多种编程语言中用%操作符实现。
发表评论
-
redis之安全&性能&客户端连接
2016-07-11 14:13 852redis安全 我们可以通过 ... -
rerfis之备份与恢复
2016-07-11 13:42 529save 命令用于创建当前数据库的备份。 该命令将在 red ... -
redis之事务
2016-07-11 13:17 443Redis 事务可以一次执行多个命令, 并且带有以下两个重要的 ... -
redis之发布订阅
2016-07-11 11:42 508Redis 发布订阅(pub/sub)是一种消息通信模式:发送 ... -
redis数据类型之有序集合 sorted set
2016-07-11 11:09 776Redis 有序集合(sorted set) Redis 有序 ... -
redis数据类型之set常用操作
2016-07-08 13:51 352Redis的Set是string类型的无序集合。集合成员是唯一 ... -
redis数据类型之list常用操作
2016-07-08 11:38 557Redis 的list 列表类型 是 ... -
简单的利用Jedis连接redis操作数据库
2016-07-07 16:37 557首先添加jar包 public static ... -
redis数据类型之hash
2016-07-07 13:39 471Redis的hash 是一个string类型的field和 ... -
redis数据类型操作之String类型常用操作
2016-07-07 11:52 527redis 127.0.0.1:6379> set ... -
redis的key操作
2016-07-07 11:10 557redis 127.0.0.1:6379> se ... -
redis可视化工具RedisClient使用
2016-07-05 16:32 2983首页我先把redis的密码设置为:123456 redis 1 ... -
redis 在windows 上安装
2016-07-05 11:12 494第一步认识redis Redis是一个开源的,先进的 k ...
相关推荐
在IT行业中,Redis和Kafka是两种非常重要的开源软件,分别作为内存数据存储和消息中间件服务于各种系统架构。本文将详细介绍如何搭建Redis和Kafka环境,并探讨它们各自的核心特性和应用场景。 首先,我们来了解...
6. **Redis集群**:当单机Redis无法满足需求时,可以搭建Redis Cluster集群,实现数据分区和负载均衡。集群的搭建、数据分布、故障处理等都是集群部分的重点。 7. **Redis在缓存中的应用**:Redis作为缓存,能有效...
4. **集群搭建**:使用 Redis Cluster 实现数据分区,提高系统的扩展性和容错性。 ### 结语 RedisDesktopManager 作为一款强大的 Redis GUI 工具,极大地简化了 Redis 的日常管理任务。无论是开发者还是运维人员,...
Redis Cluster是Redis的分布式解决方案,可以将数据分布在多个节点上,提供自动的数据分区和故障恢复。手册将详述如何搭建和管理Redis Cluster,包括槽(Slots)的概念和节点间通信。 七、安全与性能优化 Redis的...
- **操作 Redis Cluster Connection**:提供了专门的方法来操作集群连接,包括节点发现、数据分区等功能。 - **模板和集群操作**:利用 `RedisTemplate` 类和集群操作方法,可以在集群环境中执行复杂的 CRUD 操作。 ...
3. **集群**:Redis Cluster是Redis的官方集群解决方案,可实现数据分区和故障转移,适合大规模部署。 4. **内存管理**:由于Redis完全驻留在内存中,因此需要关注内存使用情况,避免内存溢出。 5. **安全**:虽然...
- **管道技术(Pipelining)**:批量发送多条命令减少通信开销。 - **分区(Partitioning)**:实现大规模数据的分布式存储。 #### 七、Redis在不同开发环境的应用 - **Java使用Redis**:通过Jedis、Lettuce等...
- 支持Redis的管道功能,可以批量执行命令以提高性能。 8. **脚本执行**: - 支持编写和执行Lua脚本以实现复杂逻辑。 9. **支持类**: - 提供了一些辅助类来简化特定任务的操作。 #### 七、响应式Redis支持 1...
1. Redis客户端的基本语法 2. 测试客户端的连通情况 3. 连接远程的redis服务 5. 管道技术 6. 分区技术 1. Redis客户端的基本语法
7. Kafka与Redis的集成:如何将Redis作为Kafka的消费者,或者在Kafka和Redis之间构建数据管道,实现数据的高效流转。 对于Java和大数据开发人员来说,理解和掌握Kafka和Redis是非常有价值的。Kafka可以帮助实现大...
- **使用管道(Pipeline)技术**:批量发送命令,减少网络开销。 - **启用压缩**:对于大型数据对象启用压缩。 - **优化持久化策略**:合理配置持久化策略,平衡数据安全性和性能。 #### 23. Redis的缓存更新...
缺点是只能使用0号数据库,且不支持管道技术。 - **基于客户端分片**:客户端根据算法计算key归属的节点,易于扩展,但需要修改客户端代码。 - **基于代理分片**:如 Codis、Twemproxy,代理服务器负责数据路由,...
### Redis开发详细介绍 ...通过深入学习Redis的开发技术,开发者不仅能够构建出高性能、可扩展的应用程序,还能够显著提升自身的专业技能。希望本文能够为读者提供有益的指导,助力大家在Redis开发领域取得更多成就。
- **资源管理**:在资源管理方面,Redis 和 MongoDB 都提供了自动分区、数据备份与恢复等功能,以保证系统的稳定运行。 #### 结论 综上所述,Redis 和 MongoDB 作为两种流行的NoSQL 数据库,在不同的应用场景中...
Kafka将数据以主题(Topic)的形式保存,并且每个主题都有多个分区(Partition),保证了并行处理能力。Kafka的高吞吐量和持久化机制使得它在大数据传输和日志收集领域非常受欢迎。 **MySQL** MySQL是一种关系型...
3. **Redis**: Redis是一个高性能的键值存储系统,常用于缓存和消息队列。了解其数据类型(如String、Hash、List、Set、Sorted Set),以及发布/订阅、事务和持久化机制。 4. **Kafka**: Kafka是一个高吞吐量的...
总结,这个基于 Springboot、Redis 和 Kafka 的秒杀系统,通过集成多种技术手段,实现了高效、稳定的秒杀功能。乐观锁保证了数据一致性,Redis 缓存减轻了数据库压力,Kafka 实现了异步处理和限流,整体设计考虑了高...
Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。 ### 编程模型 Jedis中的方法调用是比较底层的暴露的Redis的API,也即...