redis常用命令和數(shù)據(jù)類型

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 之間的元素刪除了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容