文章建立一个统一的认识就是Redis的版本是3.2.8
1:BGREWRITEAOF(bgrewriteaof)
执行一个 AOF文件 重写操作。重写会创建一个当前 AOF 文件的体积优化版本。
即使 BGREWRITEAOF 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 BGREWRITEAOF 成功之前不会被修改。
重写操作只会在没有其他持久化工作在后台执行时被触发,也就是说:
如果 Redis 的子进程正在执行快照的保存工作,那么 AOF 重写的操作会被预定(scheduled),等到保存工作完成之后再执行 AOF 重写。在这种情况下, BGREWRITEAOF 的返回值仍然是 OK ,但还会加上一条额外的信息,说明 BGREWRITEAOF 要等到保存操作完成之后才能执行。在 Redis 2.6 或以上的版本,可以使用 INFO 命令查看 BGREWRITEAOF 是否被预定。
如果已经有别的 AOF 文件重写在执行,那么 BGREWRITEAOF 返回一个错误,并且这个新的 BGREWRITEAOF 请求也不会被预定到下次执行。
从 Redis 2.4 开始, AOF 重写由 Redis 自行触发, BGREWRITEAOF 仅仅用于手动触发重写操作。所以说已经并不适用于3.2.8,不在详述。
2:BGSAVE(bgsave)
在后台异步(Asynchronously)保存当前数据库的数据到磁盘。
BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。
客户端可以通过 LASTSAVE 命令查看相关信息,判断 BGSAVE 命令是否执行成功。
首先进入6739的Redis:
127.0.0.1:6379[1]> config get dir
1) "dir"
2) "/home/redis/data"

看一下现在的dump.rbd文件

[root@localhost data]# ls -ll
total 4
-rw-r--r-- 1 root root 108 May  2 16:32 dump.rdb

看一下日期,执行bgsave并且查看dump.rbd文件:

127.0.0.1:6379[1]> bgsave
Background saving started
\[root@localhost data]# ls -ll
total 4
-rw-r--r-- 1 root root 108 May  9 10:18 dump.rdb

看一下,备份时间已经修改为最新我们执行备份的时间了。

下面有两个命令和BGSAVE息息相关,SAVE|LASTSAVE
SAVE
SAVE 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。
一般来说,在生产环境很少执行 SAVE 操作,因为它会阻塞所有客户端,保存数据库的任务通常由 BGSAVE 命令异步地执行。然而,如果负责保存数据的后台子进程不幸出现问题时, SAVE 可以作为保存数据的最后手段来使用。
LASTSAVE
返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示。
127.0.0.1:6379[1]> lastsave
(integer) 1494296312

我们把时间戳转换以后就是1494296312=2017/5/9 10:18:32

3:关于CLIENT的几个系统命令

CLIENT GETNAME,返回 CLIENT SETNAME 命令为连接设置的名字。另外还有CLIENT LIST和CLIENT KILL
因为新创建的连接默认是没有名字的, 对于没有名字的连接, CLIENT GETNAME 返回空白回复。
为当前连接分配一个名字。
这个名字会显示在 CLIENT LIST 命令的结果中, 用于识别当前正在与服务器进行连接的客户端。
举个例子, 在使用 Redis 构建队列(queue)时, 可以根据连接负责的任务(role), 为信息生产者(producer)和信息消费者(consumer)分别设置不同的名字。
名字使用 Redis 的字符串类型来保存, 最大可以占用 512 MB 。 另外, 为了避免和 CLIENT LIST 命令的输出格式发生冲突, 名字里不允许使用空格。
要移除一个连接的名字, 可以将连接的名字设为空字符串 "" 。
使用 CLIENT GETNAME 命令可以取出连接的名字。
新创建的连接默认是没有名字的。
在 Redis 应用程序发生连接泄漏时,为连接设置名字是一种很好的 debug 手段。下面给个例子
127.0.0.1:6379[1]> client getname
(nil)
127.0.0.1:6379[1]> client setname mxqconnect1
OK
127.0.0.1:6379[1]> client getname
"mxqconnect1"
127.0.0.1:6379[1]> client list
id=2350 addr=172.16.16.34:13200 fd=7 name=sentinel-51fc16eb-cmd age=583234 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
id=2351 addr=172.16.16.34:13201 fd=9 name=sentinel-51fc16eb-pubsub age=583234 idle=0 flags=N db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=subscribe
id=2352 addr=172.16.16.35:39670 fd=10 name= age=583233 idle=0 flags=S db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=replconf
id=2362 addr=127.0.0.1:34498 fd=12 name=mxqconnect1 age=150 idle=0 flags=N db=1 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
id=2353 addr=172.16.16.35:39672 fd=6 name=sentinel-d7303108-pubsub age=583232 idle=0 flags=N db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=subscribe
id=2354 addr=172.16.16.35:39671 fd=8 name=sentinel-d7303108-cmd age=583232 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
id=2355 addr=172.16.16.35:39687 fd=11 name= age=583223 idle=0 flags=S db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=replconf
127.0.0.1:6379[1]>

