Redis_數據類型及命令詳細介紹

數據庫結構

  • redis是key-value的數據結構,每條數據都是⼀個鍵值對
  • 鍵的類型是字符串
  • 注意:鍵不能重複

數據類型分5種:string,hash,list,set,zset

字符串(String)

字符串類型是Redis中最爲基礎的數據存儲類型,該類型可以接受任何格式的數據,如JPEG圖像數據或Json對象描述信息等。在Redis中字符串類型的Value最多可以容納的數據長度是512M。

	1. set key value 			// 設置鍵值
	2. get key           		// value
	3. setex key seconds value  // 設置鍵值及過期時間
	4. mset key1 value1 key2 value2 ... // 設置多個鍵值
	5. mget key1 key2...
	6. append key vvv    		// 向key中追加值

你可以用Redis字符串做許多有趣的事,例如你可以:

  • 利用INCR命令簇(INCR, DECR, INCRBY)來把字符串當作原子計數器使用。
  • 使用APPEND命令在字符串後添加內容。
  • 將字符串作爲GETRANGE 和 SETRANGE的隨機訪問向量。
  • 在小空間裏編碼大量數據,或者使用 GETBIT 和 SETBIT創建一個Redis支持的Bloom過濾器。

通用命令

	1. del k1 k2    	// 刪除鍵及對應的值
	2. keys *       	// 查看所有key  /keys k* (正則)
	3. expire k1 100    // 設置過期時間
	4. ttl k1       	// 查看有效時間.鍵不存在爲-2,鍵永久時間爲-1
	5. exists k1 		// 存在爲1,不存在爲0
	6. type k1  		// 查看value的類型

哈希(hash)

Hashes是字符串字段和字符串值之間的映射,所以它們是完美的表示對象(eg:一個有名,姓,年齡等屬性的用戶)的數據類型。

  1. hash⽤於存儲對象,對象的結構爲屬性、值(key field value)
  2. 值的類型爲string
	1. hset key field value	 
	2. hmset key field value field2 value2 ...
	3. hget key field
	4. hmget key field field2 ...
	5. hkeys  key  				// 獲取key 所有field
	6. hvals  key				// 獲取key 所有value
	7. hdel key field field2 ...// 刪除key下的field及其對應的value
	8. del key					// 刪除鍵下所有的field及其對應的value
	9. hlen key  				// 獲取鍵值對的個數

列表(list)

列表是簡單的字符串列表,按照插入順序排序。 你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。(頭 l1 l2 … 尾)
LPUSH 命令插入一個新元素到列表頭部,而RPUSH命令 插入一個新元素到列表的尾部。當對一個空key執行其中某個命令時,將會創建一個新表。

  1. 列表的元素類型爲string
  2. 按照插⼊順序排序
lpush key v1 v2 ...			// 將新元素插在頭部(頭 ... v2 v1 尾)
rpush key l1 l2 ... 		// 將新元素插在尾部(頭 ... v2 v1 l1 l2 ... 尾) 
lpop key					// 將第一個元素刪除並拋出
linsert key before/after l1 a1	// 將新元素插在l1之前/之後
lset key index value		// 更新index對應的值
lrange key start stop 		// 	遍歷list中的元素(從0開始,左右都包),stop爲-1遍歷所有元素
lindex key index			// 查看index對應的值
lrem key count value  		// 從左往右刪除一個或多個爲value的值 (沒有rrem)
llen key					// 查看list長度

一個列表最多可以包含232-1個元素(4294967295,每個表超過40億個元素)。

從時間複雜度的角度來看,Redis列表主要的特性就是支持時間常數的插入和靠近頭尾部元素的刪除,即使是需要插入上百萬的條目。 訪問列表兩端的元素是非常快的,但如果你試着訪問一個非常大的列表的中間元素仍然是十分慢的,因爲那是一個時間複雜度爲 O(N) 的操作。

你可以用Redis列表做許多有趣的事,例如你可以:

  • 在社交網絡中建立一個時間線模型,使用LPUSH去添加新的元素到用戶時間線中,使用LRANGE去檢索一些最近插入的條目。
  • 你可以同時使用LPUSH和LTRIM去創建一個永遠不會超過指定元素數目的列表並同時記住最後的N個元素。
  • 列表可以用來當作消息傳遞的基元(primitive),例如,衆所周知的用來創建後臺任務的Resque Ruby庫。
  • 你可以使用列表做更多事,這個數據類型支持許多命令,包括像BLPOP這樣的阻塞命令。請查看所有可用的列表操作命令獲取更多的信息。

