前言
作為Key-value型資料庫,Redis也提供了鍵(Key)和鍵值(Value)的對映關係。但是,除了常規的數值或字串,Redis的鍵值還可以是以下形式之一:
- [Lists (可重複列表) ](#Lists (可重複列表) )
- [Sets (不可重複集合) ](#Sets (不可重複集合))
- [Sorted sets (不可重複有序集合) ](#Sorted sets (不可重複有序集合))
- [Hashes (雜湊表)](#Hashes (雜湊表))
鍵值的資料型別決定了該鍵值支援的操作。Redis支援諸如列表、集合或有序集合的交集、並集、查集等高階原子操作;同時,如果鍵值的型別是普通數字,Redis則提供自增等原子操作。
strings(字串)
string型別是二進位制安全的。意思是redis的string可以包含任何資料,比如jpg圖片或者序列化的物件。
set
設定key對應的值為string型別的value。
127.0.0.1:6379> set name wwl
OK
複製程式碼
setnx
設定key對應的值為string型別的value。如果key已經存在,返回0,nx是not exist的意思。
127.0.0.1:6379> get name
"wwl"
127.0.0.1:6379> setnx name HongWan_new
(integer) 0
127.0.0.1:6379> get name
"HongWan"
複製程式碼
由於原來name有一個對應的值,所以本次的修改不生效,且返回碼是0。
setex
設定key對應的值為string型別的value,並指定此鍵值對應的有效期。
127.0.0.1:6379> setex haircolor 10 red
OK
127.0.0.1:6379> get haircolor
"red"
127.0.0.1:6379> get haircolor
"red"
127.0.0.1:6379> get haircolor
(nil)
複製程式碼
可見由於最後一次的呼叫是10秒以後了,所以取不到haicolor這個鍵對應的值。
setrange
設定指定key的value值的子字串。
127.0.0.1:6379> set name 'HongWan@126.com'
OK
127.0.0.1:6379> get name
"HongWan@126.com"
127.0.0.1:6379> setrange name 8 gmail.com
(integer) 17
127.0.0.1:6379> get name
"HongWan@gmail.com"
複製程式碼
其中的8是指從下標為8(包含8)的字元開始替換。
mset
一次設定多個key的值,成功返回ok表示所有的值都設定了,失敗返回0表示沒有任何值被設定。
127.0.0.1:6379> mset key1 HongWan1 key2 HongWan2
OK
127.0.0.1:6379> get key1
"HongWan1"
127.0.0.1:6379> get key2
"HongWan2"
複製程式碼
msetnx
一次設定多個key的值,成功返回ok表示所有的值都設定了,失敗返回0表示沒有任何值被設定,但是不會覆蓋已經存在的key。
127.0.0.1:6379> get key1
"HongWan1"
127.0.0.1:6379> get key2
"HongWan2"
127.0.0.1:6379> msetnx key2 HongWan2_new key3 HongWan3
(integer) 0
127.0.0.1:6379> get key2
"HongWan2"
127.0.0.1:6379> get key3
(nil)
複製程式碼
可以看出如果這條命令返回0,那麼裡面操作都會回滾,都不會被執行。
get
獲取key對應的string值,如果key不存在返回nil。
127.0.0.1:6379> get name
"HongWan_new"
## 我們獲取一個庫中不存在的鍵name1,那麼它會返回一個nil以表時無此鍵值對
redis 127.0.0.1:6379> get name1
(nil)
複製程式碼
getset
設定key的值,並返回key的舊值。
127.0.0.1:6379> get name
"HongWan"
127.0.0.1:6379> getset name HongWan_new
"HongWan"
127.0.0.1:6379> get name
"HongWan_new"
複製程式碼
如果key不存在,將返回nil,並會設定新值。
redis 127.0.0.1:6379> getset name1 aaa
(nil)
127.0.0.1:6379> get name1
"aaa"
複製程式碼
getrange
獲取指定key的value值的子字串。
127.0.0.1:6379> get name
"HongWan_new"
127.0.0.1:6379> getrange name 0 6
"HongWan"
## 字串左面下標是從0開始的
127.0.0.1:6379> getrange name -7 -1
"Wan_new"
## 字串右面下標是從-1開始的
127.0.0.1:6379> getrange name 7 100
"_new"
## 當下標超出字串長度時,將預設為是同方向的最大下標
複製程式碼
mget
一次獲取多個key的值,如果對應key不存在,則對應返回nil。
127.0.0.1:6379> mget key1 key2 key3
1) "HongWan1"
2) "HongWan2"
3) (nil)
## key3由於沒有這個鍵定義,所以返回nil。
複製程式碼
incr
對key的值做加加操作,並返回新的值。注意incr一個不是int的value會返回錯誤,incr一個不存在的key,則設定key為1 。
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> incr age
(integer) 21
127.0.0.1:6379> get age
"21"
複製程式碼
incrby
同incr類似,加指定值 ,key不存在時候會設定key,並認為原來的value是 0 。
127.0.0.1:6379> get age
"21"
127.0.0.1:6379> incrby age 5
(integer) 26
127.0.0.1:6379> get name
"HongWan_new"
127.0.0.1:6379> get age
"26"
複製程式碼
decr
對key的值做的是減減操作,decr一個不存在key,則設定key為-1。
127.0.0.1:6379> get age
"26"
127.0.0.1:6379> decr age
(integer) 25
127.0.0.1:6379> get age
"25"
複製程式碼
decrby
同decr,減指定值。
127.0.0.1:6379> get age
"25"
127.0.0.1:6379> decrby age 5
(integer) 20
127.0.0.1:6379> get age
"20"
複製程式碼
decrby完全是為了可讀性,我們完全可以通過incrby一個負值來實現同樣效果,反之一樣。
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> incrby age -5
(integer) 15
127.0.0.1:6379> get age
"15"
複製程式碼
append
給指定key的字串值追加value,返回新字串值的長度。
127.0.0.1:6379> get name
"HongWan_new"
127.0.0.1:6379> append name @126.com
(integer) 19
127.0.0.1:6379> get name
"HongWan_new@126.com"
複製程式碼
strlen
取指定key的value值的長度。
127.0.0.1:6379> get name
"HongWan_new@126.com"
127.0.0.1:6379> strlen name
(integer) 19
127.0.0.1:6379> get age
"15"
127.0.0.1:6379> strlen age
(integer) 2
複製程式碼
Lists (可重複列表)
list是一個連結串列結構,主要功能是push、pop、獲取一個範圍的所有值等等,操作中key理解為連結串列的名字。
Redis的list型別其實就是一個每個子元素都是string型別的雙向連結串列。連結串列的最大長度是(2^32)。我們可以通過push,pop操作從連結串列的頭部或者尾部新增刪除元素。這使得list既可以用作棧,也可以用作佇列。
lpush
在key對應list的頭部新增字串元素。
127.0.0.1:6379> lpush mylist "world"
(integer) 1
127.0.0.1:6379> lpush mylist "hello"
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
複製程式碼
在此處我們先插入了一個world,然後在world的頭部插入了一個hello。其中lrange是用於獲取mylist的內容。
rpush
在key對應list的尾部新增字串元素。
127.0.0.1:6379> rpush mylist2 "hello"
(integer) 1
127.0.0.1:6379> rpush mylist2 "world"
(integer) 2
127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
2) "world"
複製程式碼
在此處我們先插入了一個hello,然後在hello的尾部插入了一個world。
linsert
在key對應list的特定位置之前或之後新增字串元素。
127.0.0.1:6379> rpush mylist3 "hello"
(integer) 1
127.0.0.1:6379> rpush mylist3 "world"
(integer) 2
127.0.0.1:6379> linsert mylist3 before "world" "there"
(integer) 3
127.0.0.1:6379> lrange mylist3 0 -1
1) "hello"
2) "there"
3) "world"
複製程式碼
在此處我們先插入了一個hello,然後在hello的尾部插入了一個world,然後又在world的前面插入了there。
lset
設定list中指定下標的元素值(下標從0開始) 。
127.0.0.1:6379> rpush mylist4 "one"
(integer) 1
127.0.0.1:6379> rpush mylist4 "two"
(integer) 2
127.0.0.1:6379> rpush mylist4 "three"
(integer) 3
127.0.0.1:6379> lset mylist4 0 "four"
OK
127.0.0.1:6379> lset mylist4 -2 "five"
OK
127.0.0.1:6379> lrange mylist4 0 -1
1) "four"
2) "five"
3) "three"
複製程式碼
在此處我們依次插入了one,two,three,然後將標是0的值設定為four,再將下標是-2的值設定為five。
lrem
從key對應list中刪除count個和value相同的元素。
count>0時,按從頭到尾的順序刪除。
127.0.0.1:6379> rpush mylist5 "hello"
(integer) 1
127.0.0.1:6379> rpush mylist5 "hello"
(integer) 2
127.0.0.1:6379> rpush mylist5 "foo"
(integer) 3
127.0.0.1:6379> rpush mylist5 "hello"
(integer) 4
127.0.0.1:6379> lrem mylist5 2 "hello"
(integer) 2
127.0.0.1:6379> lrange mylist5 0 -1
1) "foo"
2) "hello"
複製程式碼
count<0時,按從尾到頭的順序刪除。
127.0.0.1:6379> rpush mylist6 "hello"
(integer) 1
127.0.0.1:6379> rpush mylist6 "hello"
(integer) 2
127.0.0.1:6379> rpush mylist6 "foo"
(integer) 3
127.0.0.1:6379> rpush mylist6 "hello"
(integer) 4
127.0.0.1:6379> lrem mylist6 -2 "hello"
(integer) 2
127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "foo"
複製程式碼
count=0時,刪除全部。
127.0.0.1:6379> rpush mylist7 "hello"
(integer) 1
127.0.0.1:6379> rpush mylist7 "hello"
(integer) 2
127.0.0.1:6379> rpush mylist7 "foo"
(integer) 3
127.0.0.1:6379> rpush mylist7 "hello"
(integer) 4
127.0.0.1:6379> lrem mylist7 0 "hello"
(integer) 3
127.0.0.1:6379> lrange mylist7 0 -1
1) "foo"
複製程式碼
ltrim
保留指定key 的值範圍內的資料。
127.0.0.1:6379> rpush mylist8 "one"
(integer) 1
127.0.0.1:6379> rpush mylist8 "two"
(integer) 2
127.0.0.1:6379> rpush mylist8 "three"
(integer) 3
127.0.0.1:6379> rpush mylist8 "four"
(integer) 4
127.0.0.1:6379> ltrim mylist8 1 -1
OK
127.0.0.1:6379> lrange mylist8 0 -1
1) "two"
2) "three"
3) "four"
複製程式碼
lpop
從list的頭部刪除元素,並返回刪除元素。
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> lpop mylist
"hello"
127.0.0.1:6379> lrange mylist 0 -1
1) "world"
複製程式碼
rpop
從list的尾部刪除元素,並返回刪除元素。
127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> rpop mylist2
"world"
127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
複製程式碼
rpoplpush
從第一個list的尾部移除元素並新增到第二個list的頭部,最後返回被移除的元素值,整個操作是原子的。如果第一個list是空或者不存在返回nil。
127.0.0.1:6379> lrange mylist5 0 -1
1) "foo"
2) "hello"
127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "foo"
127.0.0.1:6379> rpoplpush mylist5 mylist6
"hello"
127.0.0.1:6379> lrange mylist5 0 -1
1) "foo"
127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "hello"
3) "foo"
複製程式碼
lindex
返回名稱為key的list中index位置的元素。
127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "foo"
127.0.0.1:6379> lindex mylist5 0
"three"
127.0.0.1:6379> lindex mylist5 1
"foo"
複製程式碼
llen
返回key對應list的長度。
127.0.0.1:6379> llen mylist5
(integer) 2
複製程式碼
Sets (不可重複集合)
Redis的set是string型別的無序集合。set元素最大可以包含(2^32)個元素。
set的是通過hash table實現的,所以新增、刪除和查詢的複雜度都是O(1)。hash table會隨著新增或者刪除自動的調整大小。
sadd
向名稱為key的set中新增元素。
127.0.0.1:6379> sadd myset "hello"
(integer) 1
127.0.0.1:6379> sadd myset "world"
(integer) 1
127.0.0.1:6379> sadd myset "world"
(integer) 0
127.0.0.1:6379> smembers myset
1) "world"
2) "hello"
複製程式碼
本例中,我們向myset中新增了三個元素,但由於第三個元素跟第二個元素是相同的,所以第三個元素沒有新增成功,最後我們用smembers來檢視myset中的所有元素。
srem
刪除名稱為key的set中的元素member。
127.0.0.1:6379> sadd myset2 "one"
(integer) 1
127.0.0.1:6379> sadd myset2 "two"
(integer) 1
127.0.0.1:6379> sadd myset2 "three"
(integer) 1
127.0.0.1:6379> srem myset2 "one"
(integer) 1
127.0.0.1:6379> srem myset2 "four"
(integer) 0
127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
複製程式碼
本例中,我們向myset2中新增了三個元素後,再呼叫srem來刪除one和four,但由於元素中沒有four所以,此條srem命令執行失敗。
spop
隨機返回並刪除名稱為key的set中一個元素。
127.0.0.1:6379> sadd myset3 "one"
(integer) 1
127.0.0.1:6379> sadd myset3 "two"
(integer) 1
127.0.0.1:6379> sadd myset3 "three"
(integer) 1
127.0.0.1:6379> spop myset3
"two"
127.0.0.1:6379> smembers myset3
1) "three"
2) "one"
複製程式碼
本例中,我們向myset3中新增了三個元素後,再呼叫spop來隨機刪除一個元素,可以看到three元素被刪除了。
sdiff
返回所有給定key與第一個key的差集。
127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
127.0.0.1:6379> smembers myset3
1) "three"
2) "one"
127.0.0.1:6379> sdiff myset2 myset3
1) "two"
複製程式碼
本例中,我們可以看到myset2中的元素與myset3中不同的只是three,所以只有three被查出來了,而不是three和one,因為one是myset3的元素。
我們也可以將myset2和myset3換個順序來看一下結果:
127.0.0.1:6379> sdiff myset3 myset2
1) "one"
複製程式碼
這個結果中只顯示了,myset3中的元素與myset2中不同的元素。
sdiffstore
返回所有給定key與第一個key的差集,並將結果存為另一個key。
127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
127.0.0.1:6379> smembers myset3
1) "three"
2) "one"
127.0.0.1:6379> sdiffstore myset4 myset2 myset3
(integer) 1
127.0.0.1:6379> smembers myset4
1) "two"
複製程式碼
sinter
返回所有給定key的交集。
127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
127.0.0.1:6379> smembers myset3
1) "three"
2) "one"
127.0.0.1:6379> sinter myset2 myset3
1) "three"
複製程式碼
通過本例的結果可以看出, myset2和myset3的交集two被查出來了。
sinterstore
返回所有給定key的交集,並將結果存為另一個key。
127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
127.0.0.1:6379> smembers myset3
1) "three"
2) "one"
127.0.0.1:6379> sinterstore myset5 myset2 myset3
(integer) 1
127.0.0.1:6379> smembers myset5
1) "three"
複製程式碼
通過本例的結果可以看出, myset2和myset3的交集被儲存到myset5中了。
sunion
返回所有給定key的並集。
127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
127.0.0.1:6379> smembers myset3
1) "three"
2) "one"
127.0.0.1:6379> sunion myset2 myset3
1) "three"
2) "one"
3) "two"
複製程式碼
通過本例的結果可以看出, myset2和myset3的並集被查出來了。
sunionstore
返回所有給定key的並集,並將結果存為另一個key。
127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
127.0.0.1:6379> smembers myset3
1) "three"
2) "one"
127.0.0.1:6379> sunionstore myset6 myset2 myset3
(integer) 3
127.0.0.1:6379> smembers myset6
1) "three"
2) "one"
3) "two"
複製程式碼
通過本例的結果可以看出, myset2和myset3的並集被儲存到myset6中了。
smove
從第一個key對應的set中移除member並新增到第二個對應set中。
127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
127.0.0.1:6379> smove myset2 myset7 three
(integer) 1
127.0.0.1:6379> smembers myset7
1) "three"
複製程式碼
通過本例可以看到,myset2的three被移到myset7中了。
scard
返回名稱為key的set的元素個數。
127.0.0.1:6379> scard myset2
(integer) 1
複製程式碼
sismember
測試member是否是名稱為key的set的元素。
127.0.0.1:6379> smembers myset2
1) "two"
127.0.0.1:6379> sismember myset2 two
(integer) 1
127.0.0.1:6379> sismember myset2 one
(integer) 0
複製程式碼
通過本例可以看到,two是myset2的成員,而one不是。
srandmember
隨機返回名稱為key的set的一個元素,但是不刪除元素。
127.0.0.1:6379> smembers myset3
1) "three"
2) "one"
127.0.0.1:6379> srandmember myset3
"three"
127.0.0.1:6379> srandmember myset3
"one"
127.0.0.1:6379> srandmember myset3
"one"
複製程式碼
通過本例可以看到,第二次返回了元素"one",但是並沒有刪除"one"元素。
Sorted sets (不可重複有序集合)
sorted set是set的一個升級版本,它在set的基礎上增加了一個順序屬性,這一屬性在新增修改元素的時候可以指定,每次指定後,zset會自動重新按新的值調整順序。可以理解為有兩列的mysql表,一列存value,一列存順序。
和set一樣sorted set也是string型別元素的集合,不同的是每個元素都會關聯一個double型別的score。sorted set的實現是skip list和hash table的混合體。
zadd
向名稱為key的zset中新增元素member,score用於排序。如果該元素已經存在,則根據score更新該元素的順序。
127.0.0.1:6379> zadd myzset 1 "one"
(integer) 1
127.0.0.1:6379> zadd myzset 2 "two"
(integer) 1
127.0.0.1:6379> zadd myzset 3 "two"
(integer) 0
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "3"
複製程式碼
zrem
刪除名稱為key的zset中的元素member。
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "3"
127.0.0.1:6379> zrem myzset two
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
複製程式碼
可以看到two被刪除了。
zincrby
如果在名稱為key的zset中已經存在元素member,則該元素的score增加increment;否則向集合中新增該元素,其score的值為increment。
127.0.0.1:6379> zadd myzset2 1 "one"
(integer) 1
127.0.0.1:6379> zadd myzset2 2 "two"
(integer) 1
127.0.0.1:6379> zincrby myzset2 2 "one"
"3"
127.0.0.1:6379> zrange myzset2 0 -1 withscores
1) "two"
2) "2"
3) "one"
4) "3"
複製程式碼
本例中將one的score從1增加了2,增加到了3。
zrank
返回名稱為key的zset中member元素的排名(按score從小到大排序)即下標。
127.0.0.1:6379> zadd myzset3 1 "one"
(integer) 1
127.0.0.1:6379> zadd myzset3 2 "two"
(integer) 1
127.0.0.1:6379> zadd myzset3 3 "three"
(integer) 1
127.0.0.1:6379> zadd myzset3 5 "five"
(integer) 1
127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
8) "5"
127.0.0.1:6379> zrank myzset3 two
(integer) 1
複製程式碼
zrevrank
返回名稱為key的zset中member元素的排名(按score從大到小排序)即下標。
127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
8) "5"
127.0.0.1:6379> zrevrank myzset3 two
(integer) 2
複製程式碼
按從大到小排序的話two是第三個元素,下標是2。
zrevrange
返回名稱為key的zset(按score從大到小排序)中的index從start到end的所有元素。
127.0.0.1:6379> zrevrange myzset3 0 -1 withscores
1) "five"
2) "5"
3) "three"
4) "3"
5) "two"
6) "2"
7) "one"
8) "1"
複製程式碼
zrangebyscore
返回集合中score在給定區間的元素。
127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
8) "5"
127.0.0.1:6379> zrangebyscore myzset3 2 3 withscores
1) "two"
2) "2"
3) "three"
4) "3"
複製程式碼
zcount
返回集合中score在給定區間的數量。
127.0.0.1:6379> zrevrange myzset3 0 -1 withscores
1) "five"
2) "5"
3) "three"
4) "3"
5) "two"
6) "2"
7) "one"
8) "1"
127.0.0.1:6379> zcount myzset3 2 3
(integer) 2
複製程式碼
zcard
返回集合中元素個數。
127.0.0.1:6379> zrevrange myzset3 0 -1 withscores
1) "five"
2) "5"
3) "three"
4) "3"
5) "two"
6) "2"
7) "one"
8) "1"
127.0.0.1:6379> zcard myzset3
(integer) 4
複製程式碼
zscore
返回給定元素對應的score。
127.0.0.1:6379> zrevrange myzset3 0 -1 withscores
1) "five"
2) "5"
3) "three"
4) "3"
5) "two"
6) "2"
7) "one"
8) "1"
127.0.0.1:6379> zscore myzset3 two
"2"
複製程式碼
zremrangebyrank
刪除集合中排名在給定區間的元素。
127.0.0.1:6379> zrevrange myzset3 0 -1 withscores
1) "five"
2) "5"
3) "three"
4) "3"
5) "two"
6) "2"
7) "one"
8) "1"
127.0.0.1:6379> zremrangebyrank myzset3 3 3
(integer) 1
127.0.0.1:6379> zrevrange myzset3 0 -1 withscores
1) "three"
2) "3"
3) "two"
4) "2"
5) "one"
6) "1"
複製程式碼
在本例中我們將myzset3中按從小到大排序結果的下標為3的元素刪除了。
zremrangebyscore
刪除集合中score在給定區間的元素。
127.0.0.1:6379> zrevrange myzset3 0 -1 withscores
1) "three"
2) "3"
3) "two"
4) "2"
5) "one"
6) "1"
127.0.0.1:6379> zremrangebyscore myzset3 1 2
(integer) 2
127.0.0.1:6379> zrevrange myzset3 0 -1 withscores
1) "three"
2) "3"
複製程式碼
在本例中我們將myzset3中按從小到大排序結果的score在1~2之間的元素刪除了。
Hashes (雜湊表)
Redis hash是一個string型別的field和value的對映表。它的新增、刪除操作都是O(1)(平均),hash特別適合用於儲存物件。
相較於將物件的每個欄位存成單個string型別,將一個物件儲存在hash型別中會佔用更少的記憶體,並且可以更方便的存取整個物件。
hset
設定hash field為指定值,如果key不存在,則先建立。
127.0.0.1:6379> hset myhash field1 Hello
(integer) 1
複製程式碼
hsetnx
設定hash field為指定值,如果key不存在,則先建立。如果field已經存在,返回0,nx是not exist的意思。
127.0.0.1:6379> hsetnx myhash field "Hello"
(integer) 1
127.0.0.1:6379> hsetnx myhash field "Hello"
(integer) 0
複製程式碼
第一次執行是成功的,但第二次執行相同的命令失敗,原因是field已經存在了。
hmset
同時設定hash的多個field。
127.0.0.1:6379> hmset myhash field1 Hello field2 World
OK
複製程式碼
hget
獲取指定的hash field。
127.0.0.1:6379> hget myhash field1
"Hello"
127.0.0.1:6379> hget myhash field2
"World"
127.0.0.1:6379> hget myhash field3
(nil)
複製程式碼
由於資料庫沒有field3,所以取到的是一個空值nil。
hmget
獲取全部指定的hash filed。
127.0.0.1:6379> hmget myhash field1 field2 field3
1) "Hello"
2) "World"
3) (nil)
複製程式碼
由於資料庫沒有field3,所以取到的是一個空值nil。
hincrby
給指定的hash filed 加上給定值。
127.0.0.1:6379> hset myhash field3 20
(integer) 1
127.0.0.1:6379> hget myhash field3
"20"
127.0.0.1:6379> hincrby myhash field3 -8
(integer) 12
127.0.0.1:6379> hget myhash field3
"12"
複製程式碼
在本例中我們將field3的值從20降到了12,即做了一個減8的操作。
hexists
測試指定field是否存在。
127.0.0.1:6379> hexists myhash field1
(integer) 1
127.0.0.1:6379> hexists myhash field9
(integer) 0
複製程式碼
通過上例可以說明field1存在,但field9是不存在的。
hlen
返回指定hash的field數量。
127.0.0.1:6379> hlen myhash
(integer) 4
複製程式碼
通過上例可以看到myhash中有4個field。
hdel
刪除指定hash的指定field。
127.0.0.1:6379> hlen myhash
(integer) 4
127.0.0.1:6379> hdel myhash field1
(integer) 1
127.0.0.1:6379> hlen myhash
(integer) 3
複製程式碼
hkeys
返回hash的所有field。
127.0.0.1:6379> hkeys myhash
1) "field"
2) "field2"
3) "field3"
複製程式碼
hvals
返回hash的所有value。
127.0.0.1:6379> hvals myhash
1) "Hello"
2) "World"
3) "12"
複製程式碼
hgetall
獲取某個hash中全部的filed及value。
127.0.0.1:6379> hgetall myhash
1) "field"
2) "Hello"
3) "field2"
4) "World"
5) "field3"
6) "12"
複製程式碼
一下子將myhash中所有的field及對應的value都取出來了。