关闭自身的链接:

127.0.0.1:6379[1]> CLIENT KILL 127.0.0.1:34498
OK
127.0.0.1:6379[1]>
127.0.0.1:6379[1]> GET NAME
(error) NOAUTH Authentication required.

我们知道Redis 使用单线程设计,所以当 Redis 正在执行命令的时候,不会有客户端被断开连接。我们断开本身的链接后,在执行下一次命令,就会出现一个错误,告知我们已经断开了连接。

下面看一下CLIENT LIST的各个域的含义,也是Redis官网给出的解释:

以下是域的含义:
addr : 客户端的地址和端口
fd : 套接字所使用的文件描述符
age : 以秒计算的已连接时长
idle : 以秒计算的空闲时长
flags : 客户端 flag (见下文)
db : 该客户端正在使用的数据库 ID
sub : 已订阅频道的数量
psub : 已订阅模式的数量
multi : 在事务中被执行的命令数量
qbuf : 查询缓存的长度( 0 表示没有查询在等待)
qbuf-free : 查询缓存的剩余空间( 0 表示没有剩余空间)
obl : 输出缓存的长度
oll : 输出列表的长度(当输出缓存没有剩余空间时,回复被入队到这个队列里)
omem : 输出缓存的内存占用量
events : 文件描述符事件(见下文)
cmd : 最近一次执行的命令
客户端 flag 可以由以下部分组成:
O : 客户端是 MONITOR 模式下的附属节点(slave)
S : 客户端是一般模式下(normal)的附属节点
M : 客户端是主节点(master)
x : 客户端正在执行事务
b : 客户端正在等待阻塞事件
i : 客户端正在等待 VM I/O 操作(已废弃)
d : 一个受监视(watched)的键已被修改, EXEC 命令将失败
c : 在将回复完整地写出之后,关闭链接
u : 客户端未被阻塞(unblocked)
A : 尽可能快地关闭连接
N : 未设置任何 flag
文件描述符事件可以是:
r : 客户端套接字(在事件 loop 中)是可读的(readable)
w : 客户端套接字(在事件 loop 中)是可写的(writeable)

4:CONFIG SET|GET|REWRITE

CONFIG SET 命令可以动态地调整 Redis 服务器的配置(configuration)而无须重启。
你可以使用它修改配置参数,或者改变 Redis 的持久化(Persistence)方式。
CONFIG SET 可以修改的配置参数可以使用命令 CONFIG GET * 来列出,所有被 CONFIG SET 修改的配置参数都会立即生
CONFIG GET 命令用于取得运行中的 Redis 服务器的配置参数(configuration parameters),在 Redis 2.4 版本中, 有部分参数没有办法用 CONFIG GET 访问,但是在最新的 Redis 2.6 版本中,所有配置参数都已经可以用 CONFIG GET 访问了。
CONFIG GET 接受单个参数 parameter 作为搜索关键字,查找所有匹配的配置参数,其中参数和值以“键-值对”(key-value pairs)的方式排列。
例如我们可以修改一下交互时间:
127.0.0.1:6379[1]> clinet get name
(error) ERR unknown command 'clinet'
127.0.0.1:6379[1]> client getname
(error) NOAUTH Authentication required.
127.0.0.1:6379[1]> AUTH maxiangqianreids
(error) ERR invalid password
127.0.0.1:6379[1]> AUTH maxiangqianredis
OK
127.0.0.1:6379[1]> config get timeout
1) "timeout"
2) "300"
127.0.0.1:6379[1]> config set timeout 3000
OK
127.0.0.1:6379[1]> config get timeout
1) "timeout"
2) "3000"

