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