Redis資料庫學習筆記02--Redis資料庫簡單型別命令
目錄
2.1 新增/讀取/修改 hash型別鍵值對中的單條【屬性-屬性值】結構
2.2 新增/讀取/修改 hash型別鍵值對中的多條【屬性-屬性值】結構
2.4 刪除 hash型別鍵值對中的單條【屬性-屬性值】結構
3.3 從key對應的list中指定item位置插入新value
3.4 修改key對應list中指定index處的value值
3.5 將key對應的list中前count次出現的值為value的元素移除
5.2 從value是有序集合型別的結構中【按照順序】讀取集合的所有成員
5.3 從value是有序集合型別的結構中【按照權重】讀取集合的所有成員
1.redis資料庫內對於string型別的相關操作
redis資料庫有五種資料型別指的是key-value型redis資料庫中的value值有五種型別,但是key只有唯一一種就是string型別。redis資料庫預設建立16個數據庫,可以通過指令【~/ $ select index】在16個數據庫之間自由切換,在使用第0個數據庫的時候不會顯式說明正在使用第0個數據庫,而在其餘資料庫使用的時候會使用[]中括號進行標註。
127.0.0.1:6379> select 10
OK
127.0.0.1:6379[10]> select 0
OK
127.0.0.1:6379>
1.1 新增/讀取/修改 單一string型別鍵值對
使用指令【~/set key value】對redis資料庫新增單一鍵值對資料,使用指令【~/$ get key】讀取redis資料庫中的資料。
127.0.0.1:6379> set frankName FrankenStein
OK
127.0.0.1:6379> get frankName
"FrankenStein"
127.0.0.1:6379>
1.2 新增/讀取 多個string型別鍵值對
使用指令【~/mset key1 value1 key2 value2 ...】對redis資料庫同時新增多條鍵值對資料,使用指令【~/$ mget key1 key2 ...】同時讀取redis資料庫中的多條資料。
127.0.0.1:6379> mset frankAge 18 frankGender male frankMarried secret
OK
127.0.0.1:6379> mget frankAge frankGender frankMarried
1) "18"
2) "male"
3) "secret"
127.0.0.1:6379>
1.3 設定 string鍵值對的過期時間
使用指令【~/ $ setex key expires value】對指定鍵值對設定過期時間,鍵值對會在超過過期時間的瞬間被自動刪除
127.0.0.1:6379> setex frankSecret 10 heIsASuperman
OK
127.0.0.1:6379> get frankSecret
"heIsASuperman"
127.0.0.1:6379> get frankSecret
(nil)
127.0.0.1:6379>
1.4 向string鍵值對的value中追加新內容
使用指令【append 指定key 追加的value】向資料庫中指定key對應的value值中追加新內容(並不是覆蓋),並且會返回新增內容後當前value的總長度。
127.0.0.1:6379> append frankAge 0
(integer) 3
127.0.0.1:6379> get frankAge
"180"
127.0.0.1:6379>
1.5 string鍵值對的中文識別
如果redis資料庫儲存中文,那麼預設開啟redis的指令【~/ $ redis-cli】是不能夠識別中文的,redis會將中文對應的ascii編碼值輸出出來。而解決辦法是先採用【~/ $ quit】指令退出資料庫,然後執行【~/ $ redis-cli --raw】指令採用中文讀寫方式進入redis資料庫,此時再次讀寫中文內容就能夠識別了。
127.0.0.1:6379> set frankAddress 地球之上
OK
127.0.0.1:6379> get frankAddress
"\xe5\x9c\xb0\xe7\x90\x83\xe4\xb9\x8b\xe4\xb8\x8a"
127.0.0.1:6379> quit
***deMacBook-Pro:~ ***$ redis-cli --raw
127.0.0.1:6379> get frankAddress
地球之上
127.0.0.1:6379>
1.6 redis資料庫鍵指令
鍵指令指的是redis資料庫中提供的一些專門用來對資料庫的key鍵進行操作的指令,他們各自擁有不同於讀取設定等操作的特殊能力。鍵指令一般是通用的,對key對應的是什麼型別的資料並不關心。
(1) 檢視當前資料庫中所有的鍵指令【~/ $ keys *】,keys後面的引數支援正則表示式寫法,例如【~/ $ keys frankA*】。
127.0.0.1:6379> keys *
frankMarried
frankGender
frankAddress
frankAge
frankName
127.0.0.1:6379> keys *d
frankMarried
127.0.0.1:6379> keys frankA*
frankAddress
frankAge
127.0.0.1:6379>
(2) 檢視指定鍵對應的值型別指令【~/ $ type key】,輸出指定鍵對應的值的型別。
127.0.0.1:6379> type frankAddress
string
127.0.0.1:6379>
(3) 對已經存在的鍵新增過期時間指令【~/ $ expire key expires】,可以對已經存在過期時間的key進行覆寫,過期時間以最後設定的時間為準。指令返回一個數字代表布林值1代表true表示新增成功。
(4) 與前一條指令息息相關的是檢視指定鍵距離過期還剩下多長時間指令【~/ $ ttl key】,若當前key值已經超過過期時間,那麼本指令會返回一個-2結果表示對應的鍵值對被自動刪除。
127.0.0.1:6379> keys *
frankMarried
frankGender
frankAddress
frankAge
frankName
127.0.0.1:6379> expire frankMarried 50
1
127.0.0.1:6379> ttl frankMarried
35
127.0.0.1:6379> ttl frankMarried
33
127.0.0.1:6379> ttl frankMarried
31
127.0.0.1:6379> ttl frankMarried
-2
127.0.0.1:6379> get frankMarried
127.0.0.1:6379> keys *
frankGender
frankAddress
frankAge
frankName
127.0.0.1:6379>
(5) 對已知的鍵值對進行刪除指令【~/ $ del key1 key2 …】,本指令返回刪除的鍵值對的數量。
127.0.0.1:6379> keys *
frankGender
frankAddress
frankAge
frankName
127.0.0.1:6379> del frankAddress
1
127.0.0.1:6379> keys *
frankGender
frankAge
frankName
127.0.0.1:6379> del frankGender frankAge
2
127.0.0.1:6379> keys *
frankName
127.0.0.1:6379>
(5) 判斷redis中一個key是否存在指令【~/ $ exists key】,返回1表示true存在,返回0表示false不存在
127.0.0.1:6379[2]> keys *
frankGirls
frankPCs
127.0.0.1:6379[2]> exists frankPCs
1
127.0.0.1:6379[2]> exists frankPC
0
2.redis資料庫內對於hash型別的相關操作
hash就是雜湊值表,說的直白一點就是oc裡面的object物件或者說python裡面的list。所以當redis的key對應的value是hash的時候,那麼就意味著一個key對應著一個“具有屬性和屬性值結構的物件”
在本節hash物件被成功新增到redis資料庫中後,如果利用前文提到的type指令則能夠看到返回的frankInfo欄位對應的是hash型別
127.0.0.1:6379[1]> type frankInfo
hash
127.0.0.1:6379[1]>
2.1 新增/讀取/修改 hash型別鍵值對中的單條【屬性-屬性值】結構
使用【~/ $ hset key propertyName value】指令對redis資料庫新增一個hash鍵值對,本指令會返回添加了多少個key-value鍵值對。使用【~/ $ hget key propertyName】指令對讀取redis資料庫中一個hash鍵值對的某個propertyName屬性名對應的屬性值。
127.0.0.1:6379[1]> hset frankInfo frankName frank
1
127.0.0.1:6379[1]> hget frankInfo frankName
frank
#非標準用法:因為剛剛已經存在了frankName欄位,因此本指令只添加了兩條新key-value對
127.0.0.1:6379[1]> hset frankInfo frankName frank frankAge 18 frankGender male
2
#非標準用法:本指令則因為這兩個欄位已經都存在,所以本指令新增0條新的key-value對
127.0.0.1:6379[1]> hset frankInfo frankName frank frankAge 18
0
2.2 新增/讀取/修改 hash型別鍵值對中的多條【屬性-屬性值】結構
使用【~/ $ hmset key propertyName1 value1 propertyName2 value2 …】指令對redis資料庫新增一個擁有多個屬性的hash鍵值對,本指令會返回新增成功或失敗。使用【~/ $ hmget key propertyName1 propertyName2 …】指令讀取redis資料庫中一個hash鍵值對的多個propertyName屬性名對應的屬性值。
127.0.0.1:6379[1]> hmset frankInfo frankAddress secret1 frankMarried secret2
127.0.0.1:6379[1]> hmget frankInfo frankName frankAge frankGender frankAddress frankMarried
frank
18
male
secret1
secret2
127.0.0.1:6379[1]>
2.3 讀取 hash型別鍵值對中所有屬性/屬性值
使用指令【~/ $ hkeys key】獲取當前key對應的hash有多少個property
使用指令【~/ $ hvals key】獲取當前key對應的hash中每個property對應的值
127.0.0.1:6379[1]> hkeys frankInfo
frankName
frankAge
frankGender
frankAddress
frankMarried
127.0.0.1:6379[1]> hvals frankInfo
frank
18
male
secret1
secret2
127.0.0.1:6379[1]>
2.4 刪除 hash型別鍵值對中的單條【屬性-屬性值】結構
使用指令【~/ $ hdel key propertyName】刪除key鍵對應的hash結構中的指定屬性對,本指令返回刪除hash中屬性對的數量。
127.0.0.1:6379[1]> hkeys frankInfo
frankName
frankAge
frankGender
frankAddress
frankMarried
127.0.0.1:6379[1]> hdel frankInfo frankMarried
1
127.0.0.1:6379[1]> hkeys frankInfo
frankName
frankAge
frankGender
frankAddress
127.0.0.1:6379[1]>
2.5 刪除hash鍵值對
使用指令【~/ $ del key】直接刪除指定key對應的hash鍵值對。
127.0.0.1:6379[1]> hkeys frankInfo
frankName
frankAge
frankGender
frankAddress
127.0.0.1:6379[1]> del frankInfo
1
127.0.0.1:6379[1]> hkeys frankInfo
127.0.0.1:6379[1]>
3.redis資料庫內對於list型別的相關操作
redis中的list相當於go當中slice切片,或者JavaScript當中的Array結構。所以當redis的key對應的value是list的時候,那麼就意味著一個key對應著一個“具有順序的儲存結構”。
3.1 從左向指定key對應的list中新增value
使用指令【~/ $ lpush key value1 value2 …】向key對應的list內新增value。value1先新增在最左面;然後value2繼續新增在最左面,value1向右順位移動1位;以此類推...使用指令【~/ $ lrange key beginIndex endIndex】來讀取key對應的list中beginIndex下標與endIndex下標之間的值,包括endIndex處的值。此時當endIndex 為-1時表示倒數第一個。
127.0.0.1:6379[2]> lpush frankPCs lenovo macAir macPro
3
127.0.0.1:6379[2]> lrange frankPCs 0 2
macPro
macAir
lenovo
3.2 從右向指定key對應的list中新增value
這就像是普通的JavaScript語言中的普通push陣列方法一樣邏輯,通過使用指令【~/ $ rpush key value1 value2 …】來從右向key對應的list中新增value值。注意,不存在rrange從右輸出list的value的方法,lrange的l是list的含義!
127.0.0.1:6379[2]> rpush frankGirls a1 a2 a3 a4
4
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a1
a2
a3
a4
127.0.0.1:6379[2]>
3.3 從key對應的list中指定item位置插入新value
通過使用指令【~/ $ linsert key before/after 現有的value 新value】來將新value插入到list中現有value的前面或者後面。本指令會返回插入資料後,當前key對應的list中有幾個item。
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a1
a2
a3
a4
127.0.0.1:6379[2]> linsert frankGirls before a2 000
5
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a1
000
a2
a3
a4
127.0.0.1:6379[2]> linsert frankGirls after a2 000
6
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a1
000
a2
000
a3
a4
127.0.0.1:6379[2]>
3.4 修改key對應list中指定index處的value值
通過使用指令【~/ $ lset key index value】來修改key對應list中指定index處的value值,就好像變更切片值一樣。
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a1
000
a2
000
a3
a4
127.0.0.1:6379[2]> lset frankGirls 0 a11111111
OK
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a11111111
000
a2
000
a3
a4
3.5 將key對應的list中前count次出現的值為value的元素移除
通過使用指令【~/ $lrem key count value】可以將key對應的list中出現count次的value元素移除,count的不同值有著不同的value 元素刪除方式。
count > 0 | 從list下標為0開始向後查詢,刪除前count個value元素 |
count < 0 | 從list下標為0開始向後查詢,刪除最後count個value元素 |
count = 0 | 刪除list中所有的value元素 |
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a1
a2
a3
a4
a3
a2
a1
127.0.0.1:6379[2]> lrem frankGirls 1 a1
1
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a2
a3
a4
a3
a2
a1
127.0.0.1:6379[2]> lrem frankGirls -1 a2
1
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a2
a3
a4
a3
a1
127.0.0.1:6379[2]> lrem frankGirls 0 a3
2
127.0.0.1:6379[2]> lrange frankGirls 0 -1
a2
a4
a1
4.redis資料庫內對於set型別的相關操作
set型別指的是類似於oc當中的NSSet或者JavaScript中的Collection,不過都有所不同。set型別再redis資料庫中指的是無序集合型別,所謂集合就是由一個或多個確定的元素所構成的整體,說的在直白一點集合就是一大堆資料對在一起構成的這麼一個整體,集合中的資料可以是任意資料型別。但是在redis中set型別在集合的基礎上又添加了一些redis資料庫的特性,從而保證set型別能夠和redis資料庫之間不會出現一些語法上的衝突。下列表格列出了一般概念上的set型別和redis資料庫中的set型別的區別:
一般概念上set集合 | redis資料庫中set集合型別 |
無序集合,集合中的元素沒有順序 | 無序集合,集合中的元素沒有順序 |
元素可以是任意資料型別 | 元素只能是string型別 |
元素具有互斥性,元素唯一且不重複 | 元素具有互斥性,元素唯一且不重複,並且重複新增元素無效 |
元素具有確定性,在集合內或不在集合內 | 元素不支援修改,有就是有,沒有就是沒有。只有新增和刪除操作 |
4.1 向value為集合型別的值內新增成員
可以通過指令【~/ $ sadd key member1 member2 …】向key對應的集合中新增集合成員,本指令能夠返回新增進入集合的條目數
127.0.0.1:6379[1]> sadd human peo1 peo2 peo3 peo4 peo5
5
4.2 從value是集合型別的結構中讀取集合的所有成員
可以通過指令【~/ $ smembers key】獲取key對應的無序集合中的所有成員(注意能夠看到集合成員是無序輸出的)
127.0.0.1:6379[1]> smembers human
peo3
peo2
peo1
peo4
peo5
4.3 刪除集合內成員
可以通過指令【~/ $ srem key value】將key對應的集合內的指定value
127.0.0.1:6379[1]> srem human peo1
1
127.0.0.1:6379[1]> smembers human
peo4
peo5
peo2
peo3
127.0.0.1:6379[1]>
5.redis資料庫內對於zset型別的相關操作
zset型別在redis資料庫中表示的是有序集合型別,與set型別的區別就是集合中的成員會按照一定順序排列。可能這看起來會有些和集合的無序性特性衝突,但事實上集合的有序性是建立在權重基礎上的:有序集合中的每一個member都會有一個關聯的double型別score用來表示member的權重,而zset就是根據這個score權重來將成員按照一定順序排列。
5.1 向value為有序集合型別的值內新增成員
通過指令【~/ $ zadd key score1 member1 score2 member2…】來向key對應的有序集合中新增帶有權重的成員。
127.0.0.1:6379[1]> zadd Stu 1 xiaoming 2 xiaohong 3 xiaolan 4 xiaolv 5 xiaobai
5
5.2 從value是有序集合型別的結構中【按照順序】讀取集合的所有成員
通過指令【~/ $ zrange key startIndex stopIndex】來從key對應的有序集合中獲取序號在startIndex到stopIndex之間的成員,這個範圍是閉區間範圍,即輸出內容包含startIndex位置成員和stopIndex位置成員。-1表示最後一個元素。
127.0.0.1:6379[1]> zrange Stu 0 -1
xiaoming
xiaohong
xiaolan
xiaolv
xiaobai
127.0.0.1:6379[1]>
5.3 從value是有序集合型別的結構中【按照權重】讀取集合的所有成員
通過指令【~/ $ zrangebyscore key scoreStart scoreStop】來從key對應的有序集合中獲取權重在scoreStart到scoreStop之間的成員,同樣這個範圍是閉區間範圍。
127.0.0.1:6379[1]> zrangebyscore Stu 1 5
xiaoming
xiaohong
xiaolan
xiaolv
xiaobai
5.4 獲取有序集合指定成員score權重值
每一個zset集合成員都有一個與之對應的score權重,因此我們可以通過指令【~/ $ zscore key member】來獲取指定成員的權重。
127.0.0.1:6379[1]> zscore Stu xiaobai
5
127.0.0.1:6379[1]> zscore Stu xiaohong
2
5.5 刪除有序集合中指定成員
通過指令【~/ $zrem key member1 member2 …】來將key對應的有序集合中的指定member刪除
127.0.0.1:6379[1]> zrange Stu 0 -1
xiaoming
xiaohong
xiaolan
xiaolv
xiaobai
127.0.0.1:6379[1]> zrem Stu xiaobai xiaolv
2
127.0.0.1:6379[1]> zrange Stu 0 -1
xiaoming
xiaohong
xiaolan
5.6 刪除有序集合中指定權重範圍內的集合成員
通過指令【~/ $ zremrangebyscore key scoreStart scoreStop】來刪除key對應的zset中權重範圍在scoreStart和scoreStop之間的成員,這個範圍仍然是閉區間範圍。
127.0.0.1:6379[1]> zrange Stu 0 -1
xiaoming
xiaohong
xiaolan
127.0.0.1:6379[1]> zremrangebyscore Stu 1 2
2
127.0.0.1:6379[1]> zrange Stu 0 -1
xiaolan