集合(Set)

Redis集合是一個無序的字符串合集。你可以以O(1) 的時間複雜度(無論集合中有多少元素時間複雜度都爲常量)完成 添加,刪除以及測試元素是否存在的操作。

Redis集合有着不允許相同成員存在的優秀特性。向集合中多次添加同一元素,在集合中最終只會存在一個此元素。實際上這就意味着,在添加元素前,你並不需要事先進行檢驗此元素是否已經存在的操作。

一個Redis列表十分有趣的事是,它們支持一些服務端的命令從現有的集合出發去進行集合運算。 所以你可以在很短的時間內完成合並(union),求交(intersection), 找出不同元素的操作。

一個集合最多可以包含232-1個元素(4294967295,每個集合超過40億個元素)。

  1. ⽆序集合
  2. 元素爲string類型
  3. 元素具有唯⼀性,不重複
  4. 說明:對於集合沒有修改操作
	1. sadd key member member2 ... 	// 添加元素
	2. smembers key 				// 查看所有元素
	3. sismember key member 	    // 查看指定元素是否存在,1:存在,0:不存在
	4. srem key memeber ...			// 刪除元素
	5. sinter key key2 ... 			// 返回key和key2中的交集元素
	6. spop key count				// 隨機刪除並拋出count個元素(count省略時拋出一個元素)
	7. srandmember key count		// 隨機拋出count個元素(不刪除該元素)

你可以用Redis集合做很多有趣的事,例如你可以:

  • 用集合跟蹤一個獨特的事。想要知道所有訪問某個博客文章的獨立IP?只要每次都用SADD來處理一個頁面訪問。那麼你可以肯定重複的IP是不會插入的。
  • Redis集合能很好的表示關係。你可以創建一個tagging系統,然後用集合來代表單個tag。接下來你可以用SADD命令把所有擁有tag的對象的所有ID添加進集合,這樣來表示這個特定的tag。如果你想要同時有3個不同tag的所有對象的所有ID,那麼你需要使用SINTER.
  • 使用SPOP或者SRANDMEMBER命令隨機地獲取元素。

有序集合(Sorted Set / Zset)

Redis有序集合和Redis集合類似,是不包含 相同字符串的合集。它們的差別是,每個有序集合 的成員都關聯着一個評分,這個評分用於把有序集 閤中的成員按最低分到最高分排列。

使用有序集合,你可以非常快地(O(log(N)))完成添加,刪除和更新元素的操作。 因爲元素是在插入時就排好序的,所以很快地通過評分(score)或者 位次(position)獲得一個範圍的元素。 訪問有序集合的中間元素同樣也是非常快的,因此你可以使用有序集合作爲一個沒用重複成員的智能列表。 在這個列表中, 你可以輕易地訪問任何你需要的東西: 有序的元素,快速的存在性測試,快速訪問集合中間元素!

  1. sorted set,有序集合
  2. 元素爲string類型
  3. 元素具有唯⼀性,不重複
  4. 每個元素都會關聯⼀個double類型的score,表示權重,通過權重將元素從⼩到⼤排序
  5. 說明:沒有修改操作
	1. zadd 
	2. zrange
	3. zrangebyscore
	4. zrem
	5. zremrangebyscore
	6. zscore

使用有序集合你可以:

  • 在一個巨型在線遊戲中建立一個排行榜,每當有新的記錄產生時,使用ZADD 來更新它。你可以用ZRANGE輕鬆地獲取排名靠前的用戶, 你也可以提供一個用戶名,然後用ZRANK獲取他在排行榜中的名次。 同時使用ZRANK和ZRANGE你可以獲得與指定用戶有相同分數的用戶名單。 所有這些操作都非常迅速。
  • 有序集合通常用來索引存儲在Redis中的數據。 例如:如果你有很多的hash來表示用戶,那麼你可以使用一個有序集合,這個集合的年齡字段用來當作評分,用戶ID當作值。用ZRANGEBYSCORE可以簡單快速地檢索到給定年齡段的所有用戶。

參考文章:

  1. redis所有命令列表
  2. 數據類型(Data types):Redis支持不同類型值的摘要。
  3. Redis 數據類型介紹
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章