• 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
     SET runoobkey redis
    GET runoobkey
    INCR visitor
    INCR visitor
    INCR visitor
    "; 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服务。

  • 相关阅读:
    Android之TCP服务器编程
    太阳能锂电池充电电路
    android之WIFI小车编程详述
    java 之UDP编程
    liunx目录/etc下相关配置
    五:ZooKeeper的集群命令客户端的链接和命令操作的使用
    四:ZooKeeper的集群,伪集群,单机的搭建
    三:ZooKeeper的ZAB协议
    二:ZooKeeper术语概念
    一:ZooKeeper简介
  • 原文地址:https://www.cnblogs.com/sd880413/p/8269427.html
Copyright © 2020-2023  润新知