Redis的系统级命令
看一下現(xiàn)在的dump.rbd文件
[root@localhost data]# ls -ll total 4 -rw-r--r-- 1 root root 108 May 2 16:32 dump.rdb看一下日期,執(zhí)行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看一下,備份時(shí)間已經(jīng)修改為最新我們執(zhí)行備份的時(shí)間了。
下面有兩個(gè)命令和BGSAVE息息相關(guān),SAVE|LASTSAVE SAVE SAVE 命令執(zhí)行一個(gè)同步保存操作,將當(dāng)前 Redis 實(shí)例的所有數(shù)據(jù)快照(snapshot)以 RDB 文件的形式保存到硬盤(pán)。 一般來(lái)說(shuō),在生產(chǎn)環(huán)境很少執(zhí)行 SAVE 操作,因?yàn)樗鼤?huì)阻塞所有客戶端,保存數(shù)據(jù)庫(kù)的任務(wù)通常由 BGSAVE 命令異步地執(zhí)行。然而,如果負(fù)責(zé)保存數(shù)據(jù)的后臺(tái)子進(jìn)程不幸出現(xiàn)問(wèn)題時(shí), SAVE 可以作為保存數(shù)據(jù)的最后手段來(lái)使用。 LASTSAVE 返回最近一次 Redis 成功將數(shù)據(jù)保存到磁盤(pán)上的時(shí)間,以 UNIX 時(shí)間戳格式表示。 127.0.0.1:6379[1]> lastsave (integer) 1494296312我們把時(shí)間戳轉(zhuǎn)換以后就是1494296312=2017/5/9 10:18:32
3:關(guān)于CLIENT的幾個(gè)系統(tǒng)命令
CLIENT GETNAME,返回 CLIENT SETNAME 命令為連接設(shè)置的名字。另外還有CLIENT LIST和CLIENT KILL 因?yàn)樾聞?chuàng)建的連接默認(rèn)是沒(méi)有名字的, 對(duì)于沒(méi)有名字的連接, CLIENT GETNAME 返回空白回復(fù)。 為當(dāng)前連接分配一個(gè)名字。 這個(gè)名字會(huì)顯示在 CLIENT LIST 命令的結(jié)果中, 用于識(shí)別當(dāng)前正在與服務(wù)器進(jìn)行連接的客戶端。 舉個(gè)例子, 在使用 Redis 構(gòu)建隊(duì)列(queue)時(shí), 可以根據(jù)連接負(fù)責(zé)的任務(wù)(role), 為信息生產(chǎn)者(producer)和信息消費(fèi)者(consumer)分別設(shè)置不同的名字。 名字使用 Redis 的字符串類(lèi)型來(lái)保存, 最大可以占用 512 MB 。 另外, 為了避免和 CLIENT LIST 命令的輸出格式發(fā)生沖突, 名字里不允許使用空格。 要移除一個(gè)連接的名字, 可以將連接的名字設(shè)為空字符串 "" 。 使用 CLIENT GETNAME 命令可以取出連接的名字。 新創(chuàng)建的連接默認(rèn)是沒(méi)有名字的。 在 Redis 應(yīng)用程序發(fā)生連接泄漏時(shí),為連接設(shè)置名字是一種很好的 debug 手段。下面給個(gè)例子 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]>關(guān)閉自身的鏈接:
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 使用單線程設(shè)計(jì),所以當(dāng) Redis 正在執(zhí)行命令的時(shí)候,不會(huì)有客戶端被斷開(kāi)連接。我們斷開(kāi)本身的鏈接后,在執(zhí)行下一次命令,就會(huì)出現(xiàn)一個(gè)錯(cuò)誤,告知我們已經(jīng)斷開(kāi)了連接。
下面看一下CLIENT LIST的各個(gè)域的含義,也是Redis官網(wǎng)給出的解釋:
以下是域的含義: addr : 客戶端的地址和端口 fd : 套接字所使用的文件描述符 age : 以秒計(jì)算的已連接時(shí)長(zhǎng) idle : 以秒計(jì)算的空閑時(shí)長(zhǎng) flags : 客戶端 flag (見(jiàn)下文) db : 該客戶端正在使用的數(shù)據(jù)庫(kù) ID sub : 已訂閱頻道的數(shù)量 psub : 已訂閱模式的數(shù)量 multi : 在事務(wù)中被執(zhí)行的命令數(shù)量 qbuf : 查詢緩存的長(zhǎng)度( 0 表示沒(méi)有查詢?cè)诘却?#xff09; qbuf-free : 查詢緩存的剩余空間( 0 表示沒(méi)有剩余空間) obl : 輸出緩存的長(zhǎng)度 oll : 輸出列表的長(zhǎng)度(當(dāng)輸出緩存沒(méi)有剩余空間時(shí),回復(fù)被入隊(duì)到這個(gè)隊(duì)列里) omem : 輸出緩存的內(nèi)存占用量 events : 文件描述符事件(見(jiàn)下文) cmd : 最近一次執(zhí)行的命令 客戶端 flag 可以由以下部分組成: O : 客戶端是 MONITOR 模式下的附屬節(jié)點(diǎn)(slave) S : 客戶端是一般模式下(normal)的附屬節(jié)點(diǎn) M : 客戶端是主節(jié)點(diǎn)(master) x : 客戶端正在執(zhí)行事務(wù) b : 客戶端正在等待阻塞事件 i : 客戶端正在等待 VM I/O 操作(已廢棄) d : 一個(gè)受監(jiān)視(watched)的鍵已被修改, EXEC 命令將失敗 c : 在將回復(fù)完整地寫(xiě)出之后,關(guān)閉鏈接 u : 客戶端未被阻塞(unblocked) A : 盡可能快地關(guān)閉連接 N : 未設(shè)置任何 flag 文件描述符事件可以是: r : 客戶端套接字(在事件 loop 中)是可讀的(readable) w : 客戶端套接字(在事件 loop 中)是可寫(xiě)的(writeable)4:CONFIG SET|GET|REWRITE
CONFIG SET 命令可以動(dòng)態(tài)地調(diào)整 Redis 服務(wù)器的配置(configuration)而無(wú)須重啟。 你可以使用它修改配置參數(shù),或者改變 Redis 的持久化(Persistence)方式。 CONFIG SET 可以修改的配置參數(shù)可以使用命令 CONFIG GET * 來(lái)列出,所有被 CONFIG SET 修改的配置參數(shù)都會(huì)立即生 CONFIG GET 命令用于取得運(yùn)行中的 Redis 服務(wù)器的配置參數(shù)(configuration parameters),在 Redis 2.4 版本中, 有部分參數(shù)沒(méi)有辦法用 CONFIG GET 訪問(wèn),但是在最新的 Redis 2.6 版本中,所有配置參數(shù)都已經(jīng)可以用 CONFIG GET 訪問(wèn)了。 CONFIG GET 接受單個(gè)參數(shù) parameter 作為搜索關(guān)鍵字,查找所有匹配的配置參數(shù),其中參數(shù)和值以“鍵-值對(duì)”(key-value pairs)的方式排列。 例如我們可以修改一下交互時(shí)間: 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 命令對(duì)啟動(dòng) Redis 服務(wù)器時(shí)所指定的 redis.conf 文件進(jìn)行改寫(xiě): 因?yàn)?CONFIG SET 命令可以對(duì)服務(wù)器的當(dāng)前配置進(jìn)行修改, 而修改后的配置可能和 redis.conf 文件中所描述的配置不一樣, CONFIG REWRITE 的作用就是通過(guò)盡可能少的修改, 將服務(wù)器當(dāng)前所使用的配置記錄到 redis.conf 文件中。 重寫(xiě)會(huì)以非常保守的方式進(jìn)行: 原有 redis.conf 文件的整體結(jié)構(gòu)和注釋會(huì)被盡可能地保留。 如果一個(gè)選項(xiàng)已經(jīng)存在于原有 redis.conf 文件中 , 那么對(duì)該選項(xiàng)的重寫(xiě)會(huì)在選項(xiàng)原本所在的位置(行號(hào))上進(jìn)行。 如果一個(gè)選項(xiàng)不存在于原有 redis.conf 文件中, 并且該選項(xiàng)被設(shè)置為默認(rèn)值, 那么重寫(xiě)程序不會(huì)將這個(gè)選項(xiàng)添加到重寫(xiě)后的 redis.conf 文件中。 如果一個(gè)選項(xiàng)不存在于原有 redis.conf 文件中, 并且該選項(xiàng)被設(shè)置為非默認(rèn)值, 那么這個(gè)選項(xiàng)將被添加到重寫(xiě)后的 redis.conf 文件的末尾。 未使用的行會(huì)被留白。 比如說(shuō), 如果你在原有 redis.conf 文件上設(shè)置了數(shù)個(gè)關(guān)于 save 選項(xiàng)的參數(shù), 但現(xiàn)在你將這些 save 參數(shù)的一個(gè)或全部都關(guān)閉了, 那么這些不再使用的參數(shù)原本所在的行就會(huì)變成空白的。 即使啟動(dòng)服務(wù)器時(shí)所指定的 redis.conf 文件已經(jīng)不再存在, CONFIG REWRITE 命令也可以重新構(gòu)建并生成出一個(gè)新的 redis.conf 文件。 另一方面, 如果啟動(dòng)服務(wù)器時(shí)沒(méi)有載入 redis.conf 文件, 那么執(zhí)行 CONFIG REWRITE 命令將引發(fā)一個(gè)錯(cuò)誤。我們執(zhí)行config rewrite,然后查看配置文件
[root@localhost redis]# cat redis.conf #bind 127.0.0.1 # 綁定的主機(jī)地址 port 6379 timeout 3000timeout已經(jīng)被修改為3000了。
還有一個(gè)CONFIG 命令CONFIG RESETSTAT
重置 INFO 命令中的某些統(tǒng)計(jì)數(shù)據(jù),包括: Keyspace hits (鍵空間命中次數(shù)) Keyspace misses (鍵空間不命中次數(shù)) Number of commands processed (執(zhí)行命令的次數(shù)) Number of connections received (連接服務(wù)器的次數(shù)) Number of expired keys (過(guò)期key的數(shù)量) Number of rejected connections (被拒絕的連接數(shù)量) Latest fork(2) time(最后執(zhí)行 fork(2) 的時(shí)間) The aof_delayed_fsync counter(aof_delayed_fsync 計(jì)數(shù)器的值)5:DBSIZE
返回當(dāng)前數(shù)據(jù)庫(kù)的 key 的數(shù)量 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=06:DEBUG OBJECT key
DEBUG OBJECT 是一個(gè)調(diào)試命令,它不應(yīng)被客戶端所使用。
DEBUG SEGFAULT 執(zhí)行一個(gè)不合法的內(nèi)存訪問(wèn)從而讓 Redis 崩潰,僅在開(kāi)發(fā)時(shí)用于 BUG 模擬。7:FLUSHALL:清空整個(gè) Redis 服務(wù)器的數(shù)據(jù)(刪除所有數(shù)據(jù)庫(kù)的所有 key )。此命令從不失敗。
FLUSHDB:清空當(dāng)前數(shù)據(jù)庫(kù)中的所有 key。此命令從不失敗。8:INFO:系統(tǒng)相關(guān)信息,下面看一下相關(guān)的例子:
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我們可以通過(guò)INFO 后帶域的信息查看相關(guān)復(fù)制,KEY值和相關(guān)的持久化信息。
9:MONITOR相關(guān)信息
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"主要就是監(jiān)控Redis的實(shí)時(shí)鏈接信息,這個(gè)功能感覺(jué)也是很好用。當(dāng)大量新鏈接出問(wèn)題時(shí)候我們可以看到連接的來(lái)源地址和主要作用。
10:SLAVEOF host port
SLAVEOF 命令用于在 Redis 運(yùn)行時(shí)動(dòng)態(tài)地修改復(fù)制(replication)功能的行為。 通過(guò)執(zhí)行 SLAVEOF host port 命令,可以將當(dāng)前服務(wù)器轉(zhuǎn)變?yōu)橹付ǚ?wù)器的從屬服務(wù)器(slave server)。 如果當(dāng)前服務(wù)器已經(jīng)是某個(gè)主服務(wù)器(master server)的從屬服務(wù)器,那么執(zhí)行 SLAVEOF host port 將使當(dāng)前服務(wù)器停止對(duì)舊主服務(wù)器的同步,丟棄舊數(shù)據(jù)集,轉(zhuǎn)而開(kāi)始對(duì)新主服務(wù)器進(jìn)行同步。 另外,對(duì)一個(gè)從屬服務(wù)器執(zhí)行命令 SLAVEOF NO ONE 將使得這個(gè)從屬服務(wù)器關(guān)閉復(fù)制功能,并從從屬服務(wù)器轉(zhuǎn)變回主服務(wù)器,原來(lái)同步所得的數(shù)據(jù)集不會(huì)被丟棄。 利用『 SLAVEOF NO ONE 不會(huì)丟棄同步所得數(shù)據(jù)集』這個(gè)特性,可以在主服務(wù)器失敗的時(shí)候,將從屬服務(wù)器用作新的主服務(wù)器,從而實(shí)現(xiàn)無(wú)間斷運(yùn)行。11:SHUTDOWN 命令執(zhí)行以下操作:
停止所有客戶端 如果有至少一個(gè)保存點(diǎn)在等待,執(zhí)行 SAVE 命令 如果 AOF 選項(xiàng)被打開(kāi),更新 AOF 文件 關(guān)閉 redis 服務(wù)器(server) 如果持久化被打開(kāi)的話, SHUTDOWN 命令會(huì)保證服務(wù)器正常關(guān)閉而不丟失任何數(shù)據(jù)。 另一方面,假如只是單純地執(zhí)行 SAVE 命令,然后再執(zhí)行 QUIT 命令,則沒(méi)有這一保證 —— 因?yàn)樵趫?zhí)行 SAVE 之后、執(zhí)行 QUIT 之前的這段時(shí)間中間,其他客戶端可能正在和服務(wù)器進(jìn)行通訊,這時(shí)如果執(zhí)行 QUIT 就會(huì)造成數(shù)據(jù)丟失。 SAVE 和 NOSAVE 修飾符 通過(guò)使用可選的修飾符,可以修改 SHUTDOWN 命令的表現(xiàn)。比如說(shuō): 執(zhí)行 SHUTDOWN SAVE 會(huì)強(qiáng)制讓數(shù)據(jù)庫(kù)執(zhí)行保存操作,即使沒(méi)有設(shè)定(configure)保存點(diǎn) 執(zhí)行 SHUTDOWN NOSAVE 會(huì)阻止數(shù)據(jù)庫(kù)執(zhí)行保存操作,即使已經(jīng)設(shè)定有一個(gè)或多個(gè)保存點(diǎn)(你可以將這一用法看作是強(qiáng)制停止服務(wù)器的一個(gè)假想的 ABORT 命令)?
本文是自己測(cè)試學(xué)習(xí)結(jié)果,如果你感覺(jué)此文對(duì)你有幫助,請(qǐng)幫忙點(diǎn)一下推薦。這將鼓勵(lì)我繼續(xù)寫(xiě)下去。轉(zhuǎn)載于:https://www.cnblogs.com/shengdimaya/p/6829879.html
總結(jié)
以上是生活随笔為你收集整理的Redis的系统级命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Hibernate 入门小案例
- 下一篇: 第三次课程作业