原文鏈接:https://juejin.im/post/5da80bb8f265da5b555f6dde
Redis基礎篇
安裝
Redis 介紹
Redis 是完全開源免費的,遵守BSD協議,是一個高性能的key-value數據庫。
Redis 與其他 key - value 緩存產品有以下三個特點:
- Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啓的時候可以再次加載進行使用。
- Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
- Redis支持數據的備份,即master-slave模式的數據備份。
Redis 優勢
- 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
- 豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來。
- 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
Redis與其他key-value存儲有什麼不同?
-
Redis有着更爲複雜的數據結構並且提供對他們的原子性操作,這是一個不同於其他數據庫的進化路徑。Redis的數據類型都是基於基本數據結構的同時對程序員透明,無需進行額外的抽象。
-
Redis運行在內存中但是可以持久化到磁盤,所以在對不同數據集進行高速讀寫時需要權衡內存,因爲數據量不能大於硬件內存。在內存數據庫方面的另一個優點是,相比在磁盤上相同的複雜的數據結構,在內存中操作起來非常簡單,這樣Redis可以做很多內部複雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,因爲他們並不需要進行隨機訪問。
Redis 特點
- 支持數據持久化,可將內存中的數據保存在磁盤,重啓時再次加載
- 支持 KV 類型數據,也支持其他豐富的數據結構存儲
- 支持數據備份,即 master-slave 模式的數據備份
Redis 支持哪些數據結構
-
STRING:字符串、整數或浮點數
-
LIST:列表,可存儲多個相同的字符串
-
SET:集合,存儲不同元素,無序排列
-
HASH:散列表,存儲鍵值對之間的映射,無序排列
-
ZSET:有序集合,存儲鍵值對,有序排列
Redis 與 Memcache 區別
對比項 | Redis | Memcache |
---|---|---|
數據結構 | 豐富數據類型 | 只支持簡單 KV 數據類型 |
數據一致性 | 事務 | cas |
持久性 | 快照/AOF | 不支持 |
網絡IO | 單線程 IO 複用 | 多線程、非阻塞 IO 複用 |
內存管理機制 | 現場申請內存 | 預分配內存 |
爲什麼 Redis 是單線程的
Redis 是基於內存的操作,CPU 不是 Redis 的瓶頸,Redis 瓶頸最有可能是內存或網絡。而且單線程容易實現,避免了不必要的上下文切換和競爭條件,不存在多線程切換消耗 CPU
各個數據類型應用場景:
類型 | 簡介 | 特性 | 場景 |
---|---|---|---|
String(字符串) | 二進制安全 | 可以包含任何數據,比如jpg圖片或者序列化的對象,一個鍵最大能存儲512M | — |
Hash(字典) | 鍵值對集合,即編程語言中的Map類型 | 適合存儲對象,並且可以像數據庫中update一個屬性一樣只修改某一項屬性值(Memcached中需要取出整個字符串反序列化成對象修改完再序列化存回去) | 存儲、讀取、修改用戶屬性 |
List(列表) | 鏈表(雙向鏈表) | 增刪快,提供了操作某一段元素的API | 1,最新消息排行等功能(比如朋友圈的時間線) 2,消息隊列 |
Set(集合) | 哈希表實現,元素不重複 | 1、添加、刪除,查找的複雜度都是O(1) 2、爲集合提供了求交集、並集、差集等操作 | 1、共同好友 2、利用唯一性,統計訪問網站的所有獨立ip 3、好友推薦時,根據tag求交集,大於某個閾值就可以推薦 |
Sorted Set(有序集合) | 將Set中的元素增加一個權重參數score,元素按score有序排列 | 數據插入集合時,已經進行天然排序 | 1、排行榜 2、帶權重的消息隊列 |