CONFIG REWRITE 命令对启动 Redis 服务器时所指定的 redis.conf 文件进行改写: 因为 CONFIG SET 命令可以对服务器的当前配置进行修改, 而修改后的配置可能和 redis.conf 文件中所描述的配置不一样, CONFIG REWRITE 的作用就是通过尽可能少的修改, 将服务器当前所使用的配置记录到 redis.conf 文件中。
重写会以非常保守的方式进行:
原有 redis.conf 文件的整体结构和注释会被尽可能地保留。
如果一个选项已经存在于原有 redis.conf 文件中 , 那么对该选项的重写会在选项原本所在的位置(行号)上进行。
如果一个选项不存在于原有 redis.conf 文件中, 并且该选项被设置为默认值, 那么重写程序不会将这个选项添加到重写后的 redis.conf 文件中。
如果一个选项不存在于原有 redis.conf 文件中, 并且该选项被设置为非默认值, 那么这个选项将被添加到重写后的 redis.conf 文件的末尾。
未使用的行会被留白。 比如说, 如果你在原有 redis.conf 文件上设置了数个关于 save 选项的参数, 但现在你将这些 save 参数的一个或全部都关闭了, 那么这些不再使用的参数原本所在的行就会变成空白的。
即使启动服务器时所指定的 redis.conf 文件已经不再存在, CONFIG REWRITE 命令也可以重新构建并生成出一个新的 redis.conf 文件。
另一方面, 如果启动服务器时没有载入 redis.conf 文件, 那么执行 CONFIG REWRITE 命令将引发一个错误。

我们执行config rewrite,然后查看配置文件

[root@localhost redis]# cat redis.conf
#bind 127.0.0.1    # 绑定的主机地址
port 6379
timeout 3000

timeout已经被修改为3000了。

还有一个CONFIG 命令CONFIG RESETSTAT

重置 INFO 命令中的某些统计数据,包括:
Keyspace hits (键空间命中次数)
Keyspace misses (键空间不命中次数)
Number of commands processed (执行命令的次数)
Number of connections received (连接服务器的次数)
Number of expired keys (过期key的数量)
Number of rejected connections (被拒绝的连接数量)
Latest fork(2) time(最后执行 fork(2) 的时间)
The aof_delayed_fsync counter(aof_delayed_fsync 计数器的值)

5:DBSIZE

返回当前数据库的 key 的数量
127.0.0.1:6379> DBSIZE
(integer) 4
127.0.0.1:6379> INFO KEYSPACE
# Keyspace
db0:keys=4,expires=0,avg_ttl=0
db1:keys=1,expires=0,avg_ttl=0

6:DEBUG OBJECT key

DEBUG OBJECT 是一个调试命令,它不应被客户端所使用。

DEBUG SEGFAULT
执行一个不合法的内存访问从而让 Redis 崩溃,仅在开发时用于 BUG 模拟。

7:FLUSHALL:清空整个 Redis 服务器的数据(删除所有数据库的所有 key )。此命令从不失败。

FLUSHDB:清空当前数据库中的所有 key。此命令从不失败。

8:INFO:系统相关信息,下面看一下相关的例子:

