聊聊redis實際運用及騷操作

2022-01-23 04:56:54 字數 2560 閱讀 7536

前言

聊起 redis 咱們大部分後端猿應該都不陌生,或多或少都用過。甚至大部分前端猿都知道。

資料結構: string、 hash、 list、 set (無序集合)、 setsorted(有序集合),

運維方面 : 持久化,主從複製,集群,故障恢復 ,

園子裡已經由大佬科普過了,官方

文件也能查到, 這裡就不細說 redis的「發展起家史」。

咱們今天就聊聊redis的快取應用場景(不推薦用redis做分布式鎖),redis常見操作(擊穿,雪崩,快取資料量過大等),常見問題及處理方式。怎麼用到咱們專案中,提公升產品體驗。結合我實際專案來解釋這裡面得思路。(saas,企業級應用)

型別

公共快取 

資料極少變動:可使用本機記憶體快取,單例模式。(如預製分類、城市、配置,首頁布局等)

使用者相關快取

跟登陸賬戶相關,集群化部署需要使用分布式快取

使用者登陸後的首屏資料,如,常用統計,分類許可權選單,待辦事項,工作台等

載入方式

預載入:系統初始化即載入資料進入快取(比如相關靜態資料)

延遲載入:有請求才做快取,無請求則不進行快取(動態資料)

時間設定

不過期

固定過期時間(幾小時,哪一天)

非固定過期時間(做過期時間的更新,獲取redis資料時同步更新快取時間, 如下流程圖標意)

失效帶來的問題

穿透大量無效的key訪問,資料並不存在

解決:key做驗證過濾;無資料也進行快取(空物件,非null)

擊穿1個key失效,但這個key有大量併發請求,特別是公共快取

解決:失效時間點設定在非高峰時間段;主動做快取更新(過期之前操作),而不是清理在重建

雪崩大量key設定了相似過期時間(前後幾分鐘),導致資料庫請求瞬間增加。或者快取伺服器掛了

解決:大量key不要設定相同時間點過期或者過期時間比較接近,可以進行相對時間設定

專案使用思考

下面結合我自己專案,各位看官可酌情參考,騷操作開始

反向操作

快取部分資料

有些資料太多,如果一直都是全部快取,可能會帶來一些問題,記憶體會爆掉,我們可以快取部分資料, 比如id(id和許可權有關,通過許可權去取鏈路太長,而許可權的變更不頻繁)

讓實體無資料被快取。資料可被快取,但引起該快取失效點眾多難以全部覆蓋 

讓資料持續有效,提公升快取命中率

當get資料有快取之時,重置快取有效時間

利用佇列、事件匯流排、發布訂閱、任務管理等進行非同步快取預處理

設定快取版本時間,進行對比(適用於主從關係的資料)

什麼意思呢,清理快取的地方太多,無法覆蓋,我們可以設定版本快取時間。讓相關快取和這個快取版本時間進行對比 屬性快取時間》 快取版本時間=有效

(舉個例子)乙個專案下由多個工單, 工單設定了快取,如果專案的基礎資訊修改,沒法及時清理所有工單的快取(其實這樣也不科學,可能導致連線數過高)可以為這個專案設定快取的時間,獲取工單資訊的時候如果工單的快取的時間大於專案快取的時間。有               效直接返回資料,如果無效,則獲取db更新相關快取即可

這反手一波波操作很騷,咱們說下正常操作(其實也不算騷,反過來思考)

正常操作

常用資料加入快取

請求數量龐大的請求加入快取

查詢較慢(通常是資料量基數龐大)的請求加入快取

舉個例子,像下列基本都可以做快取(根據自己的業務來,也可不做,一種方案)

首頁列表(或常用列表)

置頂內容標題

未讀計數(也可用訊息佇列)

常用協作目標聯絡人搜尋

常用統計周檢視日程

首屏資料

統計整體操作

資料完整的置入快取

使用者資訊  

許可權資訊 

快取組讓具備快取失效關聯關係的可將關鍵置入快取組,失效則同時進行失效,關係可存放於記憶體或者redis支援結構裡面

善用redis,合理利用二級快取,合理利用redis所支援的結構,以提公升專案整體效能,redis雖好,不可」貪杯「,否則影響穩定性就得不償失了(redis只是乙個方面,還可以分表,分庫,資料庫拆分,kafka,elasticsearch,solr等,技術都是手段,提供給使用者好的體驗,解決問題才是最重要的)

謝謝!如果您覺得閱讀本文對您有幫助,請點一下「推薦」按鈕,您的「推薦」將是我最大的寫作動力!

聊聊那些年的騷操作!!!

適逢過年,技術文章也沒多少人願意耐著性子看,那就聊聊我那些年的騷操作。給大家講講故事的同時,如果能給列位有所啟發,那這篇文章也算是沒有白費我的腦汁子。今天要講的是有關那些年我賺錢的一些騷操作,當然都是一些小錢,但是操作性是可以借鑑或複製的。故事得從我上大學時候開始,敘事不分時間先後。不知道各位中有沒...

CSS flex布局實際運用及理解

最近專案中經常這種布局,如下圖所示 1高度固定,2高度不確定,根據內容變化,3撐滿可視區剩下高度。這裡我們可以用flex布局。先給父元素加上 display flex flex direction column 高度撐滿的3元素加上 flex 1 auto也可以 完整布局 如下 我是固定高度 我高度...

base64的原理及實際運用講解

base64是一種用64個字元來表示任意二進位制資料的方法。用記事本開啟exe jpg pdf這些檔案時,我們都會看到一大堆亂碼,因為二進位制檔案包含很多無法顯示和列印的字元,所以,如果要讓記事本這樣的文字處理軟體能處理二進位制資料,就需要乙個二進位製到字串的轉換方法。base64是一種最常見的二進...