您當前位置: 南順網絡>> 官方資訊>> 建站知識

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