Redis4 - 管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/njys1/article/details/82795893
  • Redis管理
  • 备份和恢复
  • 监控内存

Redis管理

    1. 从指定config加载一个服务
      redis-server conf/redis.conf
      redis-server 可以为绝对路径、配置路径也可以为绝对路径
      eg. /usr/local/bin/redis-server ~/build/redis4.0.1/conf/redis-6379.conf

    2. 使用命令行参数覆盖配置文件参数
       eg. redis-server conf/redis.conf --loglevel debug --port 6666

    3. 使用config get 获取server配置
       eg. 127.0.0.1:6379> config get loglevel

    4. 使用config rewrite 把当前的配置持久化到配置文件
       eg. 127.0.0.1:6379> config set loglevel debug
           127.0.0.1:6379> config rewrite
      此时、搜索配置  cat redis.conf | grep loglevel
      会发现已经修改为 debug 

      注意:若启动时、未指配置文件、会写入失败它不知道写哪个文件

    5. config resetstat会重置 info stats 的几个计数器
       键的命中总数:keyspace hits
       键的未命中总数:keyspace misses
       处理命令的数量:total_commands_processed
       收到连接总数:total_connections_received
       过期键的数量:expired_keys
       拒绝连接的数量:rejected_connections
       上次调用fork的时间:latest_fork_usec

    6. 使用
       1) 在redis-cli后直接使用命令
          redis4-cli hmset hashkeyA field1 val1 field2 val2 

       2) --raw选项原始化显示
          redis-4.0.11 redis4-cli hgetall hashkeyA
          field1
          val1
          field2
          val2

          若不添加 --raw 会得到更有可读性的展示
          redis-4.0.11 redis4-cli hgetall hashkeyA
          1) "field1"
          2) "val1"
          3) "field2"
          4) "val2"

          使用--csv选项获取csv格式的输出
          redis4-cli --csv hgetall hashkeyA
          "field1","val1","field2","val2"

      3) redis-cli的最后一个参数也可以从stdin中获取
         echo -n "bar" | redis4-cli -x set foo

      4) 使用文件中的一组命令
         cat commands
         set key1 val1
         set key2 val2
         get key1
         get key2

        cat commands | redis4-cli
        OK
        OK
        "val1"
        "val2"

      5) --pipe 选项在redis-cli中启用管道功能
         unix2dos commands(启用管道时、redis只接受redis协议格式的命令、所以必须转化为dos格式)
         ...
         cat commands | redis4-cli --pipe
         ...

      6) 可以使用 -r(count) 和 -i(delay)选项以指定时间间隔重复执行命令
         redis4-cli -r 5 -i 1 info memory| grep used_memory

备份和恢复

   1. 在将要备份的服务器上执行bgsave
      redis4-cli:6379> bgsave
      Backgroung saving started

   2. 将生成的rdb文件复制到安全的位置
      cp /var/data/redis.rdb /var/data/backup/dump.$(date +%Y%d%H%M).rdb

   3. 检测是否启用了 aof
      redis4-cli config get appendonly

   4. 若启用了aof、则禁用、否则跳过
      redis4-cli config set appendonly no
      redis4-cli config rewrite

      为什么禁用aof ?
      若启用了aof、又未找到aof文件时(下边会将aof文件删除)、reids会用一个空数据集恢复
      此时若一旦键的变更触发了rdb快照、原始的RDB文件也将被重写

   5. 关闭将要复制到的redis服务器、并删除rdb和aof文件、备份到其它地方
      redis4-2-cli shutdown

   6. 将要复制的文件复制到它的数据文件目录、并重命名为 dbfilename
      cp /var/data/backup/dump.$(date +%Y%d%H%M).rdb /var/data/redis4-2.rdb

   7. 给rdb文件正确的权限
      chown redis:redis redis4-2.rdb

   8. 若有必要、重新启动持久化
      redis4-cli config set appendonly yes
      redis4-cli config rewrite

