redis是一個以key-value存儲的非關(guān)系型數(shù)據(jù)庫。有五種數(shù)據(jù)類型,string、hashes、list、set、zset。
1.1 鍵值相關(guān)命令
1.1.1 keys
返回滿足給定 pattern 的所有 key
redis 127.0.0.1:6379> keys *
1) "myzset2"
2) "myzset3"
3) "mylist"
4) "myset2"
redis 127.0.0.1:6379>
用表達(dá)式*,代表取出所有的 key
redis 127.0.0.1:6379> keys mylist*
1) "mylist"
2) "mylist5"
redis 127.0.0.1:6379>
用表達(dá)式 mylist*,代表取出所有以 mylist 開頭的 key
1.1.2 exists
確認(rèn)一個 key 是否存在
redis 127.0.0.1:6379> exists HongWan
(integer) 0
redis 127.0.0.1:6379> exists age
(integer) 1
redis 127.0.0.1:6379>
從結(jié)果來數(shù)據(jù)庫中不存在 HongWan 這個 key,但是 age 這個 key 是存在的
1.1.3 del
刪除一個 key
redis 127.0.0.1:6379> del age
(integer) 1
redis 127.0.0.1:6379> exists age
(integer) 0
redis 127.0.0.1:6379>
從結(jié)果來數(shù)據(jù)庫中不存在 HongWan 這個 key,但是 age 這個 key 是存在的
1.1.4 expire
設(shè)置一個 key 的過期時間(單位:秒)
redis 127.0.0.1:6379> expire addr 10
(integer) 1
redis 127.0.0.1:6379> ttl addr
(integer) 8
redis 127.0.0.1:6379> ttl addr
(integer) 1
redis 127.0.0.1:6379> ttl addr
(integer) -1
redis 127.0.0.1:6379>
在本例中,我們設(shè)置 addr 這個 key 的過期時間是 10 秒,然后我們不斷的用 ttl 來獲取這個
key 的有效時長,直至為-1 說明此值已過期
1.1.5 move
將當(dāng)前數(shù)據(jù)庫中的 key 轉(zhuǎn)移到其它數(shù)據(jù)庫中
redis 127.0.0.1:6379> select 0
OK
redis 127.0.0.1:6379> set age 30
OK
redis 127.0.0.1:6379> get age
"30"
redis 127.0.0.1:6379> move age 1
(integer) 1
redis 127.0.0.1:6379> get age
(nil)
redis 127.0.0.1:6379> select 1
OK
redis 127.0.0.1:6379[1]> get age
"30"
redis 127.0.0.1:6379[1]>
在本例中,我先顯式的選擇了數(shù)據(jù)庫 0,然后在這個庫中設(shè)置一個 key,接下來我們將這個
key 從數(shù)據(jù)庫 0 移到數(shù)據(jù)庫 1,之后我們確認(rèn)在數(shù)據(jù)庫 0 中無此 key 了, 但在數(shù)據(jù)庫 1 中存在
這個 key,說明我們轉(zhuǎn)移成功了
1.1.6 persist
移除給定 key 的過期時間
redis 127.0.0.1:6379[1]> expire age 300
(integer) 1
redis 127.0.0.1:6379[1]> ttl age
(integer) 294
redis 127.0.0.1:6379[1]> persist age
(integer) 1
redis 127.0.0.1:6379[1]> ttl age
(integer) -1
redis 127.0.0.1:6379[1]>
在這個例子中,我們手動的將未到過期時間的 key,成功設(shè)置為過期
1.1.7 randomkey
隨機(jī)返回 key 空間的一個 key
redis 127.0.0.1:6379> randomkey
"mylist7"
redis 127.0.0.1:6379> randomkey
"mylist5"
redis 127.0.0.1:6379>
通過結(jié)果可以看到取 key 的規(guī)則是隨機(jī)的
1.1.8 rename
重命名 key
redis 127.0.0.1:6379[1]> keys *
1) "age"
redis 127.0.0.1:6379[1]> rename age age_new
OK
redis 127.0.0.1:6379[1]> keys *
1) "age_new"
redis 127.0.0.1:6379[1]>
age 成功的被我們改名為 age_new 了
1.1.9 type
返回值的類型
redis 127.0.0.1:6379> type addr
string
redis 127.0.0.1:6379> type myzset2
zset
redis 127.0.0.1:6379> type mylist
list
redis 127.0.0.1:6379>
這個方法可以非常簡單的判斷出值的類型
1.2 服務(wù)器相關(guān)命令
1.2.1 ping
測試連接是否存活
redis 127.0.0.1:6379> ping
PONG
//執(zhí)行下面命令之前,我們停止 redis 服務(wù)器
redis 127.0.0.1:6379> ping
Could not connect to Redis at 127.0.0.1:6379: Connection refused
//執(zhí)行下面命令之前,我們啟動 redis 服務(wù)器
not connected> ping
PONG
redis 127.0.0.1:6379>
第一個 ping 時,說明此連接正常
第二個 ping 之前,我們將 redis 服務(wù)器停止,那么 ping 是失敗的
第三個 ping 之前,我們將 redis 服務(wù)器啟動,那么 ping 是成功的
1.2.2 echo
在命令行打印一些內(nèi)容
redis 127.0.0.1:6379> echo HongWan
"HongWan"
redis 127.0.0.1:6379>
1.2.3 select
選擇數(shù)據(jù)庫。Redis 數(shù)據(jù)庫編號從 0~15,我們可以選擇任意一個數(shù)據(jù)庫來進(jìn)行數(shù)據(jù)的存取。
redis 127.0.0.1:6379> select 1
OK
redis 127.0.0.1:6379[1]> select 16
(error) ERR invalid DB index
redis 127.0.0.1:6379[16]>
當(dāng)選擇 16 時,報錯,說明沒有編號為 16 的這個數(shù)據(jù)庫
1.2.4 quit
退出連接。
redis 127.0.0.1:6379> quit
[root@localhost redis-2.2.12]#
1.2.5 dbsize
返回當(dāng)前數(shù)據(jù)庫中 key 的數(shù)目。
redis 127.0.0.1:6379> dbsize
(integer) 18
redis 127.0.0.1:6379>
結(jié)果說明此庫中有 18 個 key
1.2.6 info
獲取服務(wù)器的信息和統(tǒng)計。
redis 127.0.0.1:6379> info
redis_version:2.2.12
redis_git_sha1:00000000
redis_git_dirty:0
arch_bits:32
multiplexing_api:epoll
process_id:28480
uptime_in_seconds:2515
uptime_in_days:0
redis 127.0.0.1:6379>
此結(jié)果用于說明服務(wù)器的基礎(chǔ)信息,包括版本、啟動時間等。
1.2.7 monitor
實時轉(zhuǎn)儲收到的請求。
redis 127.0.0.1:6379> config get dir
1) "dir"
2) "/root/4setup/redis-2.2.12"
redis 127.0.0.1:6379>
從結(jié)果可以看出,此服務(wù)器目前接受了命令"keys *"和"get addr"。
1.2.8 config get
獲取服務(wù)器配置信息。
redis 127.0.0.1:6379> config get dir
1) "dir"
2) "/root/4setup/redis-2.2.12"
redis 127.0.0.1:6379>
本例中我們獲取了 dir 這個參數(shù)配置的值,如果想獲取全部參數(shù)據(jù)的配置值也很簡單,只需
執(zhí)行”config get *”即可將全部的值都顯示出來。
1.2.9 flushdb
刪除當(dāng)前選擇數(shù)據(jù)庫中的所有 key。
redis 127.0.0.1:6379> dbsize
(integer) 18
redis 127.0.0.1:6379> flushdb
OK
redis 127.0.0.1:6379> dbsize
(integer) 0
redis 127.0.0.1:6379>
在本例中我們將 0 號數(shù)據(jù)庫中的 key 都清除了。
1.2.10 flushall
刪除所有數(shù)據(jù)庫中的所有 key。
redis 127.0.0.1:6379[1]> dbsize
(integer) 1
redis 127.0.0.1:6379[1]> select 0
OK
redis 127.0.0.1:6379> flushall
OK
redis 127.0.0.1:6379> select 1
OK
redis 127.0.0.1:6379[1]> dbsize
(integer) 0
redis 127.0.0.1:6379[1]>
在本例中我們先查看了一個1號數(shù)據(jù)庫中有一個key,然后我切換到0號庫執(zhí)行flushall命令,
結(jié)果 1 號庫中的 key 也被清除了,說是此命令工作正常。
2.1:string類型及操作:string是最簡單的數(shù)據(jù)類型,是二進(jìn)制安全的,可以包含任何類型。
2.2.1 set
設(shè)置 key 對應(yīng)的值為 string 類型的 value。
例如我們添加一個 name= HongWan 的鍵值對,可以這樣做:
redis 127.0.0.1:6379> set name HongWan
OK
redis 127.0.0.1:6379>
2.2.2 setnx
設(shè)置 key 對應(yīng)的值為 string 類型的 value。如果 key 已經(jīng)存在,返回 0,nx 是 not exist 的意思。
例如我們添加一個 name= HongWan_new 的鍵值對,可以這樣做:
redis 127.0.0.1:6379> get name
"HongWan"
redis 127.0.0.1:6379> setnx name HongWan_new
(integer) 0
redis 127.0.0.1:6379> get name
"HongWan"
redis 127.0.0.1:6379>
由于原來 name 有一個對應(yīng)的值,所以本次的修改不生效,且返回碼是 0。
2.2.3 setex
設(shè)置 key 對應(yīng)的值為 string 類型的 value,并指定此鍵值對應(yīng)的有效期。
例如我們添加一個 haircolor= red 的鍵值對,并指定它的有效期是 10 秒,可以這樣做:
redis 127.0.0.1:6379> setex haircolor 10 red
OK
redis 127.0.0.1:6379> get haircolor
"red"
redis 127.0.0.1:6379> get haircolor
(nil)
redis 127.0.0.1:6379>
可見由于最后一次的調(diào)用是 10 秒以后了,所以取不到 haicolor 這個鍵對應(yīng)的值。
2.2.4 setrange
設(shè)置指定 key 的 value 值的子字符串。
例如我們希望將 HongWan 的 126 郵箱替換為 gmail 郵箱,那么我們可以這樣做:
redis 127.0.0.1:6379> get name
"HongWan@126.com"
redis 127.0.0.1:6379> setrange name 8 gmail.com
(integer) 17
redis 127.0.0.1:6379> get name
"HongWan@gmail.com"
redis 127.0.0.1:6379>
其中的 8 是指從下標(biāo)為 8(包含 8)的字符開始替換
2.2.5 mset
一次設(shè)置多個 key 的值,成功返回 ok 表示所有的值都設(shè)置了,失敗返回 0 表示沒有任何值
被設(shè)置。
redis 127.0.0.1:6379> mset key1 HongWan1 key2 HongWan2
OK
redis 127.0.0.1:6379> get key1
"HongWan1"
redis 127.0.0.1:6379> get key2
"HongWan2"
redis 127.0.0.1:6379>
2.2.6 msetnx
一次設(shè)置多個 key 的值,成功返回 ok 表示所有的值都設(shè)置了,失敗返回 0 表示沒有任何值
被設(shè)置,但是不會覆蓋已經(jīng)存在的 key。
redis 127.0.0.1:6379> get key1
"HongWan1"
redis 127.0.0.1:6379> get key2
"HongWan2"
redis 127.0.0.1:6379> msetnx key2 HongWan2_new key3 HongWan3
(integer) 0
redis 127.0.0.1:6379> get key2
"HongWan2"
redis 127.0.0.1:6379> get key3
(nil)
可以看出如果這條命令返回 0,那么里面操作都會回滾,都不會被執(zhí)行。
2.2.7 get
獲取 key 對應(yīng)的 string 值,如果 key 不存在返回 nil。
例如我們獲取一個庫中存在的鍵 name,可以很快得到它對應(yīng)的 value
redis 127.0.0.1:6379> get name
"HongWan"
redis 127.0.0.1:6379>
我們獲取一個庫中不存在的鍵 name1,那么它會返回一個 nil 以表時無此鍵值對
redis 127.0.0.1:6379> get name1
(nil)
redis 127.0.0.1:6379>
2.2.8 getset
設(shè)置 key 的值,并返回 key 的舊值。
redis 127.0.0.1:6379> get name
"HongWan"
redis 127.0.0.1:6379> getset name HongWan_new
"HongWan"
redis 127.0.0.1:6379> get name
"HongWan_new"
redis 127.0.0.1:6379>
接下來我們看一下如果 key 不存的時候會什么樣兒?
redis 127.0.0.1:6379> getset name1 aaa
(nil)
redis 127.0.0.1:6379>
可見,如果 key 不存在,那么將返回 nil
2.2.9 getrange
獲取指定 key 的 value 值的子字符串。
具體樣例如下:
redis 127.0.0.1:6379> get name
"HongWan@126.com"
redis 127.0.0.1:6379> getrange name 0 6
"HongWan"
redis 127.0.0.1:6379>
字符串左面下標(biāo)是從 0 開始的
redis 127.0.0.1:6379> getrange name -7 -1
"126.com"
redis 127.0.0.1:6379>
字符串右面下標(biāo)是從-1 開始的
redis 127.0.0.1:6379> getrange name 7 100
"@126.com"
redis 127.0.0.1:6379>
當(dāng)下標(biāo)超出字符串長度時,將默認(rèn)為是同方向的最大下標(biāo)
2.2.10 mget
一次獲取多個 key 的值,如果對應(yīng) key 不存在,則對應(yīng)返回 nil。
具體樣例如下:
redis 127.0.0.1:6379> mget key1 key2 key3
1) "HongWan1"
2) "HongWan2"
3) (nil)
redis 127.0.0.1:6379>
key3 由于沒有這個鍵定義,所以返回 nil。
2.2.11 incr
對 key 的值做加加操作,并返回新的值。注意 incr 一個不是 int 的 value 會返回錯誤,incr 一
個不存在的 key,則設(shè)置 key 為 1
redis 127.0.0.1:6379> set age 20
OK
redis 127.0.0.1:6379> incr age
(integer) 21
redis 127.0.0.1:6379> get age
"21"
redis 127.0.0.1:6379>
2.2.12 incrby
同 incr 類似,加指定值 ,key 不存在時候會設(shè)置 key,并認(rèn)為原來的 value 是 0
redis 127.0.0.1:6379> get age
"21"
redis 127.0.0.1:6379> incrby age 5
(integer) 26
redis 127.0.0.1:6379> get name
"HongWan@gmail.com"
redis 127.0.0.1:6379> get age
"26"
redis 127.0.0.1:6379>
2.2.13 decr
對 key 的值做的是減減操作,decr 一個不存在 key,則設(shè)置 key 為-1
redis 127.0.0.1:6379> get age
"26"
redis 127.0.0.1:6379> decr age
(integer) 25
redis 127.0.0.1:6379> get age
"25"
redis 127.0.0.1:6379>
2.2.14 decrby
同 decr,減指定值。
redis 127.0.0.1:6379> get age
"25"
redis 127.0.0.1:6379> decrby age 5
(integer) 20
redis 127.0.0.1:6379> get age
"20"
redis 127.0.0.1:6379>
decrby 完全是為了可讀性,我們完全可以通過 incrby 一個負(fù)值來實現(xiàn)同樣效果,反之一樣。
redis 127.0.0.1:6379> get age
"20"
redis 127.0.0.1:6379> incrby age -5
(integer) 15
redis 127.0.0.1:6379> get age
"15"
redis 127.0.0.1:6379>
2.2.15 append
給指定 key 的字符串值追加 value,返回新字符串值的長度。
例如我們向 name 的值追加一個@126.com 字符串,那么可以這樣做:
redis 127.0.0.1:6379> append name @126.com
(integer) 15
redis 127.0.0.1:6379> get name
"HongWan@126.com"
redis 127.0.0.1:6379>
2.2.16 strlen
取指定 key 的 value 值的長度。
redis 127.0.0.1:6379> get name
"HongWan_new"
redis 127.0.0.1:6379> strlen name
(integer) 11
redis 127.0.0.1:6379> get age
"15"
redis 127.0.0.1:6379> strlen age
(integer) 2
redis 127.0.0.1:6379>
2.3 hashes 類型及操作,?特別適合用于存儲對象
2.3.1 hset
設(shè)置 hash field 為指定值,如果 key 不存在,則先創(chuàng)建。
redis 127.0.0.1:6379> hset myhash field1 Hello
(integer) 1
redis 127.0.0.1:6379>
2.3.2 hsetnx
設(shè)置 hash field 為指定值,如果 key 不存在,則先創(chuàng)建。如果 field 已經(jīng)存在,返回 0,nx 是
not exist 的意思。
redis 127.0.0.1:6379> hsetnx myhash field "Hello"
(integer) 1
redis 127.0.0.1:6379> hsetnx myhash field "Hello"
(integer) 0
redis 127.0.0.1:6379>
第一次執(zhí)行是成功的,但第二次執(zhí)行相同的命令失敗,原因是 field 已經(jīng)存在了。
2.3.3 hmset
同時設(shè)置 hash 的多個 field。
redis 127.0.0.1:6379> hmset myhash field1 Hello field2 World
OK
redis 127.0.0.1:6379>
2.3.4 hget
獲取指定的 hash field。
redis 127.0.0.1:6379> hget myhash field1
"Hello"
redis 127.0.0.1:6379> hget myhash field2
"World"
redis 127.0.0.1:6379> hget myhash field3
(nil)
redis 127.0.0.1:6379>
由于數(shù)據(jù)庫沒有 field3,所以取到的是一個空值 nil
2.3.5 hmget
獲取全部指定的 hash filed。
redis 127.0.0.1:6379> hmget myhash field1 field2 field3
1) "Hello"
2) "World"
3) (nil)
redis 127.0.0.1:6379>
由于數(shù)據(jù)庫沒有 field3,所以取到的是一個空值 nil
2.3.6 hincrby
指定的 hash filed 加上給定值。
redis 127.0.0.1:6379> hset myhash field3 20
(integer) 1
redis 127.0.0.1:6379> hget myhash field3
"20"
redis 127.0.0.1:6379> hincrby myhash field3 -8
(integer) 12
redis 127.0.0.1:6379> hget myhash field3
"12"
redis 127.0.0.1:6379>
在本例中我們將 field3 的值從 20 降到了 12,即做了一個減 8 的操作。
2.3.7 hexists
測試指定 field 是否存在。
redis 127.0.0.1:6379> hexists myhash field1
(integer) 1
redis 127.0.0.1:6379> hexists myhash field9
(integer) 0
redis 127.0.0.1:6379>
通過上例可以說明 field1 存在,但 field9 是不存在的。
2.3.8 hlen
返回指定 hash 的 field 數(shù)量。
redis 127.0.0.1:6379> hlen myhash
(integer) 4
redis 127.0.0.1:6379>
通過上例可以看到 myhash 中有 4 個 field。
2.3.9 hdel
返回指定 hash 的 field 數(shù)量。
redis 127.0.0.1:6379> hlen myhash
(integer) 4
redis 127.0.0.1:6379> hdel myhash field1
(integer) 1
redis 127.0.0.1:6379> hlen myhash
(integer) 3
redis 127.0.0.1:6379>
2.3.10 hkeys
返回 hash 的所有 field。
redis 127.0.0.1:6379> hkeys myhash
1) "field2"
2) "field"
3) "field3"
redis 127.0.0.1:6379>
說明這個 hash 中有 3 個 field
2.3.11 hvals
返回 hash 的所有 value。
redis 127.0.0.1:6379> hvals myhash
1) "World"
2) "Hello"
3) "12"
redis 127.0.0.1:6379>
說明這個 hash 中有 3 個 field
2.3.12 hgetall
獲取某個 hash 中全部的 filed 及 value。
redis 127.0.0.1:6379> hgetall myhash
1) "field2"
2) "World"
3) "field"
4) "Hello"
5) "field3"
6) "12"
redis 127.0.0.1:6379>
可見,一下子將 myhash 中所有的 field 及對應(yīng)的 value 都取出來了。
2.4 lists 類型及操作。list 是一個鏈表結(jié)構(gòu),主要功能是 push、pop,可以做 堆棧和隊列
2.4.1 lpush
在 key 對應(yīng) list 的頭部添加字符串元素
redis 127.0.0.1:6379> lpush mylist "world"
(integer) 1
redis 127.0.0.1:6379> lpush mylist "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379>
在此處我們先插入了一個 world,然后在 world 的頭部插入了一個 hello。其中 lrange 是用于
取 mylist 的內(nèi)容。
2.4.2 rpush
在 key 對應(yīng) list 的尾部添加字符串元素
redis 127.0.0.1:6379> rpush mylist2 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist2 "world"
(integer) 2
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379>
在此處我們先插入了一個 hello,然后在 hello 的尾部插入了一個 world。
2.4.3 linsert
在 key 對應(yīng) list 的特定位置之前或之后添加字符串元素
redis 127.0.0.1:6379> rpush mylist3 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist3 "world"
(integer) 2
redis 127.0.0.1:6379> linsert mylist3 before "world" "there"
(integer) 3
redis 127.0.0.1:6379> lrange mylist3 0 -1
1) "hello"
2) "there"
3) "world"
redis 127.0.0.1:6379>
在此處我們先插入了一個 hello,然后在 hello 的尾部插入了一個 world,然后又在 world 的
前面插入了 there。
2.4.4 lset
設(shè)置 list 中指定下標(biāo)的元素值(下標(biāo)從 0 開始)
redis 127.0.0.1:6379> rpush mylist4 "one"
(integer) 1
redis 127.0.0.1:6379> rpush mylist4 "two"
(integer) 2
redis 127.0.0.1:6379> rpush mylist4 "three"
(integer) 3
redis 127.0.0.1:6379> lset mylist4 0 "four"
OK
redis 127.0.0.1:6379> lset mylist4 -2 "five"
OK
redis 127.0.0.1:6379> lrange mylist4 0 -1
1) "four"
2) "five"
3) "three"
redis 127.0.0.1:6379>
在此處我們依次插入了 one,two,three,然后將標(biāo)是 0 的值設(shè)置為 four,再將下標(biāo)是-2 的值設(shè)
置為 five。
2.5.5 lrem
從 key 對應(yīng) list 中刪除 count 個和 value 相同的元素。
count>0 時,按從頭到尾的順序刪除,具體如下:
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist5 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist5 2 "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "foo"
2) "hello"
redis 127.0.0.1:6379>
count<0 時,按從尾到頭的順序刪除,具體如下:
redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist6 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist6 -2 "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "foo"
redis 127.0.0.1:6379>
count=0 時,刪除全部,具體如下:
redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist7 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist7 0 "hello"
(integer) 3
redis 127.0.0.1:6379> lrange mylist7 0 -1
1) "foo"
redis 127.0.0.1:6379>
2.4.6 ltrim
保留指定 key 的值范圍內(nèi)的數(shù)據(jù)
redis 127.0.0.1:6379> rpush mylist8 "one"
(integer) 1
redis 127.0.0.1:6379> rpush mylist8 "two"
(integer) 2
redis 127.0.0.1:6379> rpush mylist8 "three"
(integer) 3
redis 127.0.0.1:6379> rpush mylist8 "four"
(integer) 4
redis 127.0.0.1:6379> ltrim mylist8 1 -1
OK
redis 127.0.0.1:6379> lrange mylist8 0 -1
1) "two"
2) "three"
3) "four"
redis 127.0.0.1:6379>
2.4.7 lpop
從 list 的頭部刪除元素,并返回刪除元素
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379> lpop mylist
"hello"
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "world"
redis 127.0.0.1:6379>
2.4.8 rpop
從 list 的尾部刪除元素,并返回刪除元素
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379> rpop mylist2
"world"
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
redis 127.0.0.1:6379>
2.4.9 rpoplpush
從第一個 list 的尾部移除元素并添加到第二個 list 的頭部,最后返回被移除的元素值,整個操
作是原子的.如果第一個 list 是空或者不存在返回 nil
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "foo"
3) "hello"
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "foo"
redis 127.0.0.1:6379> rpoplpush mylist5 mylist6
"hello"
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "foo"
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "hello"
3) "foo"
redis 127.0.0.1:6379>
2.4.10 lindex
返回名稱為 key 的 list 中 index 位置的元素
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "foo"
redis 127.0.0.1:6379> lindex mylist5 0
"three"
redis 127.0.0.1:6379> lindex mylist5 1
"foo"
redis 127.0.0.1:6379>
2.4.11 llen
返回 key 對應(yīng) list 的長度
redis 127.0.0.1:6379> llen mylist5
(integer) 2
redis 127.0.0.1:6379>
2.5 sets 類型及操作,無序集合
2.5.1 sadd
向名稱為 key 的 set 中添加元素
redis 127.0.0.1:6379> sadd myset "hello"
(integer) 1
redis 127.0.0.1:6379> sadd myset "world"
(integer) 1
redis 127.0.0.1:6379> sadd myset "world"
(integer) 0
redis 127.0.0.1:6379> smembers myset
1) "world"
2) "hello"
redis 127.0.0.1:6379>
本例中,我們向 myset 中添加了三個元素,但由于第三個元素跟第二個元素是相同的,所以
第三個元素沒有添加成功,最后我們用 smembers 來查看 myset 中的所有元素。
2.5.2 srem
刪除名稱為 key 的 set 中的元素 member
redis 127.0.0.1:6379> sadd myset2 "one"
(integer) 1
redis 127.0.0.1:6379> sadd myset2 "two"
(integer) 1
redis 127.0.0.1:6379> sadd myset2 "three"
(integer) 1
redis 127.0.0.1:6379> srem myset2 "one"
(integer) 1
redis 127.0.0.1:6379> srem myset2 "four"
(integer) 0
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379>
本例中,我們向 myset2 中添加了三個元素后,再調(diào)用 srem 來刪除 one 和 four,但由于元素
中沒有 four 所以,此條 srem 命令執(zhí)行失敗。
2.5.3 spop
隨機(jī)返回并刪除名稱為 key 的 set 中一個元素
redis 127.0.0.1:6379> sadd myset3 "one"
(integer) 1
redis 127.0.0.1:6379> sadd myset3 "two"
(integer) 1
redis 127.0.0.1:6379> sadd myset3 "three"
(integer) 1
redis 127.0.0.1:6379> spop myset3
"three"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379>
本例中,我們向 myset3 中添加了三個元素后,再調(diào)用 spop 來隨機(jī)刪除一個元素,可以看到
three 元素被刪除了。
2.5.4 sdiff
返回所有給定 key 與第一個 key 的差集
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sdiff myset2 myset3
1) "three"
redis 127.0.0.1:6379>
本例中,我們可以看到 myset2 中的元素與 myset3 中不同的只是 three,所以只有 three 被查
出來了,而不是 three 和 one,因為 one 是 myset3 的元素。
我們也可以將 myset2 和 myset3 換個順序來看一下結(jié)果:
redis 127.0.0.1:6379> sdiff myset3 myset2
1) "one"
redis 127.0.0.1:6379>
這個結(jié)果中只顯示了,myset3 中的元素與 myset2 中不同的元素。
2.5.5 sdiffstore
返回所有給定 key 與第一個 key 的差集,并將結(jié)果存為另一個 key
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sdiffstore myset4 myset2 myset3
(integer) 1
redis 127.0.0.1:6379> smembers myset4
1) "three"
redis 127.0.0.1:6379>
2.5.6 sinter
返回所有給定 key 的交集
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sinter myset2 myset3
1) "two"
redis 127.0.0.1:6379>
通過本例的結(jié)果可以看出, myset2 和 myset3 的交集 two 被查出來了
2.5.7 sinterstore
返回所有給定 key 的交集,并將結(jié)果存為另一個 key
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sinterstore myset5 myset2 myset3
(integer) 1
redis 127.0.0.1:6379> smembers myset5
1) "two"
redis 127.0.0.1:6379>
通過本例的結(jié)果可以看出, myset2 和 myset3 的交集被保存到 myset5 中了
2.5.8 sunion
返回所有給定 key 的并集
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sunion myset2 myset3
1) "three"
2) "one"
3) "two"
redis 127.0.0.1:6379>
通過本例的結(jié)果可以看出, myset2 和 myset3 的并集被查出來了
2.5.9 sunionstore
返回所有給定 key 的并集,并將結(jié)果存為另一個 key
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sunionstore myset6 myset2 myset3
(integer) 3
redis 127.0.0.1:6379> smembers myset6
1) "three"
2) "one"
3) "two"
redis 127.0.0.1:6379>
通過本例的結(jié)果可以看出, myset2 和 myset3 的并集被保存到 myset6 中了
2.5.10 smove
從第一個 key 對應(yīng)的 set 中移除 member 并添加到第二個對應(yīng) set 中
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> smove myset2 myset7 three
(integer) 1
redis 127.0.0.1:6379> smembers myset7
1) "three"
redis 127.0.0.1:6379>
通過本例可以看到,myset2 的 three 被移到 myset7 中了
2.5.11 scard
返回名稱為 key 的 set 的元素個數(shù)
redis 127.0.0.1:6379> scard myset2
(integer) 1
redis 127.0.0.1:6379>
通過本例可以看到,myset2 的成員數(shù)量為 1
2.5.12 sismember
測試 member 是否是名稱為 key 的 set 的元素
redis 127.0.0.1:6379> smembers myset2
1) "two"
redis 127.0.0.1:6379> sismember myset2 two
(integer) 1
redis 127.0.0.1:6379> sismember myset2 one
(integer) 0
redis 127.0.0.1:6379>
通過本例可以看到,two 是 myset2 的成員,而 one 不是。
2.5.13 srandmember
隨機(jī)返回名稱為 key 的 set 的一個元素,但是不刪除元素
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> srandmember myset3
"two"
redis 127.0.0.1:6379> srandmember myset3
"one"
redis 127.0.0.1:6379>
2.6 sorted sets 類型及操作,有序集合
2.6.1 zadd
向名稱為 key 的 zset 中添加元素 member,score 用于排序。如果該元素已經(jīng)存在,則根據(jù)
score 更新該元素的順序
redis 127.0.0.1:6379> zadd myzset 1 "one"
(integer) 1
redis 127.0.0.1:6379> zadd myzset 2 "two"
(integer) 1
redis 127.0.0.1:6379> zadd myzset 3 "two"
(integer) 0
redis 127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "3"
redis 127.0.0.1:6379>
本例中我們向 myzset 中添加了 one 和 two,并且 two 被設(shè)置了 2 次,那么將以最后一次的
設(shè)置為準(zhǔn),最后我們將所有元素都顯示出來并顯示出了元素的 score。
2.6.2 zrem
刪除名稱為 key 的 zset 中的元素 member
redis 127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "3"
redis 127.0.0.1:6379> zrem myzset two
(integer) 1
redis 127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
redis 127.0.0.1:6379>
可以看到 two 被刪除了
2.6.3 zincrby
如果在名稱為 key 的 zset 中已經(jīng)存在元素 member,則該元素的 score 增加 increment;否則
向集合中添加該元素,其 score 的值為 increment
redis 127.0.0.1:6379> zadd myzset2 1 "one"
(integer) 1
redis 127.0.0.1:6379> zadd myzset2 2 "two"
(integer) 1
redis 127.0.0.1:6379> zincrby myzset2 2 "one"
"3"
redis 127.0.0.1:6379> zrange myzset2 0 -1 withscores
1) "two"
2) "2"
3) "one"
4) "3"
redis 127.0.0.1:6379>
本例中將 one 的 score 從 1 增加了 2,增加到了 3
2.6.4 zrank
返回名稱為 key 的 zset 中 member 元素的排名(按 score 從小到大排序)即下標(biāo)
redis 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"
redis 127.0.0.1:6379> zrank myzset3 two
(integer) 1
redis 127.0.0.1:6379>
本例中將 two 的下標(biāo)是 1,我這里取的是下標(biāo),而不是 score
2.6.5 zrevrank
返回名稱為 key 的 zset 中 member 元素的排名(按 score 從大到小排序)即下標(biāo)
redis 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"
redis 127.0.0.1:6379> zrevrank myzset3 two
(integer) 2
redis 127.0.0.1:6379>
按從大到小排序的話 two 是第三個元素,下標(biāo)是 2
2.6.6 zrevrange
返回名稱為 key 的 zset(按 score 從大到小排序)中的 index 從 start 到 end 的所有元素
redis 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"
redis 127.0.0.1:6379>
首先按 score 從大到小排序,再取出全部元素
2.6.7 zrangebyscore
返回集合中 score 在給定區(qū)間的元素
redis 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"
redis 127.0.0.1:6379> zrangebyscore myzset3 2 3 withscores
1) "two"
2) "2"
3) "three"
4) "3"
redis 127.0.0.1:6379>
本例中,返回了 score 在 2~3 區(qū)間的元素
2.6.8 zcount
返回集合中 score 在給定區(qū)間的數(shù)量
redis 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"
redis 127.0.0.1:6379> zcount myzset3 2 3
(integer) 2
redis 127.0.0.1:6379>
本例中,計算了 score 在 2~3 之間的元素數(shù)目
2.6.9 zcard
返回集合中元素個數(shù)
redis 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"
redis 127.0.0.1:6379> zcard myzset3
(integer) 4
redis 127.0.0.1:6379>
從本例看出 myzset3 這個集全的元素數(shù)量是 4
2.6.10 zscore
返回給定元素對應(yīng)的 score
redis 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"
redis 127.0.0.1:6379> zscore myzset3 two
"2"
redis 127.0.0.1:6379>
此例中我們成功的將 two 的 score 取出來了。
2.6.11 zremrangebyrank
刪除集合中排名在給定區(qū)間的元素
redis 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"
redis 127.0.0.1:6379> zremrangebyrank myzset3 3 3
(integer) 1
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
redis 127.0.0.1:6379>
在本例中我們將 myzset3 中按從小到大排序結(jié)果的下標(biāo)為 3 的元素刪除了。
2.6.12 zremrangebyscore
刪除集合中 score 在給定區(qū)間的元素
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
redis 127.0.0.1:6379> zremrangebyscore myzset3 1 2
(integer) 2
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "three"
2) "3"
redis 127.0.0.1:6379>
在本例中我們將 myzset3 中按從小到大排序結(jié)果的 score 在 1~2 之間的元素刪除了。