127.0.0.1:6379> INFO KEYSPACE
# Keyspace
db0:keys=4,expires=0,avg_ttl=0
db1:keys=1,expires=0,avg_ttl=0
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.16.35,port=6380,state=online,offset=131088123,lag=0
slave1:ip=172.16.16.35,port=6379,state=online,offset=131088123,lag=1
master_repl_offset:131088123
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:130039548
repl_backlog_histlen:1048576
127.0.0.1:6379> info Persistence
# Persistence
loading:0
rdb_changes_since_last_save:2
rdb_bgsave_in_progress:0
rdb_last_save_time:1494299732
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

我们可以通过INFO 后带域的信息查看相关复制,KEY值和相关的持久化信息。

9:MONITOR相关信息

127.0.0.1:6379> MONITOR
OK
1494300607.699131 [0 172.16.16.34:13200] "PING"
1494300607.783224 [0 172.16.16.34:13200] "PUBLISH" "__sentinel__:hello" "172.16.16.34,26379,51fc16eb8e0bf950a3f3ada8c1eb9d70145c9ffb,2,localhost,172.16.16.34,6379,2"
1494300608.585669 [0 172.16.16.35:39671] "PING"
1494300608.676104 [0 172.16.16.35:39671] "PUBLISH" "__sentinel__:hello" "172.16.16.35,26379,d73031089231fd5f46bdda23d8a448cfe64ec8fd,2,localhost,172.16.16.34,6379,2"
1494300608.724879 [0 172.16.16.34:13200] "PING"
1494300609.640910 [0 172.16.16.35:39671] "PING"
1494300609.746056 [0 172.16.16.34:13200] "PING"
1494300609.836231 [0 172.16.16.34:13200] "PUBLISH" "__sentinel__:hello" "172.16.16.34,26379,51fc16eb8e0bf950a3f3ada8c1eb9d70145c9ffb,2,localhost,172.16.16.34,6379,2"
1494300610.713244 [0 172.16.16.35:39671] "PING"
1494300610.752325 [0 172.16.16.34:13200] "PING"

主要就是监控Redis的实时链接信息,这个功能感觉也是很好用。当大量新链接出问题时候我们可以看到连接的来源地址和主要作用。

10:SLAVEOF host port

SLAVEOF 命令用于在 Redis 运行时动态地修改复制(replication)功能的行为。
通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。
如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。
另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。

11:SHUTDOWN 命令执行以下操作:

停止所有客户端
如果有至少一个保存点在等待,执行 SAVE 命令
如果 AOF 选项被打开,更新 AOF 文件
关闭 redis 服务器(server)
如果持久化被打开的话, SHUTDOWN 命令会保证服务器正常关闭而不丢失任何数据。
另一方面,假如只是单纯地执行 SAVE 命令,然后再执行 QUIT 命令,则没有这一保证 —— 因为在执行 SAVE 之后、执行 QUIT 之前的这段时间中间,其他客户端可能正在和服务器进行通讯,这时如果执行 QUIT 就会造成数据丢失。
SAVE 和 NOSAVE 修饰符
通过使用可选的修饰符,可以修改 SHUTDOWN 命令的表现。比如说:
执行 SHUTDOWN SAVE 会强制让数据库执行保存操作,即使没有设定(configure)保存点
执行 SHUTDOWN NOSAVE 会阻止数据库执行保存操作,即使已经设定有一个或多个保存点(你可以将这一用法看作是强制停止服务器的一个假想的 ABORT 命令)
本文是自己测试学习结果,如果你感觉此文对你有帮助,请帮忙点一下推荐。这将鼓励我继续写下去。

转载于:https://www.cnblogs.com/shengdimaya/p/6829879.html

