1. 程式人生 > >Redis新手快速入門(二)

Redis新手快速入門(二)

以下資料型別的操作從簡介紹。

2.3 List的操作

/* 插入資料 */

LPUSH key value [value ...]

// 將一個或多個值 value 插入到列表 key 的表頭
// 如果有多個 value 值,那麼各個 value 值按從左到右的順序依次插入到表頭: 比如說,對空列表 mylist 執行命令 LPUSH mylist a b c ,列表的值將是 c b a ,這等同於原子性地執行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三個命令。
// 如果 key 不存在,一個空列表會被建立並執行 LPUSH 操作。
// 當 key 存在但不是列表型別時,返回一個錯誤。

例:
redis> LPUSH languages python # 加入單個元素
(integer) 1

redis> LPUSH languages python # 加入重複元素
(integer) 2

redis> LRANGE languages 0 -1 # 列表允許重複元素
1) “python”
2) “python”

redis> LPUSH mylist a b c # 加入多個元素
(integer) 3

redis> LRANGE mylist 0 -1
1) “c”
2) “b”
3) “a”

/* 插入資料 */

RPUSH key value [value ...
] // 將一個或多個值 value 插入到列表 key 的表尾(最右邊)。 // 如果有多個 value 值,那麼各個 value 值按從左到右的順序依次插入到表尾:比如對一個空列表 mylist 執行 RPUSH mylist a b c ,得出的結果列表為 a b c ,等同於執行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。 // 如果 key 不存在,一個空列表會被建立並執行 RPUSH 操作。 // 當 key 存在但不是列表型別時,返回一個錯誤。
/* 移除資料 */

LPOP key

// 移除並返回列表 key 的頭元素。

例:
redis> LLEN course
(integer) 0

redis> RPUSH course algorithm001
(integer) 1

redis> RPUSH course c++101
(integer) 2

redis> LPOP course # 移除頭元素
“algorithm001”

/* 移除資料 */

RPOP key

// 移除並返回列表 key 的尾元素。
/* 查詢資料 */

LRANGE key start stop

// 返回列表 key 中指定區間內的元素,區間以偏移量 start 和 stop 指定。
// 下標(index)引數 start 和 stop 都以 0 為底,也就是說,以 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。
// 你也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。

例:
redis> RPUSH fp-language lisp
(integer) 1

redis> LRANGE fp-language 0 0
1) “lisp”

redis> RPUSH fp-language scheme
(integer) 2

redis> LRANGE fp-language 0 1
1) “lisp”
2) “scheme”

2.4 Set的操作(單值多value(不重複))

/* 新增 */

SADD key member [member ...]

// 將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略。
// 假如 key 不存在,則建立一個只包含 member 元素作成員的集合。
// 當 key 不是集合型別時,返回一個錯誤。

例:
redis> SADD bbs “discuz.net” # 新增單個元素
(integer) 1

redis> SADD bbs “discuz.net” # 新增重複元素
(integer) 0

redis> SADD bbs “tianya.cn” “groups.google.com” # 新增多個元素
(integer) 2

redis> SMEMBERS bbs
1) “discuz.net”
2) “groups.google.com”
3) “tianya.cn”

/* 移除 */

SREM key member [member ...]

// 移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略。
// 當 key 不是集合型別,返回一個錯誤。

例:
redis> SMEMBERS languages # 測試資料
1) “c”
2) “lisp”
3) “python”
4) “ruby”

redis> SREM languages ruby # 移除單個元素
(integer) 1

redis> SREM languages non-exists-language # 移除不存在元素
(integer) 0

redis> SREM languages lisp python c # 移除多個元素
(integer) 3

redis> SMEMBERS languages
(empty list or set)

/* 檢視 */

SMEMBERS key

// 返回集合 key 中的所有成員。
// 不存在的 key 被視為空集合。

例:
redis> EXISTS not_exists_key # key 不存在或集合為空
(integer) 0

redis> SMEMBERS not_exists_key
(empty list or set)

redis> SADD language Ruby Python Clojure # 非空集合
(integer) 3

redis> SMEMBERS language
1) “Python”
2) “Ruby”
3) “Clojure”

/* 隨機出棧 */

SPOP key

// 移除並返回集合中的一個隨機元素。
// 如果只想獲取一個隨機元素,但不想該元素從集合中被移除的話,可以使用 SRANDMEMBER 命令。


SRANDMEMBER key [count]

// 如果命令執行時,只提供了 key 引數,那麼返回集合中的一個隨機元素。
// 從 Redis 2.6 版本開始, SRANDMEMBER 命令接受可選的 count 引數:
// 如果 count 為正數,且小於集合基數,那麼命令返回一個包含 count 個元素的陣列,陣列中的元素各不相同。如果 count 大於等於集合基數,那麼返回整個集合。
// 如果 count 為負數,那麼命令返回一個數組,陣列中的元素可能會重複出現多次,而陣列的長度為 count 的絕對值。
// 該操作和 SPOP 相似,但 SPOP 將隨機元素從集合中移除並返回,而 SRANDMEMBER 則僅僅返回隨機元素,而不對集合進行任何改動。

2.5 Hash的操作(KV模式不變,但V是一個鍵值對)

/* 新增 */

HSET key field value

