redis進階

關於redis優點:

1.速度極快 10 萬次 ops 的讀寫
2.持久化 使用 快照RDB 或 日誌AOF的方式 
3.支持多種數據結構 hash list string set zset
4.支持多種編程語言 提供api 多個語言都可以直接使用 如Java、PHP、Python、Ruby、Lua、Nodejs
5.功能豐富 如發佈訂閱、Lua 腳本、事務、Pipeline(管道,即當指令到達一定數量後,客戶端纔會執行)
6.簡單。不依賴外部庫、單線程、只有 23000 行 Code。
7.主從複製。主節點的數據做副本,這是做高可用的基石。 自古互聯網留下來的教訓 單臺機器不靠譜
8.高可用和分佈式 Redis-Sentinel(v2.8)支持高可用,Redis-Cluster(v3.0)支持分佈式。

常見的應用場景:

1.緩存系統 緩解db壓力(這個是大家完全達成共識的場景)
2.計數器 可以使用incrby 和 decrby 比如文章瀏覽、轉發、點贊、評論 這些數據統計
3.消息隊列系統 一些高併發操作 或者 排隊處理某些業務 比如秒殺等等
4.排行榜 使用zset數據結構 比如 點贊排行榜等
5.社交網絡 比如QQ之類的社交產品 用戶登錄狀態、羣消息計數

6.按照用戶投票和時間排序 比如csdn blog可以通過時間和訪問量 去排序

底層實現:

https://blog.csdn.net/caishenfans/article/details/44784131

常見架構:


整體通訊流程:

1.client 首先找到一個可用的Sentinel節點
2.client 調用Sentinel, 來獲取masterName或者slaveName這個時候,Sentinel 會返回真正的名稱和地址

3.client 連接對應redis節點進行操作

Sentinel 節點作用:

監控redis服務是否可達,如果某個節點不可達對其做下線標示。
如果下線節點爲matser節點,Sentinel會發起投票選其中一個slave節點升級爲master節點

在某些場景下也有可能會選出多個master,等待一段時間後重新選舉

maxmemory 置換策略:

noeviction: 不進行置換,表示即使內存達到上限也不進行置換,所有能引起內存增加的命令都會返回error
allkeys-lru: 優先刪除掉最近最不經常使用的key,用以保存新數據
volatile-lru: 只從設置失效(expire set)的key中選擇最近最不經常使用的key進行刪除,用以保存新數據
allkeys-random: 隨機從all-keys中選擇一些key進行刪除,用以保存新數據
volatile-random: 只從設置失效(expire set)的key中,選擇一些key進行刪除,用以保存新數據
volatile-ttl: 只從設置失效(expire set)的key中,選出存活時間(TTL)最短的key進行刪除,用以保存新數據

擴展知識:

Redis 借鑑了 Linux 操作系統對於版本號的命名規則:版本號第二位如果是奇數,則爲非穩定版本(例如2.7、2.9、3.1),如果是偶數,則爲穩定版本(例如2.6、2.8、3.0、3.2)。當前奇數版本就是下一個穩定版本的開發版本,例如2.9版本是3.0版本的開發版本。所以我們在生產環境通常選取偶數版本的 Redis,如果對於某些新的特性想提前瞭解和使用,可以選擇最新的奇數版本。

持續補充.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章