监控内存

    1. info memory 查看总的内存使用情况

    2. memory usage {{key}} 查看单个key的内存使用情况

    3. memory stats 查看redis各实例内存使用情况

    4. info memory各字段含义可参考:
       http://redisdoc.com/server/info.html

    5. memory stats 几个参数说明
       keys.count 总的键数量
       overhead.hashtable.expires 在redis中存储键过期的内存开销
       overhead.hashtable.main 维护redis中数据的内存开销
       aof.buffer aof 缓冲区的内存消耗
       clients.normal 普通客户端缓冲区的内存消耗
       clients.slaves 从实例客户端输出缓冲区的内存消耗
       replication.backlog 主从复制的内存消耗

    6. slowlog get 获取慢查询
       config get slowlog-log-slower-than 查看查询时间大于多久被定义为慢查询 单位us
       config get slowlog-max-len 如果日志队列已超出会将最早的记录清除、是FIFO队列

    7. redis-cli -h 50.30.18.24 --latency 获取往返网络延迟
       redis-cli -h 50.30.18.24 --intrinsic-latency 60 进行一次固有延迟测试
       redis-cli -h 50.30.18.24 --latency-history -i 10 监控redis服务器的ping实现

    8. 延迟可能出现的原因:
       1) 慢查询
          info commandstats 查看
       2) CPU使用率过高
          a. 检查redis-server进程cpu使用情况 
            ps aux | head -1; ps aux | grep redis-server
          b. 检查 total_connections_received 指标
             info stats | grep total_connections_received
       3) redis服务器的持久化
          a. 检查最后一次fork耗费的时间
             info | grep fork
             RDB后台转储和aof重写操作将创建新的进程并在主进程中导致延迟
             eg. 保存了大量数据集(>16G)的redis服务器可能会遇到较高的fork延迟
          b. 检查 aof_delayed_fsync 是否在增加、并检查 aof_pending_bio_fsync 来判断是否aof重写导致有fsync任务挂起
             info | grep aof_delayed_fsync
             info | grep aof_pending_bio_fsync
          c. 搜索redis日志来判断是否存在缓慢aof fsync
             确认是不是redis服务被缓慢的aof给拖慢了
          d. 检查redis是否使用了交互空间
             [root@lianjia ~]# redis-cli info | grep process_id
             process_id:1738
             [root@lianjia ~]# awk '/VmSwap/{print $2 " " $3}' /proc/1738/status
             0 kB
             一个需要交互空间的进程以为着它在等待交换空间中的内存页从交换空间移动到内存时会被内核阻塞
        4) 若依然没有线索、可以检测下内部延迟
           watch-dog

    8. 内存故障分析
       1) 注意used_memory_human是否大于maxmemory_human
          redis4-cli -h 127.0.0.1 -p 63790  info memory | egrep "used_memory_human|maxmemory_human"
          used_memory_human:297.23M
          maxmemory_human:1.95G
       2) 向redis写入简单的键值来定期检测实例是否在正常工作
          set foo bar 10
       3) 注意 evicted_keys 指标的增长情况
          redis4-cli info stats | grep evicted_keys
       4)注意server进程的系统内存
          redis4-cli -h 127.0.0.1 -p 63790  info memory | grep used_memory_rss_human
          used_memory_rss_human:316.18M
       5)注意交换空间的使用情况
          [root@lianjia ~]# redis-cli info | grep process_id
            process_id:1738
          [root@lianjia ~]# awk '/VmSwap/{print $2 " " $3}' /proc/1738/status
             0 kB
       6) 使用 --bigkeys 获取值较大的key

       7) 检查内部的内存使用情况
          a. 检查客户端的查询缓冲区的内存使用情况
             redis-cli client list | awk 'BEGIN{sum=0} {sum+=substr($12, 6); sum+=substr($13, 11)}END{print sum}'


猜你喜欢

转载自blog.csdn.net/njys1/article/details/82795893