// 將雜湊表 key 中的域 field 的值設為 value 。
// 如果 key 不存在,一個新的雜湊表被建立並進行 HSET 操作。
// 如果域 field 已經存在於雜湊表中,舊值將被覆蓋。

例:
redis> HSET website google “www.g.cn” # 設定一個新域
(integer) 1
redis> HSET website google “www.google.com” # 覆蓋一箇舊域
(integer) 0

/* 檢視 */

HGET key field

// 返回雜湊表 key 中給定域 field 的值。

例:
redis> HSET site redis redis.com
(integer) 1
redis> HGET site redis
“redis.com”

/* 檢視全部 */

HGETALL key

// 返回雜湊表 key 中,所有的域和值。
// 在返回值裡,緊跟每個域名(field name)之後是域的值(value),所以返回值的長度是雜湊表大小的兩倍。

例:
redis> HSET people jack “Jack Sparrow”
(integer) 1
redis> HSET people gump “Forrest Gump”
(integer) 1
redis> HGETALL people
1) “jack” # 域
2) “Jack Sparrow” # 值
3) “gump”
4) “Forrest Gump”

/* 刪除 */

HDEL key field [field ...]

//刪除雜湊表 key 中的一個或多個指定域,不存在的域將被忽略。

例:
測試資料
redis> HGETALL abbr
1) “a”
2) “apple”
3) “b”
4) “banana”
5) “c”
6) “cat”
7) “d”
8) “dog”
刪除單個域
redis> HDEL abbr a
(integer) 1
刪除不存在的域
redis> HDEL abbr not-exists-field
(integer) 0
刪除多個域
redis> HDEL abbr b c
(integer) 2
redis> HGETALL abbr
1) “d”
2) “dog”

2.6 Zset的操作(Sorted Set)

/* 增加 */

ZADD key score member [[score member] [score member] ...]

// 將一個或多個 member 元素及其 score 值加入到有序集 key 當中。
// 如果某個 member 已經是有序集的成員,那麼更新這個 member 的 score 值,並通過重新插入這個 member 元素,來保證該 member 在正確的位置上。
// score 值可以是整數值或雙精度浮點數。
// 如果 key 不存在,則建立一個空的有序集並執行 ZADD 操作。
// 當 key 存在但不是有序集型別時,返回一個錯誤。
// 對有序集的更多介紹請參見 sorted set 。

例:
新增單個元素
redis> ZADD page_rank 10 google.com
(integer) 1
新增多個元素
redis> ZADD page_rank 9 baidu.com 8 bing.com
(integer) 2

redis> ZRANGE page_rank 0 -1 WITHSCORES
1) “bing.com”
2) “8”
3) “baidu.com”
4) “9”
5) “google.com”
6) “10”
新增已存在元素,且 score 值不變
redis> ZADD page_rank 10 google.com
(integer) 0

redis> ZRANGE page_rank 0 -1 WITHSCORES # 沒有改變
1) “bing.com”
2) “8”
3) “baidu.com”
4) “9”
5) “google.com”
6) “10”
新增已存在元素,但是改變 score 值
redis> ZADD page_rank 6 bing.com
(integer) 0
redis> ZRANGE page_rank 0 -1 WITHSCORES # bing.com 元素的 score 值被改變
1) “bing.com”
2) “6”
3) “baidu.com”
4) “9”
5) “google.com”
6) “10”

/* 檢視 */

ZRANGE key start stop [WITHSCORES]

/*
返回有序集 key 中,指定區間內的成員。
其中成員的位置按 score 值遞增(從小到大)來排序。
具有相同 score 值的成員按字典序(lexicographical order )來排列。
如果你需要成員按 score 值遞減(從大到小)來排列,請使用 ZREVRANGE 命令。
下標引數 start 和 stop 都以 0 為底,也就是說,以 0 表示有序集第一個成員,以 1 表示有序集第二個成員,以此類推。
你也可以使用負數下標,以 -1 表示最後一個成員, -2 表示倒數第二個成員,以此類推。
超出範圍的下標並不會引起錯誤。
比如說,當 start 的值比有序集的最大下標還要大,或是 start > stop 時, ZRANGE 命令只是簡單地返回一個空列表。
另一方面,假如 stop 引數的值比有序集的最大下標還要大,那麼 Redis 將 stop 當作最大下標來處理。
可以通過使用 WITHSCORES 選項,來讓成員和它的 score 值一併返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。
客戶端庫可能會返回一些更復雜的資料型別,比如陣列、元組等。
*/

例:
redis > ZRANGE salary 0 -1 WITHSCORES # 顯示整個有序整合員
1) “jack”
2) “3500”
3) “tom”
4) “5000”
5) “boss”
6) “10086”
redis > ZRANGE salary 1 2 WITHSCORES # 顯示有序集下標區間 1 至 2 的成員
1) “tom”
2) “5000”
3) “boss”
4) “10086”
redis > ZRANGE salary 0 200000 WITHSCORES # 測試 end 下標超出最大下標時的情況
1) “jack”
2) “3500”
3) “tom”
4) “5000”
5) “boss”
6) “10086”
redis > ZRANGE salary 200000 3000000 WITHSCORES # 測試當給定區間不存在於有序集時的情況
(empty list or set)