Redis 是一種以鍵值對(key-value)存儲數據的NoSQL數據庫。redis
鍵值對存儲數據的本質是以某個鍵存儲某個值。以後你能夠用這個鍵把存儲的值取出來。能夠用SET
命令以鍵‘servername’存儲值‘fido’:數據庫
SET servername 'fido'
這樣,數據就被存儲了,以後可使用GET
取出剛剛存儲的數據:數據結構
GET servername // 返回 "fido"
對於數據的操做,還有一些基本的命令,好比INCR
和DEL
。flex
INCR
用於原子地遞增一個數值數據。而DEL
則是刪除一個值。翻譯
SET connections 10 INCR connections // 返回 11 INCR connections // 返回 12 DEL connections INCR connections // 返回 1
能夠經過EXPIRE
設置一個值的存活時間,過了這個時間,該值就會被刪除。經過TTL
能夠查看值的存活時間。code
對於TTL
,server
若是一個值沒有設置存活時間,那麼TTL
會返回-1
,表示這個值不會過時(這是值的默認壽命:長生);對象
若是一個值設置了存活時間,在存活時間內,對值使用TTL
會返回相應的生命剩餘時間;排序
若是對一個不存在的值或是已經超過存活時間(會被刪除)的值使用TTL
,會返回-2
。教程
注意,每使用SET
設置一個值時,該值的TTL
都會被重置爲默認。
例子:
SET resource:lock 'Redis Demo 1' TTL resource:lock // 返回 -1 EXPIRE resource:lock 120 //設置存活時間爲120秒 // 7秒後 TTL resource:lock // 返回 113 // 120秒之後 TTL resource:lock // 返回 -2 SET resource:lock 'Redis Demo 2' TTL resource:lock // 返回 -1
Redis也支持一些複雜的/複合的(complex)數據結構。這裏第一個要說的是列表。列表是一系列有序的值的集合。
與列表交互的幾個重要方法有:RPUSH
, LPUSH
, LLEN
, LRANGE
, LPOP
和RPOP
。
RPUSH
和LPUSH
用於在列表的右端和左端插入數據。
LLEN
返回列表的長度。
LRANGE
返回一個子列表,它接收兩個參數,它們標識你所要的子序列的首尾元素在原序列的位置。
若是第二個元素是-1,則表示到序列的末尾。
LPOP
和RPOP
刪除並返回左右兩端的第一個元素(跟棧的pop同樣)。
例子(不用顯式的建立列表,在向一個不存在的列表中插入值時,列表會被自動建立,當列表中的最後一個元素被pop後,列表會被自動刪除):
RPUSH friends "Alice" // 建立一個列表friends並對其添加一個元素"Alice" RPUSH friends "Bob" // 向friends添加元素"Bob" LPUSH friends "Sam" // 向friends添加元素"Sam" 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 friends // 返回 3 LPOP friends // 返回 "Sam" RPOP friends // 返回 "Bob" LLEN friends // 返回 1 LRANGE friends 0 -1 // 返回 1) "Alice"
集合跟列表相似,可是集合是無序的,且集合內元素惟一。
集合的幾個經常使用命令爲:SADD
, SREM
, SISMEMBER
, SMEMBERS
和SUNION
。
SADD
向集合中添加值。
SREM
從集合中刪除給定的值。
SISMEMBER
接收一個參數,用以判斷該參數的值是否在集合中,若在集合中返回1,不然返回0。
若是不給參數,則返回整個列表。
SMEMBERS
返回集合中全部元素。
SUNION
合併兩個集合。
例子(跟列表同樣,集合也不用顯式建立):
SADD superpowers "flight" SADD superpowers "x-ray vision" SADD superpowers "reflexes" SREM superpowers "reflexes" SISMEMBER superpowers "flight" // 返回 1 SISMEMBER superpowers "reflexes" // 返回 0 SMEMBERS superpowers // 返回 1) "flight", 2) "x-ray vision" SADD birdpowers "pecking" SADD birdpowers "flight" SUNION superpowers birdpowers // 返回 1) "pecking", 2) "x-ray vision", 3) "flight"
集合是個很好用的數據結構,可是由於它是無序的,在某些狀況下使用會不太方便。因此Redis 1.2 引入了有序集合。
有序集合的命令是Z
開頭,好比:有序集合的數據插入用的是ZADD
而不是SADD
。
有序集合跟常規集合相似,不過有序集合的每一個值都有一個與其關聯的分數(associated score),這個分數用於排序集合內元素。
來一個例子:
ZADD hackers 1940 "Alan Kay" ZADD hackers 1906 "Grace Hopper" ZADD hackers 1953 "Richard Stallman" ZADD hackers 1965 "Yukihiro Matsumoto" ZADD hackers 1916 "Claude Shannon" ZADD hackers 1969 "Linus Torvalds" ZADD hackers 1957 "Sophie Wilson" ZADD hackers 1912 "Alan Turing"
在例子中,第一個參數(出生年)是排序的分數,下面獲取索引值2到4的元素(從0開始):
ZRANGE hackers 2 4 // 返回 1) "Claude Shannon", 2) "Alan Kay", 3) "Richard Stallman"
Hashes
是字符串字段和字符串值之間的映射。因此它是表示對象的最佳數據類型:
HSET user:1000 name "John Smith" HSET user:1000 email "john.smith@example.com" HSET user:1000 password "s3cret"
使用HGETALL
得到存儲的數據(返回全部的字段名和字段值):
HGETALL user:1000
也能夠把對象的屬性一次設置完:
HMSET user:1001 name "Mary Jones" password "hidden" email "mjones@example.com"
獲取某個特定字段:
HGET user:1001 name // 返回 "Mary Jones"
數值類型在hash字段中也是很好用的,好比原子地步進一個數啥的都是能夠的:
HSET user:1000 visits 10 HINCRBY user:1000 visits 1 // 返回 11 HINCRBY user:1000 visits 10 // 返回 21 HDEL user:1000 visits HINCRBY user:1000 visits 1 // 返回 1
本文翻譯自 Try Redis。
到此爲止,try redis教程結束。更多內容,請看下面連接: