redis基本命令

Try Redis鏈接:http://try.redis.io
該網站可以直接在網頁端練習redis命令。


Redis是鍵值存儲的NoSQL數據庫,數據存儲在內存中,並可以持久化到磁盤,適合存儲需要以非常快的速度訪問、修改和插入的小文本信息。

我們可以使用命令SET將字符串(string)類型的值"fido"存儲在鍵"server:name"中:

> SET server:name "fido"
OK

然後可以用命令GET根據鍵進行查詢:

> GET server:name
"fido"

命令DEL可以刪除已存在的鍵值對。命令SETNX會在鍵不存在時創建鍵值對。

> DEL server:name
(integer) 1
> GET server:name
(nil)
> SET test 123
OK
> SETNX test 456
(integer) 0
> GET test
"123"

命令INCR以原子操作的方式遞增對應鍵的值。實際上Redis的所有操作都是原子性的。原子操作保證併發時數據不出錯。

> SET connections 10
OK
> GET connections
"10"
> INCR connections
(integer) 11
> INCR connections
(integer) 12
> DEL connections
(integer) 1
> GET connections
(nil)
> INCR connections
(integer) 1
> GET connections
"1"

需要注意上述例子中,DEL了一個鍵值對後,再次對該鍵值對執行INCR,結果爲1。

redis可以通過命令EXPIRE設置鍵值對的存活時間(默認單位爲秒),時間一到鍵值對就會被刪除。命令TTL查詢鍵值對還能存活的時間,返回秒,返回-2表示鍵值對已被刪除,返回-1表示該鍵值對沒有設置存活時間。

> SET resource:lock "Redis Demo"
OK
> EXPIRE resource:lock 120
(integer) 1
> TTL resource:lock
(integer) 94
// wait 120s
> TTL resource:lock
(integer) -2
> GET resource:lock
(nil)
> SET resource:lock "Redis Demo 2"
OK
> TTL resource:lock
(integer) -1

Redis還支持幾種更復雜的數據結構。我們要看的第一個是列表(list)。 列表是一系列有序值。相關命令是RPUSHLPUSHLLENLRANGELPOPRPOP

RPUSH將新值放在列表的末尾(右邊)。注意下邊例子沒有先SET,而是直接RPUSH的哦。

> RPUSH friends "Alice"
(integer) 1
> RPUSH friends "Bob"
(integer) 2

LPUSH將新值放在列表的開頭(左邊)。

> LPUSH friends "Sam"
(integer) 3

LRANGE給出了列表的子集,它有兩個參數,第一個是您要檢索的第一個元素的索引,第二個參數是將要檢索的最後一個元素的索引。第二個參數的值爲-1表示檢索元素直到列表的末尾。

> LRANGE friends 0 -1
1) "Sam"
2) "Alice"
3) "Bob"
> LRANGE friends 0 1
1) "Sam"
2) "Alice"
> LRANGE friends 1 2
1) "Alice"
2) "Bob"

LLEN返回當前列表的長度。LPOP移除列表的第一個元素並返回這個元素值。RPOP移除列表的最後一個元素並返回這個元素值。

> LLEN friends
(integer) 3
> LPOP friends
"Sam"
> RPOP friends
"Bob"
> LLEN friends
(integer) 1
> LRANGE friends 0 -1
1) "Alice"

我們將看到的下一個數據結構是集合(set)。 集合類似於列表,除了它沒有特定的順序,且每個元素只能出現一次。相關命令是SADDSREMSISMEMBERSMEMBERSSUNION

SADD將給定值添加到集合中。注意重複值無法添加成功。
SREM將給定值從集合中移除。

> SADD superpowers "flight"
(integer) 1
> SADD superpowers "x-ray vision"
(integer) 1
> SADD superpowers "reflexes"
(integer) 1
> SADD superpowers "reflexes"
(integer) 0
> SREM superpowers "reflexes"
1

SISMEMBER測試給定值是否在集合中,返回1就在,返回0不在。

> SISMEMBER superpowers "flight"
(integer) 1
> SISMEMBER superpowers "reflexes"
(integer) 0

SMEMBERS返回集合全部值。

> SMEMBERS superpowers
1) "x-ray vision"
2) "flight"

SUNION返回2個或多個集合的全部值。

> SADD birdpowers "pecking"
(integer) 1
> SADD birdpowers "flight"
(integer) 1
> SUNION superpowers birdpowers
1) "pecking"
2) "flight"
3) "x-ray vision"

集合是一種非常方便的數據類型,但由於它們未排序,因此無法解決許多問題。 這就是Redis 1.2引入有序集(Sorted Sets)的原因。

有序集類似於常規集,但現在每個值都有一個關聯的分數。 此分數用於對集合中的元素進行排序。下邊例子中,這個分數就是出生年份,來看看ZADDZRANGE的用法吧。

> ZADD hackers 1940 "Alan Kay"
(integer) 1
> ZADD hackers 1906 "Grace Hopper"
(integer) 1
> ZADD hackers 1953 "Richard Stallman"
(integer) 1
> ZADD hackers 1965 "Yukihiro Matsumoto"
(integer) 1
> ZADD hackers 1916 "Claude Shannon"
(integer) 1
> ZADD hackers 1969 "Linus Torvalds"
(integer) 1
> ZADD hackers 1957 "Sophie Wilson"
(integer) 1
> ZADD hackers 1912 "Alan Turing"
(integer) 1
> ZRANGE hackers 2 4
1) "Claude Shannon"
2) "Alan Kay"
3) "Richard Stallman"

簡單的字符串,集合和有序集已經完成了很多工作,但還有一個Redis可以處理的數據類型:哈希(Hash)。

哈希是字符串字段和字符串值之間的映射,因此它們是表示對象的完美數據類型(例如:具有多個字段的用戶,如姓名,姓氏,年齡等)。

HSET添加數據,HGETALL獲取全部數據。

> HSET user:1000 name "John Smith"
(integer) 1
> HSET user:1000 email "[email protected]"
(integer) 1
> HSET user:1000 password "s3cret"
(integer) 1
> HGETALL user:1000
1) "name"
2) "John Smith"
3) "email"
4) "[email protected]"
5) "password"
6) "s3cret"

也可用HMSET命令,一行就搞定上述操作:

> HMSET user:1001 name "Mary Jones" password "hidden" email "[email protected]"
OK

如果你只想獲取部分數據,用命令HGET

> HGET user:1001 name
"Mary Jones"

哈希字段中的數值處理與簡單字符串中的數字值完全相同,並且存在以原子方式遞增此值的操作。相關命令爲HINCRBY

> HSET user:1000 visits 10
(integer) 1
> HINCRBY user:1000 visits 1
(integer) 11
> HINCRBY user:1000 visits 10
(integer) 21
> HDEL user:1000 visits
(integer) 1
> HINCRBY user:1000 visits 1
(integer) 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章