Redis-相关概念记录
生活随笔
收集整理的這篇文章主要介紹了
Redis-相关概念记录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
Redis內部數據類型
-
SDS(simple dynamic string)
通過SDS來存儲String,優勢: - 直接獲取長度,效率更高;
- 防止溢出;
- 空間分配,釋放策略更加高效;
- 二進制安全;
-
鏈表
-
字典 字典包含哈希表,哈希表再包含哈希節點。
- 自動擴容或者縮容,采取漸進式rehash;
-
跳表
只用于有序列表。 -
整數集合
集合鍵的底層實現之一,可以升級或者降級優化空間。 -
壓縮列表
列表鍵和哈希鍵的底層實現之一,只包含少量的項,均是小整數值時,采用壓縮列表來作為底層實現。
Redis對象
-
字符串對象
- 編碼:int raw(SDS) embstr;
-
列表對象
- 編碼:ziplist(壓縮列表) linkedlist(鏈表);
-
哈希對象
- 編碼:ziplist(壓縮列表) hashtable(字典);
-
集合對象
- 編碼:intset(整數集合) hashtable(字典);
-
有序集合
- 編碼:ziplist(壓縮列表) skiplist(跳表);
Redis持久化
-
RDB
- 將內存中的數據庫狀態保存到磁盤當中。
- 方式:SAVE(導致服務器阻塞) BGSAVE(子線程方式,服務器不會阻塞) 配置save參數設置自動觸發條件;
-
AOF
- 通過保存服務器執行命令的寫來記錄數據庫狀態。
- 步驟:命令追加 文件寫入 文件同步(always everysec no)
Redis事件
-
文件事件
- Reactor模型,同時支持多個客戶端,所有的事件放入隊列單線程處理。
-
時間事件
- 類型:定時時間,周期性事件;
- 所有的時間事件通過鏈表的形式組成,若是周期任務,處理完成后,新增加事件在鏈表當中;
Sentinel
-
基礎概念
- 本質上是特殊模式下的Redis服務器;
- 通過配置文件制定監視的主服務器;
- 通過INFO命令從主服務器獲取從服務器;
-
選舉相關
- 與Redis服務器通信答復無效時判斷為主觀下線;
- 與其他Sentinel協商判斷是否客觀下線;
- 選舉Leader(raft算法),進行故障轉移;
集群
- 基礎概念
- 各個節點通過Gossip協議傳播;
- 集群中的數據庫被分為16384個slot;
- 節點只能使用0號數據庫;
事務
- 基礎概念
- 事務提供一種將多個命令請求打包,然后一次性,按順序地執行多個命令的機制;
- WATCH為樂觀鎖,若事務期間,WATCH監視的鍵至少有一個被修改,則事務失敗;
- 事務的ACID
- 原子性:Redis事務不支持回滾;
- 一致性;
- 隔離性;
- 耐久性;
研發規范
- Key設計
- key的一個格式約定: object-type:id:field 。用":"分隔域,用"."作為單詞間的連接, 如" comment:12345:reply.to "。不推薦含義不清的key和特別長的key。
Redis-Java客戶端
內存淘汰策略
內存使用相關
分片
- 優勢
- 更多的內存;
- 更多的cpu,帶寬;
- 劣勢
- 不能直接的做多鍵相關的操作;
- 涉及多鍵的事務不支持;
- 分片是按照Key來劃分,對單Key,但是value數據量很大的場景無效;
- 擴容有一定難度;
- 實現方式
- 客戶端分片;
- 代理分片(Twemproxy)
- 查詢路由(Redis cluster)
高可用
應用場景
- Redis存儲會話
- 使用容器拓展實現;
- 自定義會話管理;
- 使用框架的會話管理工具;
參考列表:
轉載于:https://my.oschina.net/u/3052784/blog/1608747
總結
以上是生活随笔為你收集整理的Redis-相关概念记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高性能MySQL——查询性能优化
- 下一篇: mysql性能调整三板斧