redis 的快取策略

2021-09-29 10:14:54 字數 2039 閱讀 4322

配置redis成為乙個快取,如果redis當做乙個快取來用,所有的key都有過期時間

1.配置快取

1)設定最大記憶體使用量

maxmemory 2mb

2)設定過期策略

#maxmemory-policy allkeys-lru 該設定並不需要我們的應用使用expire(或相似的命令)命令去設定每個key的過期時間,因為只要記憶體使用量到達2m,redis就會使用類lru演算法自動刪除某些key。

#maxmemory-policy allkeys-random:隨機移除任何key。

#maxmemory-policy volatile-lru:利用lru演算法移除設定過過期時間的key。

#maxmemory-policy volatile-random:隨機移除設定過過期時間的key。

#maxmemory-policy volatile-ttl:移除即將過期的key,根據最近過期時間來刪除(輔以ttl)

#maxmemory-policy noeviction:不移除任何key,只是返回乙個寫錯誤,讓使用者對快取內容進行處理,使用者根據需要刪除自己想刪除的內容。

備註:a.最大記憶體達到後redis將不再接收寫請求,只接收get請求。

b.lru,即最近最少使用

c.ttl,即time to live,意思就是生存時間

d.至於選擇哪個策略,一切根據需求來

2.快取的應用舉例

1.見圖「tomcat集群下session共享.png」

2.按圖所示,兩次產生的session值不一樣,將會產生什麼問題?

會讓使用者一直登陸,無法使用系統。需要「單點登入」配置。

session!=null(錯誤)

session.getatitute("username")!=null(正確)

3.問題2的解決方案?

使用redis快取web集群環境下的session值,如下幾步:

1)首先,啟動乙個redis例項作為快取

啟動6379埠的redis,強烈建議用一台單獨的redis作為快取。

2)配置tomcat/conf/context.xml

a.如果是單點redis則配置**如下:

b.如果是sentinel-redis集群則配置**如下:

備註:maxinactiveinterval含義為最大不活動時間,應該是每接受一次請求就重新起算,單位秒

3)在tomcat/lib中匯入一下jar包

tomcat-juli-adapters.jar

tomcat-redis-session-manager1.2.jar

jedis-2.6.2.jar

tomcat-juli.jar

commons-pool2-2.4.1.jar

4)共享原理

tomcat在啟動的時候,每乙個tomcat例項連線redis,當有使用者訪問的時候再寫入session資訊,其他tomcat例項根據指定的配置檔案從redis例項中讀取該session。

4.演示

配置好context.xml後,重啟tomcat,訪問頁面驗證每次列印的sessionid是否一致。

5.注意

1)即使是context.xml總配置maxinactiveinterval預設60秒,只要web.xml中的sessionconfig預設配置30分鐘,則session的失效時間還是30分鐘。

2)tomcat仍然為每乙個訪問的使用者建立他的session.

3)只是連上了伺服器但是沒有輸入使用者名稱密碼登入的情況下session建立了嗎?yes

4)關閉瀏覽器後原來的session消失了嗎?no

5)所有的tomcat例項的context.xml配置必須都相同的,只有相同才能保證所有的tomcat例項訪問的是同乙個sessions。

6)如果redis訪問需要密碼,需要在context.xml中配置password屬性指定密碼。

7)session是基於cookie的,在以後的訪問請求中會包含該sessionid,其他的tomcat就是根據包含的這個id到redis中檢視它是否存在,如果存在則不建立新session否則就建立並寫入新session.

Redis快取策略

redis快取一般使用cache aside pattern原則。什麼是 cache aside pattern cache aside pattern即為旁路快取方案的經驗實踐,分為讀實踐和寫實踐。那麼運算元據的時候先操作快取還是先運算元據庫?1.讀請求 先從快取中讀取所需資料,如果沒有則從資料庫...

Redis 快取的淘汰策略

redis官方給的警告,當記憶體不足時,redis會根據配置的快取策略淘汰部分keys,以保證寫入成功。當無淘汰策略時或沒有找到適合淘汰的key時,redis直接返回out of memory錯誤。1 volatile lru 從已設定過期時間的資料集 server.db i expires 中挑選...

Redis的快取淘汰策略

先進先出演算法 fifo least frequently used lfu 淘汰一定時期內被訪問次數最少的頁面,以次數作為參考 least recently used lru 淘汰最長時間未被使用的頁面,以時間作為參考 這些演算法在不同層次的快取上執行時擁有不同的效率和代價,需根據具體場合選擇最合...