標籤:foo 成功 使用 版本 錯誤 dump.rdb cluster pattern res
Redis系統管理實驗簡介
上一節實驗講述了Redis的基礎資料型別 (Elementary Data Type),本實驗繼續講解Redis相關命令及管理操作。
在Redis中,命令大小寫不敏感。
一、適合全體類型的常用命令
啟動redis服務和redis-cli命令介面繼續後續實驗:
$ sudo service redis-server start$ redis-cli
(1)EXISTS and DEL
EXISTS key 判斷一個key是否存在;存在返回 1;否則返回0; DEL key 刪除某個key,或是一系列key;DEL key1 key2 key3 key4。成功返回1,失敗返回0(key值不存在)。
> set mykey hello> exists mykey> del mykey> exists mykey
操作:
(2)TYPE and KEYS
TYPE key:返回某個key元素的資料類型 ( none:不存在,string:字元,list,set,zset,hash),key不存在返回空。 KEYS key—pattern :返回匹配的key列表 (KEYS foo*:尋找foo開頭的keys)
> set mykey x> type mykey>keys my*> del mykey>keys my*> type mykey
操作:
(3)RANDOMKEY and CLEAR
RANDOMKEY : 隨機獲得一個已經存在的key,如果當前資料庫為空白,則返回Null 字元串
> randomkey
操作:
CLEAR :清除介面。
> clear
(4)RENAME and RENAMENX
RENAME oldname newname:改key的名字,新鍵如果存在將被覆蓋 RENAMENX oldname newname:更改key的名字,如果名字存在則更改失敗
筆者randomkey結果為mylist,將此key值更名為newlist。
> randomkey> rename mylist newlist> exists mylist> exists newlist
操作:
(5) DBSIZE
DBSIZE :返回當前資料庫的key的總數
> dbsize
操作:
二、Redis 時間相關命令(1)限定key存留時間
這同樣是一個無視資料類型的命令,對於臨時儲存很有用處。避免進行大量的DEL操作。
EXPIRE:設定某個key的到期時間(秒),(EXPIRE bruce 1000:設定bruce這個key1000秒後系統自動刪除)注意:如果在還沒有到期的時候,對值進行了改變,那麼那個值會被清除。
> set key some-value> expire key 10> get key (馬上執行此命令)> get key (10s後執行此命令)
操作:
結果顯示,執行EXPIRE命令後,馬上GET,顯示key存在。10秒後再GET時,key 已經被自動刪除。
(2)查詢key剩餘存留時間
限時操作可以再SET命令中實現,並且可用TTL命令查詢key剩餘存留時間。 TTL:尋找某個key還有多長時間到期,返回時間秒
> set key 100 ex 30> ttl key> ttl key
操作:
(3)清除key
FLUSHDB:清空當前資料庫中的所有鍵
FLUSHALL:清空所有資料庫中的所有鍵
>flushdb>flushall
三、Redis設定相關命令
Redis有其設定檔,可以通過client-command視窗查看或者更改相關配置。相關命令介紹如下:
(1)CONFIG GET and CONFIG SET
CONFIG GET:用來讀取運行Redis伺服器的配置參數。 CONFIG SET:用於更改運行Redis伺服器的配置參數。 AUTH : 認證密碼 下面針對Redis密碼的樣本:
> config get requirepass (查看密碼)> config set requirepass test123 (設定密碼為test123 )> config get requirepass (報錯,沒有認證)> auth test123> config get requirepass
操作:
由結果可知,剛開始時Reids並未設定密碼,密碼查詢結果為空白。然後設定密碼為test123,重新查詢報錯。經過auth命令認證後,可正常查詢。
可以經過修改Redis的設定檔redis.conf修改密碼。
CONFIG GET命令是以list的key-value對顯示的,如查詢資料類型的最大條目:
> config get *max-*-entries*
操作:
(2)重設報告
CONFIG RESETSTAT:重設資料統計報告,通常傳回值為‘OK"。
> CONFIG RESETSTAT
操作:
四、查詢資訊
INFO [section] :查詢Redis相關資訊。 INFO命令可以查詢Redis幾乎所有的資訊,其命令選項有如下:
- server: Redis server的常規資訊
- clients: Client的串連選項
- memory: 儲存佔用相關資訊
- persistence: RDB and AOF 相關資訊
- stats: 常規統計
- replication: Master/slave請求資訊
- cpu: CPU 佔用資訊統計
- cluster: Redis 叢集資訊
- keyspace: 資料庫資訊統計
- all: 返回所有資訊
- default: 返回常規設定資訊
若命令參數為空白,info命令返回所有資訊。
> info keyspace> info server
操作:
Redis的進階應用程式實驗簡介
前面學習了Redis的基礎知識和基本命令,接下來繼續講解Redis的進階應用程式,包括:安全性設定,主從複製,交易處理, 持久化機制, 虛擬記憶體的使用。
一、安全性
設定在用戶端串連是需要指定的密碼(由於redis速度相當的快,一秒鐘可以150K次的密碼嘗試,所以需要設定一個密碼強度很大的密碼)。
設定密碼的方式有兩種:
(1) 使用config set 命令的requirepass 參數,具體格式為config set requirepass “password”。 (2) 配置redis.conf 中設定requirepass屬性,後面為密碼。
輸入認證的方式也有兩種:
(1) 登入時可以 redis-cli -a password
(2)登入後使用 auth password
(1)設定密碼
第一種密碼設定方式在上一個實驗中已經提到,(在CONFIG SET命令講解的執行個體),此處我們來看看第二種方式設定密碼。
首先需要進入Redis的安裝目錄,然後修改設定檔redis.conf。根據grep命令的結果,使用vi編輯器修改“# requirepass foobared” 為“requirepass test123”,然後儲存退出。
$ grep -n requirepass /etc/redis/redis.conf$ sudo vim /etc/redis/redis.conf
編輯redis.conf的結果:
(2)重啟redis-server 與redis-cli
重啟redis server。
$ sudo service redis-server restart
進入到redis-cli互動介面進行驗證
$ redis-cli> info> auth test123> info> exit
操作:
結果表明第一次info命令失敗,在auth認證之後info命令正常返回。最後退出redis-cli。
另外一種密碼認證方式:
$ redis-cli -a test123> info
操作:
二、主從複製
由於環境的原因,在此處筆者大致講解主從複製的工作流程,不做實驗。
Redis的主從複製配置和使用都比較簡單,通過主從複製可以允許多個slave server擁有和master server相同的資料庫副本。
從伺服器只能讀,不能寫。
Redis主從複製特點:
1、master可以擁有多個slave。
2、多個slave可以串連同一個master外,還可以串連到其他的slave。(當master宕機後,相連的slave轉變為master)
3、主從複製不會阻塞master,再同步資料時,master可以繼續處理client請求。
4、提高了系統的延展性。
Redis主從複製的過程:
1、Slave與master建立串連,發送sync同步命令。
2、 Master會啟動一個後台進程,將資料庫快照集儲存到檔案中,同時Master主進程會開始收集新的寫命令並緩衝。
3、 後台完成儲存後,就將此檔案發送給Slave。
4、 Slave將此檔案儲存到磁碟上。
三、交易處理
Redis的交易處理比較簡單。只能保證client發起的事務中的命令可以連續的執行,而且不會插入其他的client命令,當一個client在串連中發出multi命令時,這個串連就進入一個事務的上下文,該串連後續的命令不會執行,而是存放到一個隊列中,當執行exec命令時,redis會順序的執行隊列中的所有命令。如果其中執行出現錯誤,執行正確的不會復原,不同於關係型資料庫的事務。
> multi> set name a> set name b> exec> get name
操作:
四、持久化機制
Redis是一個支援持久化的記憶體資料庫,Redis需要經常將記憶體中的資料同步到磁碟來保證持久化。
Redis支援兩種持久化方式:
1、snapshotting(快照),將資料存放到檔案裡,預設。
是將記憶體中的資料已快照的方式寫入到二進位檔案中,預設檔案dump.rdb,可以通過配置設定自動做快照持久化的方式。可配置Redis在n秒內如果超過m個key被修改就自動儲存快照。
save 900 1 #900秒內如果超過1個key被修改,則發起快照儲存
save 300 10 #300秒內如果超過10個key被修改,則快照儲存
2、 Append-only file(縮寫為aof),將讀寫操作存放到檔案中。
由於快照方式在一定間隔時間做一次,所以如果Redis意外down掉的話,就會丟失最後一次快照後的所有修改。
aof比快照方式有更好的持久化性,是由於使用aof時,redis會將每一個收到的寫命令都通過write函數寫入到檔案中當redis啟動時會通過重新執行檔案中儲存的寫命令來在記憶體中重建立立整個資料庫的內容。
由於os會在核心中緩衝write做的修改,所以可能不是立即寫到磁碟上,這樣aof方式的持久化也還是有可能會丟失一部分資料。可以通過設定檔告訴redis我們想要通過fsync函數強制os寫入到磁碟的時機。
設定檔中的可配置參數:
appendonly yes //啟用aof持久化方式#appendfsync always //收到寫命令就立即寫入磁碟,最慢,但是保證了資料的完整持久化appendfsync everysec //每秒中寫入磁碟一次,在效能和持久化方面做了很好的折中#appendfsync no //完全依賴os,效能最好,持久化沒有保證
在redis-cli的命令中,SAVE命令是將資料寫入磁碟中。
> help save>save
操作:
五、虛擬記憶體的使用
虛擬記憶體管理在2.6及之上版本取消了,在安裝實驗中,選擇的是2.8.9版本的redis ,所有實驗中的設定檔中沒有虛擬記憶體管理功能的配置選項。此處僅為講解
Redis的虛擬記憶體是暫時把不經常訪問的資料從記憶體交換到磁碟中,從而騰出記憶體空間用於其他的訪問資料,尤其對於redis這樣的記憶體資料庫,記憶體總是不夠用的。除了分隔到多個redis server外,提高資料庫的容量的方法就是使用虛擬記憶體,把那些不常訪問的資料交換到磁碟上。
通過配置vm相關的redis.config配置:
vm-enable yes #開啟vm功能vm-swap-file /tmp/redis.swap #交換出來的value儲存的檔案路徑vm-max-memory 10000000 #redis使用的最大記憶體上線 vm-page-size 32 #每個頁面的大小32位元組vm-pages 123217729 #最多使用多小個頁面vm-max-threads 4 #用於執行value對象換入的背景工作執行緒數量
redis 基本操作