配置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 淘汰最長時間未被使用的頁面,以時間作為參考 這些演算法在不同層次的快取上執行時擁有不同的效率和代價,需根據具體場合選擇最合...