一、String數(shù)據(jù)類型
1、SET/GET/APPEND/STRLEN
(1)?APPEND
(2)?SET/STRLEN
2、?INCR/ DECR/INCRBY/DECRBY
(1)INCR/ DECR
(2)?INCRBY/DECRBY
INCRBY key increment:key值增加指定的整數(shù)DECRBY key decrement:key值減少指定的整數(shù)
?3、GETSET
4、?SETEX
?5、SETNX
6、MSET/MGET/MSETNX
?二、List數(shù)據(jù)類型
1、LPUSH/LPUSHX/LRANGE
?2、LPOP/LLEN
3、??LREM/ LSET/LINDEX/LTRIM
4 、?LINSERT
5、?RPUSH/RPUSHX/RPOP/RPOPLPUSH
?三、Hash數(shù)據(jù)類型(散列類型)
1、?HSET/HGET/HDEL/HEXISTS/HLEN/HSETNX
2、HINCRBY
3、?HGETALL/ HKEYS/HVALS/ HMGET/ HMSET?
四、set數(shù)據(jù)類型(無序集合)
1、?SADD/SMEMBERS/SCARD/ SISMEMBER
2、?SPOP/SREM/SRANDMEMBER/SMOVE
?五、Sorted Set數(shù) 據(jù)類型(zset、 有序集合)
1、ZADD/ZCARD/ZCOUNT/ZREM/ZINCRBY/ZSCORE/ZRANGE/ZRANK
2、ZRANGEBYSCORE/ZREMRANGEBYRANK/ZREMRANGEBYSCORE
3、?ZREVRANGE/ ZREVRANGEBYSCORE/ ZREVRANK
一、String數(shù)據(jù)類型
概述:String 是redis最基本的類型,最大能存儲512MB的數(shù)據(jù),String類型是二進(jìn)制安全的,即可以存儲任何數(shù)據(jù)、比如數(shù)字、圖片、序列化對象等
1、SET/GET/APPEND/STRLEN
(1)?APPEND
APPEND key value:追加鍵值,并返回追加后的長度(若鍵不存在,則相當(dāng)于創(chuàng)建)
redis 127.0.0.1:6379> exists xyw #判斷該鍵是否存在,存在返回1,否則返回0。
(integer) 0
redis 127.0.0.1:6379> append xyw "hello" #該鍵并不存在,因此append命令返回當(dāng)前Value的長度。
(integer) 5
redis 127.0.0.1:6379> append xyw " world" #該鍵已經(jīng)存在,因此返回追加后Value的長度。
(integer) 11
redis 127 .0.0.1:6379> get xyw #通過get命令獲取該鍵,以判斷append的結(jié)果。
"hello world"
(2)?SET/STRLEN
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]:設(shè)置鍵-值對
STRLEN key:統(tǒng)計指定key的字符長度
redis 127 .0.0.1:6379> set xyw "this is a test" #通過set命令為鍵設(shè)置新值,并覆蓋原有值。
OK
redis 127 .0.0.1:6379> get xyw
"this is a test"
redis 127 .0.0.1:6379> strlen xyw #獲取指定Key的字符長度。
(integer) 14
2、?INCR/ DECR/INCRBY/DECRBY
(1)INCR/ DECR
INCR key:key值遞增加1(key值必須為整數(shù))
DECR key:key值遞增減1(key值必須為整數(shù))
127.0.0.1:6379> set xyw 20 #設(shè)置Key的值為20
OK
127.0.0.1:6379> get xyw
"20"
127.0.0.1:6379> incr xyw #該Key的值遞增1
(integer) 21
127.0.0.1:6379> decr xyw #該Key的值遞減1
(integer) 20
127.0.0.1:6379> del xyw #刪除已有鍵。
(integer) 1
127.0.0.1:6379> get xyw
(nil)
127.0.0.1:6379> decr xyw #對空值執(zhí)行遞減操作,其原值被設(shè)定為0,遞減后的值為-1
(integer) -1
redis 127.0.0.1:6379> del xyw
(integer) 1
redis 127.0.0.1:6379> incr xyw #對空值執(zhí)行遞增操作,其原值被設(shè)定為0,遞增后的值為1
(integer) 1
127.0.0.1:6379> set xyw sweetsensetion #將該鍵的Value設(shè)置為不能轉(zhuǎn)換為整型的普通字符串。
OK
127.0.0.1:6379> get xyw
"sweetsensetion"
127.0.0.1:6379> incr xyw
(error) ERR value is not an integer or out of range
127.0.0.1:6379> decr xyw
(error) ERR value is not an integer or out of range
(2)?INCRBY/DECRBY
INCRBY key increment:key值增加指定的整數(shù)
DECRBY key decrement:key值減少指定的整數(shù)
127.0.0.1:6379> set xyw 10
OK
127.0.0.1:6379> get xyw
"10"
127.0.0.1:6379> decrby xyw 5 #減少指定的整數(shù)
(integer) 5
127.0.0.1:6379>
127.0.0.1:6379> incrby xyw 3 #增加指定的整數(shù)
(integer) 8
?3、GETSET
GETSET key value:獲取key值并返回,同時給key設(shè)置新值
127.0.0.1:6379> incr mycounter #將計數(shù)器的值原子性的遞增1
(integer) 1
127.0.0.1:6379> get mycounter
"1"
127.0.0.1:6379> getset mycounter "sweet sensetion" #在獲取計數(shù)器原有值的同時,并將其設(shè)置為新值,這兩個操作原子性的同時完成。
"1" #get的原鍵值
127.0.0.1:6379> get mycounter #查看設(shè)置后的結(jié)果。
"sweet sensetion"
4、?SETEX
setex key seconds value:設(shè)置指定key的過期時間為seconds
#seconds:過期時間
redis 127.0.0.1:6379> setex mykey 10 "hello" #設(shè)置指定Key的過期時間為10秒。
OK
redis 127.0.0.1:6379> ttl mykey #通過ttl命令查看一下指定Key的剩余存活時間(秒數(shù)),-2表示已經(jīng)過期,-1表示永不過期。
(integer) 4 #表示還有4秒過期
redis 127.0.0.1:6379> get mykey #在該鍵的存活期內(nèi)我們?nèi)匀豢梢垣@取到它的Value。
"hello"
redis 127.0.0.1:6379> ttl mykey #該ttl命令的返回值顯示,該Key已經(jīng)過期。
(integer) -2
redis 127.0.0.1:6379> get mykey #獲取已過期的Key將返回nil。
(nil)
127.0.0.1:6379> set mykey "hello"
OK
127.0.0.1:6379> ttl mykey
(integer) -1 #-1永不過期
?5、SETNX
SETNX key value:不存在鍵的話執(zhí)行set操作,存在的話不執(zhí)行
#若鍵不存在即會創(chuàng)建新鍵,若鍵已存在則不執(zhí)行
redis 127.0.0.1:6379> del mykey #刪除該鍵,以便于下面的測試驗證。
(integer) 1
redis 127.0.0.1:6379> setnx mykey "hello" #該鍵并不存在,因此setnx命令執(zhí)行成功。
(integer) 1
redis 127.0.0.1:6379> setnx mykey "world" #該鍵己經(jīng)存在,因此本次設(shè)置沒有產(chǎn)生任何效果。
(integer) 0
redis 127.0.0.1:6379> get mykey #從結(jié)果可以看出,返回的值仍為第一次設(shè)置的值。
"hello"
6、MSET/MGET/MSETNX
?MSET key value [key value ...]:批量設(shè)置鍵-值對
MGET key [key ...]:批量獲取鍵值對
MSETNX key value [key value ...]:批量設(shè)置鍵-值對,都不存在就執(zhí)行并返回1;只要有一個存在就不執(zhí)行并返回0
redis 127.0.0.1:6379> mset key1 "hello" key2 "world" #批量設(shè)置了key1和key2兩個鍵。
OK
redis 127.0.0.1:6379> mget key1 key2 #批量獲取了key1和key2兩個鍵的值。
1) "hello"
2) "world"
redis 127.0.0.1:6379> msetnx key3 "zhang" key4 "san" #批量設(shè)置了key3和key4兩個鍵,因為之前他們并不存在,所以msetnx命令執(zhí)行成功并返回1。
(integer) 1
redis 127 .0.0.1:6379> mget key3 key4
1) "zhang"
2) "san"
redis 127.0.0.1:6379> msetnx key3 "hello" key5 "world" #批量設(shè)置了key3和key5兩個鍵,但是key3E已經(jīng)存在,所以msetnx命令執(zhí)行失敗并返回0。
(integer) 0
redis 127.0.0.1:6379> mget key3 key5 #批量獲取key3和key5,由于key5沒有設(shè)置成功,所以返回nil。
1) "zhang"
2) (nil)
127.0.0.1:6379> setnx mykey "hello"
(integer) 1
127.0.0.1:6379> setnx mykey "world"
(integer) 0
127.0.0.1:6379> get mykey
"hello"
127.0.0.1:6379> MSET 1 hello 2 world
OK
127.0.0.1:6379> MGET 1 2
1) "hello"
2) "world"
127.0.0.1:6379> MSETNX 3 sweet 4 sensetion
(integer) 1
127.0.0.1:6379> MGET 3 4
1) "sweet"
2) "sensetion"
127.0.0.1:6379> MSETNX 3 close 5 cute
(integer) 0
127.0.0.1:6379> MGET 3 5
1) "sweet"
2) (nil)
?二、List數(shù)據(jù)類型
概述:列表的元素類型為string,按照插入順序排序,在列表的頭部或尾部添加元素
1、LPUSH/LPUSHX/LRANGE
LPUSH key value [value ...]在頭部(左側(cè))依次插入列表元素
LPUSHX key value:鍵必須存在才能執(zhí)行,在頭部插入元素值并返回并返回列表元素數(shù)量
LRANGE key start stop:取從位置索引start到位置索引stop的所有元素(所以以0開始)
redis 127.0.0.1:6379> del mykey
(integer) 1
redis 127.0.0.1:6379> lpush mykey a b c d #mykey鍵并不存在,該命令會創(chuàng)建該鍵及與其關(guān)聯(lián)的List,之后在將參數(shù)中的values在左側(cè)依次插入。
(integer) 4
redis 127.0.0.1:6379> lrange mykey 0 2 #取從位置0開始到位置2結(jié)束的3個元素。
2) "c"
3) "b"
redis 127.0.0.1:6379> lrange mykey 0 -1 #取鏈表中的全部元素,其中0表示第一個元素,-1表示最后一個元素。
1) "d"
3) "b"
redis 127.0.0.1:6379> lpushx mykey2 e #mykey2鍵此時并不存在,因此lpushx命令將不會進(jìn)行任何操作,其返回值為0。
(integer) 0
redis 127.0.0.1:6379> lrange mykey2 0 -1 #可以看到mykey2沒有關(guān)聯(lián)任何List Value。
(empty list or set)
redis 127 .0.0.1:6379> lpushx mykey e #mykey鍵此時已經(jīng)存在,所以lpushx命令插入成功,并返回鏈表中當(dāng)前元素的數(shù)量。
(integer) 5
redis 127 .0.0.1:6379> lrange mykey 0 0 #獲取該鍵的List Value的頭部元素。
1) "e"
127.0.0.1:6379> lpushx mykey f g #可以批量插入
(integer) 7
127.0.0.1:6379> lrange mykey 0 -1
1) "g"
2) "f"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"
?2、LPOP/LLEN
LPOP key:移除并返回頭部的一個元素
LLEN key :統(tǒng)計列表內(nèi)元素數(shù)量
redis 127.0.0.1:6379> del mykey
(integer) 1
redis 127.0.0.1:6379> lpush mykey a b c d
(integer) 4
redis 127 .0.0.1:6379> lpop mykey
#移除并返回mykey鍵的第一個元素, 從左取
"d"
redis 127 .0.0.1:6379> lpop mykey
redis 127 .0.0.1:6379> llen mykey
#在執(zhí)行l(wèi)pop命令兩次后,鏈表頭部的兩個元素已經(jīng)被彈出,此時鏈表中元素的數(shù)量是2(統(tǒng)計列表長度)
(integer) 2
3、??LREM/ LSET/LINDEX/LTRIM
LREM key count value:從頭部開始刪除count個值為value的元素,并返回實際刪除數(shù)量
LSET key index value:將位置索引為index的元素設(shè)置新值為value
LINDEX key index:獲取索引為index的元素
LTRIM key start stop:僅保留從位置索引start到索引stop的元素
redis 127.0.0.1:6379> del mykey
(integer) 1
redis 127.0.0.1:6379> lpush mykey a b c d a c #為后面的示例準(zhǔn)備測試數(shù)據(jù)。
(integer) 6
redis 127.0.0.1:6379> lrem mykey 2 a
(integer) 2
#從頭部(left)向尾部(right)變量鏈表,刪除2個值等于a的元素,返回值為實際刪除的數(shù)量。
#刪除指定元素,也可以指定數(shù)量,從左往右算。
redis 127.0.0.1:6379> lrange mykey 0 -1
#看出刪除后鏈表中的全部元素。
1) "c"
2) "d"
3) "c"
4) "b"
redis 127.0.0.1:6379> lindex mykey 1
#獲取索引值為1 (頭部的第二個元素)的元素值。
"d"
redis 127.0.0.1:6379> lset mykey 1 e
#將索引值為1(頭部的第二個元素)的元素值設(shè)置為新值e。
0K
redis 127.0.0.1:6379> lindex mykey 1
#查看是否設(shè)置成功。
"e"
redis 127.0.0.1:6379> lindex mykey 6
#索引值6超過了鏈表中元素的數(shù)量,該命令返回nil。
(nil)
redis 127.0.0.1:6379> lset mykey 6 h
#設(shè)置的索引值6超過了鏈表中元素的數(shù)量,設(shè)置失敗,該命令返回錯誤信息。
(error) ERR index out of range
redis 127.0.0.1:6379> ltrim mykey 0 2
#僅保留索引值0到2之間的3個元素,注意第0個和第2個元素均被保留。
OK
redis 127.0.0.1:6379> lrange mykey 0 -1
#查看trim后的結(jié)果。
1) "c"
2) "e "
3) "c"
4 、?LINSERT
LINSERT key BEFORE|AFTER pivot value:在元素pivot的前面(做左)或后面(右)插入新元素value?
redis 127.0.0.1:6379> del mykey #刪除該鍵便于后面的測試。
(integer) 1
redis 127.0.0.1:6379> lpush mykey a b c d e #為后面的示例準(zhǔn)備測試數(shù)據(jù)。
(integer) 5
redis 127.0.0.1:6379> linsert mykey before a a1 #在a的前面插入新元素a1。
(integer) 6 #插入后元素總數(shù)
redis 127.0.0.1:6379> lrange mykey 0 -1 #查看是否插入成功,從結(jié)果看已經(jīng)插入
1) "e"
2) "d"
3) "c"
4) "b"
5) "a1"
6) "a"
redis 127.0.0.1:6379> linsert mykey after e e2 #在e的后面插入新元素e2,從返回結(jié)果看已經(jīng)插入成功。
(integer) 7
redis 127.0.0.1:6379> lindex mykey 1 #再次查看是否插入成功。
"e2"
redis 127 .0.0.1:6379> linsert mykey after k a #在不存在的元素之前或之后插入新元素,linsert命令操作失敗,并返回-1。
(integer) -1
redis 127 .0.0.1:6379> linsert mykey1 after a a2 #為不存在的Key插入新元素,linsert命令操作失敗,返回0。
(integer) 0
5、?RPUSH/RPUSHX/RPOP/RPOPLPUSH
RPUSH key value [value ...]在列表的尾部依次插入value
RPUSHX key value:key必須存在才可執(zhí)行,將value從尾部插入,并返回所有元素數(shù)量
RPOP key:在尾部彈出(移除)一個元素,并返回該元素
RPOPLPUSH source destination:在key1的尾部彈出一個元素并返回,將它插入key2的頭部
redis 127.0.0.1:6379> del mykey
#刪除該鍵,以便于后面的測試。
(integer) 1
redis 127.0.0.1:6379> rpush mykey a b c d
#從鏈表的尾部插入?yún)?shù)中給出的values,插入順序是從右到左依次插入。
(integer) 4
redis 127.0.0.1:6379> lrange mykey 0 -1
#通過lrange命令可以獲悉rpush在插入多值時的插入順序。
1) "a"
2) "b"
3) "c"
4) "d"
redis 127.0.0.1:6379> rpushx mykey e
#該鍵已經(jīng)存在并且包含4個元素,rpushx命令將執(zhí)行成功,并將元素e插入到鏈表的尾部。
(integer) 5
redis 127.0.0.1:6379> lindex mykey 4
#通過lindex命令可以看出之前的rpushx命令確實執(zhí)行成功,因為索引值為4的元素已經(jīng)是新元素了。
redis 127.0.0.1:6379> rpushx mykey2 e
#由于mykey2鍵并不存在,因此rpushx命 令不會插入數(shù)據(jù),其返回值為0。
(integer) 0
redis 127.0.0.1:6379> lrange mykey 0 -1
#在執(zhí)行rpoplpush命令前,先看一下mykey中鏈 表的元素有哪些,注意他們的位置關(guān)系。
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> RPOP mykey
#移除并返回mykey鍵的第一個元素,從右取
"e"
127.0.0.1:6379> LRANGE mykey 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
redis 127.0.0.1:6379> rpoplpush mykey mykey2
#將mykey的尾部元素e彈出,同時再插入到mykey2的頭部(原子性的完成這兩步操作)。
"d"
redis 127.0.0.1:6379> lrange mykey 0 -1
#通過lrange命令查看mykey在彈出尾部元素后的結(jié)果。
1) "a"
2) "b"
3) "c"
redis 127.0.0.1:6379> lrange mykey2 0 -1
#通過lrange命令查看mykey2在插入元素后的結(jié)果。
1) "d"
redis 127.0.0.1:6379> rpoplpush mykey mykey
#將source和destination設(shè)為同一鍵, 將mykey中 的尾部元素移到其頭部。
redis 127.0.0.1:6379> lrange mykey 0 -1
#查看移動結(jié)果。
1) "c"
2) "a"
3) "b"
?
?三、Hash數(shù)據(jù)類型(散列類型)
概述:hash用 于存儲對象。
可以采用這樣的命名方式:對象類別和ID構(gòu)成鍵名,使用字段表示對象的屬性,而字段值則存儲屬性值。如:存儲ID為2的汽車對象。
如果Hash中包含很少的字段,那么該類型的數(shù)據(jù)也將僅占用很少的磁盤空間。每一個Hash 可以存儲4294967295個鍵值對。
?
1、?HSET/HGET/HDEL/HEXISTS/HLEN/HSETNX
HSET key field value:給key設(shè)置字段為field,值為value
HGET key field:獲取key的字段為field的值
HDEL key field [field ...]:刪除key中字段名為field的字段,刪除成功返回1
HEXISTS key field:判斷key中是否存在字段名為field的字段,由于存在,返回值為1
HLEN key:命令獲取key的字段數(shù)量
HSETNX key field value:field必須不存在才可執(zhí)行,添加字段field及其對應(yīng)的值。存在即不執(zhí)行.成功返回1
redis 127.0.0.1:6379> hset myhash field1 "zhang"
#給鍵值為myhash的鍵設(shè)置字段為field1,值為zhang。
(integer) 1
redis 127.0.0.1:6379> hget myhash field1
#獲取鍵值為myhash,字段為field1的值。
"zhang"
redis 127.0.0.1:6379> hget myhash field2
#myhash鍵中不存在field2字段,因此返回nil。
(nil)
redis 127.0.0.1:6379> hset myhash field2 "san"
#給myhash添加一個 新的字段field2,其值為san。
(integer) 1
redis 127.0.0.1:6379> hlen myhash
#hlen命令獲取myhash鍵的字段數(shù)量。
(integer) 2
redis 127.0.0.1:6379> hexists myhash field1
#判斷myhash鍵中是否存在字段名為field1的字段,由于存在,返回值為1。
(integer) 1
redis 127.0.0.1:6379> hdel myhash field1
#刪除myhash鍵中字段名為field1的字段,刪除成功返回1。
(integer)1
redis 127.0.0.1:6379> hdel myhash field1
#再次刪除myhash鍵中字段名為field1的字段,由于上一條命令已經(jīng)將其刪除,因為沒有刪除,返回0。
(integer) 0
redis 127.0.0.1:6379> hlen myhash
#hlen命令獲取myhash鍵的字段數(shù)量。
(integer) 2
redis 127.0.0.1:6379> hexists myhash field1
#判斷myhash鍵中是否存在字段名為field1的字段,由于存在,返回值為1。
(integer) 1
redis 127.0.0.1:6379> hdel myhash field1
#刪除myhash鍵中字段名為field1的字段,刪除成功返回1。
(integer) 1
redis 127.0.0.1:6379> hdel myhash field1
redis 127.0.0.1:6379> hdel myhash field1
#刪除myhash鍵中字段名為field1的字段,刪除成功返回1。
(integer) 1
redis 127.0.0.1:6379> hdel myhash field1
#再次刪除myhash鍵中字段名為field1的字段,由于.上- -條命令已經(jīng)將其刪除,因為沒有刪除,返回0。
(integer) 0
redis 127 .0.0.1:6379> hexists myhash field1
#判斷myhash鍵中是否存在field1字段,由于上一-條命令已經(jīng)將其刪除,因為返回0。
(integer) 0
redis 127.0.0.1:6379> hsetnx myhash field1 zhang
#通過hsetnx命令給myhash添加新字段field1,其值為zhang,因為該字段已經(jīng)被刪除,所以該命令添加成功并返回1。
(integer) 1
redis 127.0.0.1:6379> hsetnx myhash field1 zhang
#由于myhash的field1字段已經(jīng)通過上一條命令添加成功,因為本條命令不做任何操作后返回0。
(integer) 0
2、HINCRBY
HINCRBY key field increment:給key的字段field的值增加increment
redis 127.0.0.1:6379> del myhash
#刪除該鍵,便于后面示例的測試。
(integer) 1
redis 127.0.0.1:6379> hset myhash field 5
#準(zhǔn)備測試數(shù)據(jù),該myhash的field字段 設(shè)定值5。
(integer) 1
redis 127.0.0.1:6379> hincrby myhash field 1
#hincrby命令給myhash的field字段的值加1,返回加后的結(jié)果。
(integer) 6
redis 127.0.0.1:6379> hincrby myhash field -1
#hincrby命令給myhash的field字段的值加-1,返回加后的結(jié)果。
(integer) 5
redis 127.0.0.1:6379> hincrby myhash field -10
#hincrby命令給myhash的field字段的值加-10,返回加后的結(jié)果。
(integer) -5
3、?HGETALL/ HKEYS/HVALS/ HMGET/ HMSET?
HGETALL key:返回所有字段及其值
HKEYS key:獲取myhash鍵內(nèi)所有的字段
HVALS key:獲取myhash鍵內(nèi)所有字段的值
HMGET key field [field ...]:批量獲取多個字段
HMSET key field value [field value ...]:批量設(shè)置多個字段
redis 127.0.0.1:6379> del myhash
#刪除該鍵,便于后而示例測試。
(integer)
redis 127.0.0.1:6379> hmset myhash field1 "hello" field2 "world"
#hmset命令為該鍵myhash,一次性設(shè)置多個字段, 分別是field1="hel1o", field2= "world"。
0K
redis 127.0.0.1:6379> hmget myhash field1 field2 field3
#hmget命令獲取myhash鍵的多個字段,其中field3并不存在, 因為在返回結(jié)果中與該字段對應(yīng)的值為nil。
l) "hello"
2) "world"
3) (nil)
redis 127.0.0.1:6379> hgetall myhash
#hgetall命令返回myhash鍵的所有字段及其值,從結(jié)果中可以看出,他們是逐對列出的。
1) "field1"
2) "hello"
3) "field2"
4) "world"
redis 127.0.0.1:6379> hkeys myhash
#hkeys命令僅獲取myhash鍵中所有字段的名字。
1) "field1"
2) "field2"
redis 127.0.0.1:6379> hvals myhash
#hvals命令僅獲取myhash鍵中所有字段的值。
1) "hello"
2) "world"
四、set數(shù)據(jù)類型(無序集合)
?概述:無序集合,元素類型為String類型,元素具有唯一-性,不允許存在重復(fù)的成員。多個集合類型之間可以進(jìn)行并集、交集和差集運算
應(yīng)用范圍:
1、可以使用Redis的Set數(shù)據(jù)類型跟蹤一些唯一性數(shù)據(jù),比如訪問某一博客的唯一IP地址信息。對于此場景,我們僅需在每次訪問該博客時將訪問者的IP存入Redis中,Set數(shù)據(jù)類型會自動保證IP地址的唯一性。
2、充分利用set類型的服務(wù)端聚合操作方便、高效的特性,可以用于維護(hù)數(shù)據(jù)對象之間的關(guān)聯(lián)關(guān)系。比如所有購買某一電子設(shè)備的客戶ID被存儲在一個指定的Set中,而購買另外一種電子產(chǎn)品的客戶ID被存儲在另外–個Set中,如果此時我們想獲取有哪些客戶同時購買了這兩種商品時,Setintersections命 令就可以充分發(fā)揮它的方便和效率的優(yōu)勢了。
1、?SADD/SMEMBERS/SCARD/ SISMEMBER
SADD key member [member ...]:向myset鍵內(nèi)插入不存在的成員,存在時只該成員不插入
SMEMBERS key:查看myset鍵的所有成員(無序)
SCARD key:統(tǒng)計myset集合中所有成員的數(shù)量
SISMEMBER key member:判斷成員是否存在,存在返回1,不存在返回0
redis 127.0.0.1:6379> sadd myset a b c
#插入測試數(shù)據(jù),由于該鍵myset之前并不存在,因此參數(shù)中的三個成員都被正常插入。
(integer) 3
redis 127.0.0.1:6379> sadd myset a d e
#由于參數(shù)中的a在myset中已經(jīng)存在,因此本次操作僅僅插入了d和e兩個新成員。
(integer) 2
redis 127.0.0.1:6379> sismember myset a
#判斷a是否已經(jīng)存在,返回值為1表示存在。
(integer) 1
redis 127.0.0.1:6379> sismember myset f
#判斷f是否已經(jīng)存在,返回值為0表示不存在。
(integer)
redis 127.0.0.1: 6379> smembers myset
#通過smembers命令查看插入的結(jié)果,從結(jié)果可以看出,輸出的順序和插入順序無關(guān)。
1) "c"
2) "d"
3) "a"
4) "b"
5) "e"
redis 127.0.0.1:6379> scard myset
#獲取Set集合中元素的數(shù)量。
(integer) 5
2、?SPOP/SREM/SRANDMEMBER/SMOVE
SPOP key [count]:隨機(jī)移除set鍵內(nèi)一成員,并返回其值
SREM key member [member ...]:移除指定的集合中的成員,若不存在則只移除存在的
SRANDMEMBER key [count]:隨機(jī)返回集合中某一成員
SMOVE source destination member:將指定成員member從鍵source移動到鍵destination
?
redis 127.0.0.1:6379> del myset
#刪除該鍵,便于后面的測試。
(integer) 1
redis 127.0.0.1:6379> sadd myset a b c d
#為后面的示例準(zhǔn)備測試數(shù)據(jù)。
(integer) 4
redis 127.0.0.1:6379> smembers myset
#查看set中成員的位置。
1) "c"
2) "b"
3) "d"
4) "a"
redis 127 .0.0.1: 6379> srandmember myset
#從結(jié)果可以看出,該命令確實是隨機(jī)的返回了某一成員。
"c"
redis 127 .0.0.1:6379> spop myset
#隨機(jī)的移除并返回Set中的某一成員。
"b"
redis 127.0.0.1: 6379> smembers myset
#查看移出后set的成員信息。
1) "c"
2) "d"
3) "a"
redis 127.0.0.1:6379> srem myset a d f #從Set中移出a、 d和f三個成員,其中f并不存在,因此只有a和d兩個成員被移出,返回為2。.
(integer) 2
redis 127.0.0.1:6379> smembers myset
#查看移出后的輸出結(jié)果。
1) "c"
redis 127.0.0.1:6379> sadd myset a b
#為后面的smove命令準(zhǔn)備數(shù)據(jù)。
(integer) 2
redis 127 .0.0.1:6379> sadd myset2 c d
(integer) 2
redis 127.0.0.1:6379> smove myset myset2 a
#將a從myset移到myset2,從結(jié)果可以看出移動成功。
(integer) 1
redis 127.0.0.1:6379> smove myset myset2 a
#再次將a從myset移到myset2,由于此時a已經(jīng)不是myset的成員了,因此移動失敗并返回0。
(integer) 0
redis 127 .0.0.1: 6379> smembers myset
#分別查看myset和myset2的成員,確認(rèn)移動是否真的成功。
1) "b"
redis 127.0.0.1:6379> smembers myset2
1) "c"
2) "d"
3) "a"
?五、Sorted Set數(shù) 據(jù)類型(zset、 有序集合)
概述:
a、有序集合,元素類型為Sting,元素具有唯一性, 不能重復(fù)。
b、每個元素都會關(guān)聯(lián)一-個double類型的分?jǐn)?shù)score (表示權(quán)重),可以通過權(quán)重的大小排序,元素的score可以相同。
應(yīng)用范圍:
1)可以用于一個大型在線游戲的積分排行榜。每當(dāng)玩家的分?jǐn)?shù)發(fā)生變化時,可以執(zhí)行ZADD命令更新玩家的分?jǐn)?shù),此后再通過ZRANGE命令獲
取積分T0P10的用戶信息。當(dāng)然我們也可以利用ZRANK命令通過username來獲取玩家的排行信息。最后我們將組合使用ZRANGE和ZRANK命令快
速的獲取和某個玩家積分相近的其他用戶的信息。
2) Sorted- Set類型還可用于構(gòu)建索引數(shù)據(jù)。
1、ZADD/ZCARD/ZCOUNT/ZREM/ZINCRBY/ZSCORE/ZRANGE/ZRANK
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]:添加一個分?jǐn)?shù)為1的成員ong
ZCARD key:統(tǒng)計Sorted Set鍵中成員的數(shù)量
ZCOUNT key min max:獲取Sorted Set鍵內(nèi)分?jǐn)?shù)在min<=score<=max范圍的的成員數(shù)量
ZREM key member [member ...]:刪除指定成員并返回刪除數(shù)量
ZINCRBY key increment member:將指定成員的分?jǐn)?shù)增加指定的分值。若成員不存在,則在0的基礎(chǔ)上增加
ZSCORE key member:獲取成員member的分?jǐn)?shù)并返回
ZRANGE key start stop [WITHSCORES]:查看從索引start到索引stop鍵的所有成員及其分?jǐn)?shù)
ZRANK key member:獲取myzset鍵內(nèi)成員member位置索引值
redis 127.0.0.1:6379> zadd myzset 1 "one"
#添加一個分?jǐn)?shù)為1的成員。
(integer) 1
redis 127.0.0.1:6379> zadd myzset 2 "two" 3 "three"
#添加兩個分?jǐn)?shù)分別是2和3的兩個成員。
(integer) 2
redis 127.0.0.1:6379> zrange myzset 0 -1 WITHSCORES
#0表示第一個成員,-1表示最后一個成員。WITHSCORES選項表示返回的結(jié)果中包含每個成員及其分?jǐn)?shù),否則只返回成員。
1) "one"
2)"1"
3) "two"
4) "2"
5) "three"
6) "3"
redis 127 .0.0.1:6379> zrank myzset one
#獲取成員one在Sorted-Set中的位置索引值。0表示第一個位置。
(integer) 0
redis 127.0.0.1:6379> zrank myzset four
#成員four并不存在,因此返回nil。
(nil)
redis 127.0.0.1:6379> zcard myzset
#獲取myzset鍵中成員的數(shù)量。
(integer) 3
redis 127.0.0. 1:6379> zcount myzset 1 2
#zcount key min max,分?jǐn)?shù)滿足表達(dá)式1 <= score <= 2的成員的數(shù)量。
(integer) 2
redis 127.0.0.1:6379> zrem myzset one two
#刪除成員one和two,返回實際刪除成員的數(shù)量。
(integer) 2
redis 127.0.0.1:6379> zcard myzset
#查看是否刪除成功。
(integer)
redis 127.0.0.1:6379> zscore myzset three
#獲取成員three的分?jǐn)?shù)。返回值是字符串形式。
"3"
redis 127.0.0.1:6379> zscore myzset two
#由于成員twoE已經(jīng)被刪除,所以該命令返回nil。
(nil)
redis 127.0.0.1:6379> zincrby myzset 2 one
#成員one不存在,zincrby命令將添加該成員并假設(shè)其初始分?jǐn)?shù)為0,將成員one的分?jǐn)?shù)增加2,并返回該成員更新后的分?jǐn)?shù)。
"2"
redis 127.0.0.1:6379> zincrby myzset -1 one
#將成員one的分?jǐn)?shù)增加-1,并返回該成員更新后的分?jǐn)?shù)。
"1"
redis 127.0.0.1:6379> zrange myzset 0 -1 WITHSCORES
#查看在更新了成員的分?jǐn)?shù)后是否正確。
1) "one"
2) "1"
3) "three"
4) "3"
?
2、ZRANGEBYSCORE/ZREMRANGEBYRANK/ZREMRANGEBYSCORE
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]:獲取分?jǐn)?shù)在min<=score<=max的成員
ZREMRANGEBYRANK key start stop:刪除滿足位置索引號在start<=rank<=stop范圍的成員,并返回刪除數(shù)量
ZREMRANGEBYSCORE key min max:刪除滿足分?jǐn)?shù)在min<=score<=max范圍的成員,并返回刪除數(shù)量
?
redis 127.0.0.1:6379> del myzset
(integer) 1
redis 127.0.0.1:6379> zadd myzset 1 one 2 two 3 three 4 four
(integer) 4
redis 127.0.0.1:6379> zrangebyscore myzset 1 2
#zrangebyscore key min max,獲取分?jǐn)?shù)滿足表達(dá)式1 <= score <= 2的成員。
1) "one"
2) "two"
redis 127.0.0.1: 6379> zrangebyscore myzset (1 2
#獲取分?jǐn)?shù)滿足表達(dá)式1 < score <= 2的成員。
1) "two"
redis 127.0.0.1:6379> zrangebyscore myzset -inf +inf limit 3
#-inf表示第一個成員(位置索引值最低的,即0),+inf表示最后一個成員(位置索引值最高的),limit后而的參數(shù)用于限制返回成員的值,2表示從位置索引等于2的成員開始,取后而3個成員。
1) "three"
2) "four"
redis 127 .0.0.1:6379> zrangebyscore myzset 0 4 limit 2 3
redis 127.0.0.1:6379> zremrangebyscore myzset 1 2
#刪除分?jǐn)?shù)滿足表達(dá)式1<=score<=2的成員,并返回實際刪除的數(shù)量
(integer) 2
redis 127.0.0.1:6379> zrange myzset 0 -1
#看一下上面的刪除是否成功。
1) "three"
2) "four"
redis 127.0.0.1:6379> zremrangebyrank myzset 0 1
刪除位置索引滿足表達(dá)式0 <= rank <= 1的成員。
(integer) 2
redis 127.0.0.1:6379> zcard myzset
#查看上一條命令是否刪除成功。
(integer) 0
3、?ZREVRANGE/ ZREVRANGEBYSCORE/ ZREVRANK
ZREVRANGE key start stop [WITHSCORES]:以位置索引從高到低的方式獲取并返回此區(qū)間內(nèi)的成員。
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]:獲取分?jǐn)?shù)滿足表達(dá)式3 >= score >= 0的成員,并以從高到底的順序輸出
REVRANK key member:按從高到低的排序返回指定成員的位置
?
redis 127 .0.0.1:6379> del myzset #為后而的示例準(zhǔn)備測試數(shù)據(jù)。
(integer) 0
redis 127.0.0.1:6379> zadd myzset 1 one 2 two 3 three 4 four
(integer) 4
redis 127.0.0.1:6379> zrevrange myzset 0 -1 WITHSCORES #以位置索引從高到低的方式獲取并返回此區(qū)間內(nèi)的成員。
1) "four"
2) "4"
3) "three"
5) "two"
7) "one"
redis 127.0.0.1:6379> zrevrange myzset 1 3 #由于是從高到低的排序,所以位置等于0的是four, 1是three,并以此類推。
1) "three"
2) "two"
3) "one"
redis 127.0.0.1:6379> zrevrank myzset one #由于是從高到低的排序,所以one的位置是3。
(integer) 3
redis 127.0.0.1:6379> zrevrank myzset four #由于是從高到低的排序,所以four的位置是0。
(integer) 0
redis 127.0.0.1: 6379> zrevrangebyscore myzset 3 0 #zrevrangebyscore key max min,獲取分?jǐn)?shù)滿足表達(dá)式3 >= score >= 0的成員,并以從高到底的順序輸出。
1) "three"
2) "two" .
3) "one"
redis 127.0.0.1: 6379> zrevrangebyscore myzset 4 0 limit 1 2 #zrevrangebyscore命令支持1imit選項,其含義等同于zrangebyscore中的該選項,只是在計算位置時按照相反的順序計算和獲取。
1) "three"
2) "two”
192. 168.80.10:6379> zrevrangebyscore myzset +inf -inf limit 1 3
1) "three"
2) "two"
3) "one"
文章來源:http://www.zghlxwxcb.cn/news/detail-514853.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-514853.html
到了這里,關(guān)于Redis之?dāng)?shù)據(jù)類型String、List、Hash、Set、Sorted Set(詳細(xì))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!