redis 高级
redis备份与恢复
redis备份
基本语法:save
实例:
1 127.0.0.1:6379> save 2 OK
该命令将在redis安装目录中创建dump.rdb文件。
恢复数据
如果需要恢复数据,只需要将备份文件(dump.rdb)移动到redis安装目录并启动服务即可,获取redis目录可以使用config命令,如下所示:
1 127.0.0.1:6379> config get dir 2 1) "dir" 3 2) "/usr/local/redis"
以上命令输出为redis的安装目录为/usr/local/redis
bgsave命令
创建爱你redis备份文件也可以使用命令bgsave,该命令在后台执行。
实例:
1 127.0.0.1:6379> bgsave 2 Background saving started
备份文件内容为:
redis 安全
我们可以通过redis的配置文件设置密码参数,这样客户端连接到redis服务就需要密码验证,这样可以让你的redis服务更安全。
实例:
我们可以通过以下命令查看是否设置了密码验证:
1 127.0.0.1:6379> config get requirepass 2 1) "requirepass" 3 2) "123456" 4 127.0.0.1:6379> config set requirepass "shidong" 5 OK 6 127.0.0.1:6379> config get requirepass 7 1) "requirepass" 8 2) "shidong"
设置密码后,客户端连接redis服务就需要密码验证,否则无法执行命令。
语法:auth命令基本语法格式:
1 auth password
实例:
[root@bogon redis]# ./bin/redis-cli -p 6379 127.0.0.1:6379> ping (error) NOAUTH Authentication required. 127.0.0.1:6379> auth shidong OK 127.0.0.1:6379> ping PONG
redis 性能测试
redis性能测试是通过同时执行多个命令实现的。
语法 :redis-benchmark 【option】 【option value】
实例:以下实例同时执行1000个请求来检测性能:
1 [root@www bin]# ./redis-benchmark -n 1000000
1 ====== MSET (10 keys) ====== 2 10000 requests completed in 0.08 seconds 3 50 parallel clients 4 3 bytes payload 5 keep alive: 1 6 7 100.00% <= 0 milliseconds 8 129870.13 requests per second
redis 性能测试工具可选参数如下所示:
1 -h 指定服务器主机名 2 -p 指定服务器端口 3 -s 指定服务器socket 4 -c 指定并发连接数 5 -n 指定请求数 6 -d 以字节的形式指定set/get值的数据大小 7 -k 1= keep alive 0=reconnect 8 -r set/get/incr 使用随机key,sadd使用随机值。 9 -P 通过管道传输<numreq>请求 10 -q 强制退出redis,仅显示query/sec值 11 --csv 以CSV格式输出。 12 -l 生成循环,永久执行测试。 13 -t 仅运行以逗号分隔的测试命令列表。 14 -l ldle模式,仅打开N个idle连接并等待。
实例:
1 [root@www bin]# ./redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 100000 -q 2 SET: 207039.33 requests per second 3 LPUSH: 215982.72 requests per second
以上实例中主机为127.0.0.1,端口号为6379,执行的命令为set,lpush。请求数为10000,通过-q
参数让结果只显示每秒执行的请求数
redis客户端连接
redis通过监听一个TCP端口或者Unix socket 的方式来接受来自客户端的连接,当一个连接建立后,redis内部会进行以下一些
操作:
首先:客户端socket会被设置为非阻塞模式,因为redis在网络时间上采用的是非阻塞多路复用模型。
然后为这个socket设置tcp_nodelay属性,禁用nagle算法
然后创建一个可读的文件事件用于监听这个客户端socket的数据发送
最大连接数:
在redis2.4中,最大连接数是被直接硬编码在代码里面的,而在2.6版本中这个值变成可配置的。
maxclients的默认值是10000,你也可以在redis.conf中对这个值进行修改。
客户端命令:
client list 命令:返回连接到redis服务的客户端列表
1 127.0.0.1:6379> client list 2 id=395381 addr=192.168.1.246:52692 fd=7 name=sentinel-c5d85dc2-pubsub age=54107 idle=0 flags=N db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=130 obl=0 oll=0 omem=0 events=r cmd=subscribe 3 id=394704 addr=192.168.1.246:51661 fd=6 name=sentinel-c5d85dc2-cmd age=54467 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=publish 4 id=504323 addr=127.0.0.1:40675 fd=8 name= age=160 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
client setname 命令:设置当前链接的名称。
1 127.0.0.1:6379> client setname shidong 2 OK 3 127.0.0.1:6379> client list 4 id=395381 addr=192.168.1.246:52692 fd=7 name=sentinel-c5d85dc2-pubsub age=54239 idle=2 flags=N db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=130 obl=0 oll=0 omem=0 events=r cmd=subscribe 5 id=394704 addr=192.168.1.246:51661 fd=6 name=sentinel-c5d85dc2-cmd age=54599 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping 6 id=504323 addr=127.0.0.1:40675 fd=8 name=shidong age=292 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
client getname命令:获取通过client setname命令设置的服务名称
1 127.0.0.1:6379> client getname 2 "shidong"
client pause 命令:挂起客户端连接,指定挂起的时间以毫秒计
1 127.0.0.1:6379> client pause 100000 2 OK 3 127.0.0.1:6379> keys * 4 1) "name" 5 2) "db_number" 6 (98.71s)
client kill 命令:关闭客户端连接
1 127.0.0.1:6379> client kill 127.0.0.1:40675 2 OK 3 127.0.0.1:6379> client list #当前客户端连接已关闭 4 NOAUTH Authentication required.
redis管道技术:redis是一种基于客户端——服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:
1、客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
2、服务端处理命令,并将结果返回给客户端。
redis管道技术可以在服务器未响应时,客户端可以继续想服务端发送请求,并最终一次性读取所有服务的的响应。
实例:
1 [root@bogon 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 2 +PONG 3 +OK 4 $5 5 redis 6 :1 7 :2 8 :3 9 [root@bogon redis]# ./bin/redis-cli -p 6379 10 127.0.0.1:6379> keys * 11 1) "runoobkey" 12 2) "visitor"
管道技术的优势:管道技术最显著的优势是提高了redis服务的性能。
redis 分区
分区是分割数据到多个redis实例的处理过程,因为每个实例只保存key的一个子集。
分区的优势:
通过利用多态计算机内存的和值,允许我们构造更大的数据库。
通过多核和多台计算机,允许我们扩展计算能力;通过多台计算机和网络适配器,允许我们扩展网络带宽。
分区的不足
redis的一下特性在分区方面表现的不是很好:
1、涉及多个key的操作通常是不被支持的。举例来说,当两个set映射到不同的redis实例上时,你就不能对这两个set执行交集操作。
2、涉及多个key的redis事务不能使用。
3、当使用分区时,数据处理较为复杂,比如你需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件。
4、增加或删除容量也比较复杂。redis集群大多数支持在运行时增加、删除节点的透明数据平衡的能力,但是类似于客户端分区、代理等其他系统则不支持这项特性。
然而,一种叫做presharding的技术对此是有帮助的。
分区类型
redis有两种类型分区。加入有4个redis实例R0、R1、R2、R3,和类似user:1,user:2这样的表示用户的多个key,对既定的key有多种不同方式来选择这个key存放
在哪个实例中,也就是说,有不同的系统来映射某个key到某个Redis服务。