Redis的系统级命令相关推荐

  1. linux系统下常用或有用的系统级命令

    本文章记录我在linux系统下常用或有用的系统级命令,包括软硬件查看.修改命令,有CPU.内存.硬盘.网络.系统管理等命令.但本文不打算介绍生僻命令,也不介绍各个linux发行版下的特有命令,且以后会 ...

  2. redis 删除key的命令_面试官问:Redis变慢了,你会怎么排查?

    Redis作为内存数据库,拥有非常高的性能,单个实例的QPS能够达到10W左右.但我们在使用Redis时,经常时不时会出现访问延迟很大的情况,如果你不知道Redis的内部实现原理,在排查问题时就会一头 ...

  3. 百度广告产品系统级测试技术演进

    背景 根据典型的测试金字塔结构,一个产品的测试可分为三个层级.第一层是单元测试,主要对程序函数进行测试.第二层是集成测试,在百度内部是大家常理解的模块测试.第三层是系统级测试,对产品整体进行的测试.这 ...

  4. Redis简介、常用命令及优化

    文章目录 一.​​关系数据库​​与非关系型数据库概述 1.1 关系型数据库 1.2 非关系型数据库 二.关系数据库与非关系型数据库区别 2.1 数据存储方式不同 2.2 扩展方式不同 2.3 对事务性 ...

  5. 性能调优之Java系统级性能监控及优化

    性能调优之Java系统级性能监控及优化 对于性能调优而言,通常我们需要经过以下三个步骤:1,性能监控:2,性能剖析:3,性能调优 性能调优:通过分析影响Application性能问题根源,进行优化Ap ...

  6. linux脚本参数获取时间戳,Linux系统date命令的参数及获取时间戳的方法

    date指令相关用法示例 date 用法: date [OPTION]... [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] ...

  7. 系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04 + Kernel:4.4.0-31 apt-get install linux-source cd /usr/src/tools/perf make &&am ...

  8. 本地方法中printf如何传给java--java系统级命名管道

    本地方法中printf如何传给java--java系统级命名管道 摘自:https://blog.csdn.net/dog250/article/details/6007301 2010年11月13日 ...

  9. Redis 服务器管理相关命令

    客户端相关 查看客户端列表 CLIENT LIST 自2.4.0可用. 时间复杂度:O(N) N是客户端连接数量. 语法:CLIENT LIST 说明: Redis CLIENT LIST 命令用于返 ...

最新文章

  1. 期望最大EM(Expectation Maximum)算法是什么?为什么有时候不用梯度下降而是用EM算法
  2. OSX 10.8+下开启Web 共享 的方法
  3. NS3Gym python侧代码分析
  4. WebSocket轻松单台服务器5w并发jmeter实测
  5. matlab mat文件 太大,MATLAB .mat文件中的开销过大
  6. 拓端tecdat|python对NOAA天气数据格式转换
  7. 5个必考的大厂SQL面试题
  8. 你可能不知道的印度手机市场
  9. java数据类型 枚举_枚举(enum)属于原始数据类型(primitive typ
  10. 7-24 猜数字游戏 (15分)
  11. 匠心独运: python打造GUI图形小窗口
  12. 鹏哥C语言笔记分享P4
  13. 采用分治算法迭代计算最长公共前缀问题(python)
  14. python中fp是什么意思_详解python实现FP-TREE进行关联规则挖掘(带有FP树显示功能)附源代码下载(3)...
  15. JAVA 中IO总结 之前篇阻塞、非阻塞
  16. 关于邮箱前端架构的一些思考
  17. 【HCIP题库哪里买?】
  18. Python 简易版图书管理系统
  19. 分治思想应用:数学归纳法、递归、归并排序、MapReduce
  20. Xilinx FPGA 的快速启动

热门文章

  1. Python语言编程之正则表达式模式
  2. 机器人也是“艺术家”!上海世界移动大会聚焦5G时代
  3. 天才少年何恺明:高考状元的开挂人生
  4. 荷花旁的浪漫,优雅了谁的光年,清纯少女芭蕾写真
  5. Python3.7 中Scipy和Numpy的安装(含下载资源)
  6. DWORD dwSendTime =::GetTickCount();
  7. 10进制转换成16进制
  8. 计算机组成原理知识点概叙--计算机系统简介
  9. android 获取网卡mac_Android获取本机Mac地址及IP地址方法
  10. 004_Ajax服务器响应