Redis上一章教程请查看:redis备份、安全和基准测试
这一章redis教程主要讨论redis客户端连接、管道和redis分区。
一、redis客户端连接【redis客户端连接、管道和redis分区】当接受新的客户端连接时,将执行以下操作:
- 由于Redis使用多路复用和非阻塞I/O,所以客户端套接字处于非阻塞状态。
- 设置TCP_NODELAY选项是为了确保连接中没有延迟。
- 创建一个可读的文件事件,以便Redis能够在套接字上读取新数据时收集客户端查询。
在Redis配置(Redis. conf)中有一个名为maxclients的属性,它描述可以连接到Redis的最大客户端数量,下面是命令的基本语法。
默认情况下此属性被设置为10000(取决于操作系统的最大文件描述符数量限制),不过你可以更改此属性。在下面的示例中,我们在启动服务器时将客户机的最大数量设置为100000。
redis-server --maxclients 100000
2、客户端所有命令
编号 | 命令 | 描述 |
1 | CLIENT LIST | 返回连接到Redis服务器的客户端列表 |
2 | CLIENT SETNAME | 为当前连接分配一个名称 |
3 | CLIENT GETNAME | 返回由客户端SETNAME设置的当前连接的名称 |
4 | CLIENT PAUSE | 这是一个连接控制命令,能够在指定的时间内挂起所有的Redis客户端(以毫秒为单位) |
5 | CLIENT KILL | 此命令关闭给定的客户端连接。 |
- 客户端向服务器发送一个查询,并从套接字(通常以阻塞的方式)读取服务器响应。
- 服务器处理命令并将响应发送回客户端。
$(echo -en "PING\r\n SET mky redis\r\nGET mky\r\nINCR
visitor\r\nINCR visitor\r\nINCR visitor\r\n";
sleep 10) | nc localhost 6379
+PONG
+OK
redis
:1
:2
:3
在上面的例子中我们将使用PING命令检查Redis连接,我们设置了一个名为mky的字符串值为redis,然后我们将得到该键值并将访问者数量增加三倍。在结果中我们可以看到所有命令都被提交给了Redis一次,并且Redis在单个步骤中提供了所有命令的输出。
2、管道的好处
这种管道技术的好处是极大地改进了协议的性能,通过管道连接到本地主机的速度提高了5倍,而在较慢的internet连接中提高了至少100倍。
三、redis分区1、分区的好处
(1)可以使用更大的数据库。
(2)它允许将计算能力扩展到多核和多台计算机,将网络带宽扩展到多台计算机和网络适配器。
2、分区的缺点
(1)涉及多个键的操作通常不受支持。例如如果两个集合存储在映射到不同Redis实例的键中,则无法执行它们之间的交集。
(2)涉及多个key的Redis事务不能使用。
(3)分区粒度是键。
(4)使用分区时,数据处理更加复杂。如必须处理多个RDB/AOF文件,为了获得数据备份,你需要聚合来自多个实例和主机的持久性文件。
(5)添加和删除容量可能非常复杂。如Redis集群支持基本透明的数据再平衡,能够在运行时添加和删除节点,但是其他系统(如客户端分区和代理)不支持此功能,一种称为预分片的技术在这方面有所帮助。
3、分区的类型
在Redis中有两种类型的分区。假设我们有四个Redis实例,R0、R1、R2、R3和许多表示用户的键如u1、u2、…等等。
- 范围分区。范围分区是通过将对象的范围映射到特定的Redis实例来完成的,假设在我们的示例中,从ID 0到ID 10000的用户将进入实例R0,而从ID 10001到ID 20000的用户将进入实例R1,以此类推。
- 散列分区。散列函数将key转换为数字并且存储在不同的Redis实例中。
推荐阅读
- java操作redis详解介绍
- redis备份、安全和基准测试介绍
- redis脚本命令、连接命令和redis服务器命令
- PHP基本语法经典指南
- 如何在Java中将元素添加到数组()
- D3.js arc.innerRadius()函数用法介绍
- 希尔密码指南和代码实现详解
- 在C++中使用STL进行数组的所有排列
- 道德黑客简要概论