Redis學習記錄
參考資料:
http://www.dengshenyu.com/%E5%90%8E%E7%AB%AF%E6%8A%80%E6%9C%AF/2016/01/09/redis-reactor-pattern.html
http://www.redis.cn/topics/data-types.html
http://www.syyong.com/db/Redis-why-the-use-of-single-process-and-single-threaded-way-so-fast.html
https://toutiao.io/posts/546542/app_preview
http://ifeve.com/redis-persistence/
0. 環境
Redis server: 3.0.3
1. 數據類型
- 字符串(Strings)
字符串是一種最基本的Redis值類型。Redis字符串是二進制安全的,這意味著一個Redis字符串能包含任意類型的數據。一個字符串類型的值最多能存儲512M字節的內容。
- 列表(Lists)
Redis列表是簡單的字符串列表,按照插入順序排序。
- 集合(Sets)
Redis集合是一個無序的字符串合集。添加、刪除以及測試元素是否存在操作的時間復雜度為O(1)。
- 哈希(Hashes)
Redis Hashes是字符串字段和字符串值之間的映射,所以它們是完美的表示對象的數據類型。
- 有序集合(Sorted sets)
Redis有序集合和Redis集合類似,是不包含相同字符串的合集。但每個有序集合的成員都關聯著一個評分,這個評分用於把有序集合中的成員按最低分到最高分排列。
- Bitmaps 和 HyperLogLogs
Redis同樣支持Bitmaps和HyperLogLogs數據類型,實際上是基於字符串的基本類型的數據類型,但有自己的語義。
2. Redis為什麽速度快?
- 完全基於內存
- 單線程:CPU無需在多個線程之間來回切換
- I/O多路復用技術:異步非阻塞IO,既不會因為線程過多導致CPU頻繁切換,又能充分利用服務器資源
3. Redis超時及應對方法?
- 慢查詢:確認是否使用慢查詢,可以使用slowlog get num查看相應的慢命令
- 內存使用情況:由於Redis完全基於內存,故這個指標需要關註
- 連接客戶端數量:若連接客戶端數量超過默認值容易導致超時
- 查看redis主機是否為虛擬機,這樣會有內存延遲:./redis-cli --intrinsic-latency 100這個命令可以在server端進行判斷是否redis有延遲,在客戶端通過-h -p 參數可以進行對比一下是否為網絡上的影響
- 一般情況下大量的刪除、過期以及淘汰(由maxmemory-policy控制的)的大對象,也會造成redis阻塞,進而造成相應的延遲:經常有比較大的對象進行刪除、過期和淘汰的,建議將這些對象分割成一些小對象。
- 持久化導致延遲,因為持久化是把數據保存到磁盤中,IO操作占用大量CPU資源可能導致Redis無法得到執行時間:選擇更合理的持久化方案,例如AOF + fsync every second
4. Redis持久化及其優缺點
- RDB持久化:可以在指定的時間間隔內生成數據集的時間點快照
- AOF持久化:記錄服務器執行的所有寫操作命令,並在服務器啟動時,通過重新執行這些命令來還原數據集
優點 | 缺點 | |
RDB |
|
|
AOF |
|
|
5. Redis與Memcached的區別
- 實現機制不同:Redis單進程單線程,Memcached單進程多線程
- 持久化策略不同:Redis支持持久化,Memcached必須借助外部工具才能實現持久化
- Redis功能比Memcached更強大,Redis不僅僅是內存數據庫(例如可利用Pub/Sub實現發布訂閱的消息中間件),而Memcached僅僅是內存數據庫
Redis學習記錄