Redis 是徹底開源免費的,遵照BSD協議,是一個高性能的key-value數據庫。程序員
Redis 與其餘 key - value 緩存產品有如下三個特色:redis
Redis有着更爲複雜的數據結構而且提供對他們的原子性操做,這是一個不一樣於其餘數據庫的進化路徑。Redis的數據類型都是基於基本數據結構的同時對程序員透明,無需進行額外的抽象。數據庫
Redis運行在內存中可是能夠持久化到磁盤,因此在對不一樣數據集進行高速讀寫時須要權衡內存,由於數據量不能大於硬件內存。在內存數據庫方面的另外一個優勢是,相比在磁盤上相同的複雜的數據結構,在內存中操做起來很是簡單,這樣Redis能夠作不少內部複雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,由於他們並不須要進行隨機訪問。編程
STRING:字符串、整數或浮點數緩存
LIST:列表,可存儲多個相同的字符串安全
SET:集合,存儲不一樣元素,無序排列網絡
HASH:散列表,存儲鍵值對之間的映射,無序排列數據結構
ZSET:有序集合,存儲鍵值對,有序排列多線程
對比項 | Redis | Memcache |
---|---|---|
數據結構 | 豐富數據類型 | 只支持簡單 KV 數據類型 |
數據一致性 | 事務 | cas |
持久性 | 快照/AOF | 不支持 |
網絡IO | 單線程 IO 複用 | 多線程、非阻塞 IO 複用 |
內存管理機制 | 現場申請內存 | 預分配內存 |
Redis 是基於內存的操做,CPU 不是 Redis 的瓶頸,Redis 瓶頸最有多是內存或網絡。並且單線程容易實現,避免了沒必要要的上下文切換和競爭條件,不存在多線程切換消耗 CPU編程語言
類型 | 簡介 | 特性 | 場景 |
---|---|---|---|
String(字符串) | 二進制安全 | 能夠包含任何數據,好比jpg圖片或者序列化的對象,一個鍵最大能存儲512M | --- |
Hash(字典) | 鍵值對集合,即編程語言中的Map類型 | 適合存儲對象,而且能夠像數據庫中update一個屬性同樣只修改某一項屬性值(Memcached中須要取出整個字符串反序列化成對象修改完再序列化存回去) | 存儲、讀取、修改用戶屬性 |
List(列表) | 鏈表(雙向鏈表) | 增刪快,提供了操做某一段元素的API | 1,最新消息排行等功能(好比朋友圈的時間線) 2,消息隊列 |
Set(集合) | 哈希表實現,元素不重複 | 一、添加、刪除,查找的複雜度都是O(1) 二、爲集合提供了求交集、並集、差集等操做 | 一、共同好友 二、利用惟一性,統計訪問網站的全部獨立ip 三、好友推薦時,根據tag求交集,大於某個閾值就能夠推薦 |
Sorted Set(有序集合) | 將Set中的元素增長一個權重參數score,元素按score有序排列 | 數據插入集合時,已經進行自然排序 | 一、排行榜 二、帶權重的消息隊列 |