[toc]redis
任何二進制序列均可以做爲Redis的Key使用(例如普通的字符串或一張JPEG圖片)數組
關於Key的一些注意事項:緩存
不要使用過長的Key。例如使用一個1024字節的key就不是一個好主意,不只會消耗更多的內存,還會致使查找的效率下降數據結構
Key短到缺失了可讀性也是很差的,例如"u1000flw"比起"user:1000:followers"來講,節省了寥寥的存儲空間,卻引起了可讀性和可維護性上的麻煩性能
最好使用統一的規範來設計Key,好比"object-type:id:attr",以這一規範設計出的Key多是"user:1000"或"comment:1234:reply-to"編碼
Redis容許的最大Key長度是512MB(對Value的長度限制也是512MB)spa
經常使用命令: set,get,decr,incr,mget 等。設計
字符串是最經常使用的數據類型,他可以存儲任何類型的字符串,固然也包括二進制、JSON化的對象、甚至是Base64編碼以後的圖片。在Redis中一個字符串最大的容量爲512MB.code
常規key-value緩存應用; 常規計數:微博數,粉絲數等。對象
經常使用命令: hget,hset,hgetall 等。
hash 是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象,後續操做的時候,你能夠直接僅僅修改這個對象中的某個字段的值。 好比咱們可使用hash 數據結構來存儲用戶信息,商品信息等等。
經常使用命令: lpush,rpush,lpop,rpop,lrange等
list 就是鏈表,Redis list的應用場景很是多,也是Redis最重要的數據結構之一,好比微博的關注列表,粉絲列表,消息列表等功能均可以用Redis的 list 結構來實現。
Redis list 的實現爲一個雙向鏈表,便可以支持反向查找和遍歷,更方便操做,不過帶來了部分額外的內存開銷。
另外能夠經過 lrange 命令,就是從某個元素開始讀取多少個元素,能夠基於 list 實現分頁查詢,這個很棒的一個功能,基於 redis 實現簡單的高性能分頁,能夠作相似微博那種下拉不斷分頁的東西(一頁一頁的往下走),性能高。
換句話說,Redis的List實際是設計來用於實現隊列,而不是用於實現相似ArrayList這樣的列表的。若是你不是想要實現一個雙端出入的隊列,那麼請儘可能不要使用Redis的List數據結構。
爲了更好支持隊列的特性,Redis還提供了一系列阻塞式的操做命令,如BLPOP/BRPOP等,可以實現相似於BlockingQueue的能力,即在List爲空時,阻塞該鏈接,直到List中有對象能夠出隊時再返回。
經常使用命令: sadd,spop,smembers,sunion 等
set 對外提供的功能與list相似是一個列表的功能,特殊之處在於 set 是能夠自動排重的。
當你須要存儲一個列表數據,又不但願出現重複數據時,set是一個很好的選擇,而且set提供了判斷某個成員是否在一個set集合內的重要接口,這個也是list所不能提供的。能夠基於 set 輕易實現交集、並集、差集的操做。
好比:在微博應用中,能夠將一個用戶全部的關注人存在一個集合中,將其全部粉絲存在一個集合。Redis能夠很是方便的實現如共同關注、共同粉絲、共同喜愛等功能。這個過程也就是求交集的過程,具體命令以下:
sinterstore key1 key2 key3 將交集存在key1內
經常使用命令: zadd,zrange,zrem,zcard等
和set相比,sorted set增長了一個權重參數score,使得集合中的元素可以按score進行有序排列。
舉例: 在直播系統中,實時排行信息包含直播間在線用戶列表,各類禮物排行榜,彈幕消息(能夠理解爲按消息維度的消息排行榜)等信息,適合使用 Redis 中的 Sorted Set 結構進行存儲。
Redis的這兩種數據結構相較以前的並不經常使用,在本文中只作簡要介紹
Bitmap在Redis中不是一種實際的數據類型,而是一種將String做爲Bitmap使用的方法。能夠理解爲將String轉換爲bit數組。使用Bitmap來存儲true/false類型的簡單數據極爲節省空間。
HyperLogLogs是一種主要用於數量統計的數據結構,它和Set相似,維護一個不可重複的String集合,可是HyperLogLogs並不維護具體的member內容,只維護member的個數。也就是說,HyperLogLogs只能用於計算一個集合中不重複的元素數量,因此它比Set要節省不少內存空間。
Pub/Sub 從字面上理解就是發佈(Publish)與訂閱(Subscribe),在Redis中,你能夠設定對某一個key值進行消息發佈及消息訂閱,當一個key值上進行了消 息發佈後,全部訂閱它的客戶端都會收到相應的消息。這一功能最明顯的用法就是用做實時消息系統,好比普通的即時聊天,羣聊等功能。