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
View Code

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"
View Code

 管道技术的优势:管道技术最显著的优势是提高了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服务。

 

posted @ 2018-01-11 17:14  Just---Do---It  阅读(158)  评论(0编辑  收藏  举报