您好,登錄后才能下訂單哦!
█Redis介紹
●redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現master-slave(主從)同步。
●redis是一個高性能的key-value數據庫。redis的出現,很大程度補償了memcached這類key-value存儲的不足,在部分場合可以對關系數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP。JavaScript,Perl,Object-C,Python,Ruby等客戶端,使用很方便。
●簡單比較Redis與Memcached的區別:
1、Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
2、Redis支持數據的備份,即master-slave模式的數據備份。
3、Redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用。
●在redis中,并不是所有的數據都一直存儲在內存中,這是和Memcached相比一個最大的區別。Redis只會緩存所有的key信息,如果Redis發現內存的使用量超過了某一個閥值,將觸發swap的操作,Redis根據“swappability = age*log(size_in_memory)”計算出哪些key對應的value需要的swap到磁盤,然后將這些key對應的value持久化的磁盤中,同時在內存中清除。這種特性使得Redis可以保持超過其他機器本身內存大小的數據。當然,機器本身的內存要能夠保持所有的key,因為這些數據是不會進行swap操作的
●當從Redis中讀取數據的時候,如果讀取的key對應的value不在內存中,那么Redis就需要從swap文件中加載相應數據,然后再返回給請求方
█如何保持session會話
●目前,為了方便web能適應大規模的訪問,需要實現應用的集群部署。集群最有效的方案就是負載均衡,而實現負載均衡用戶每一個請求都有可能被分配到不固定的服務器上,這樣我們首先要解決session的統一來保證無論用戶的請求被轉發到那個服務器上都能保證用戶的正常使用,即需要實現session的共享機制。
●在集群系統下實現session統一有以下幾種方案:
1、請求精確定位:sessionsticky,例如基于訪問ip的hash策略,即當前用戶的請求都集中定位到一臺服務器中,這樣單臺服務器保存了用戶的session登錄信息,如果宕機,則等同于單點故障,會丟失,會話不復制。
2、session復制共享:sessionreplication,如Tomcat自帶session共享,主要是指集群環境下,多臺應用服務器之間同步session,使session保持一致,對外透明。如果其中一臺服務器發生故障,根據負載均衡的原理,調度器會遍歷尋找可用節點,分發請求,由于session已同步,故能保證用戶的session信息不會丟失,會話復制。
★上述方案的不足之處:
①必須在同一種中間件完成(如:Tomcat-Tomcat之間)
②session復制帶來的性能損失會快速增加,特別是當session中保存了較大的對象,而且對象變化較快時,性能下降更加顯著,會消耗系統性能。這種特性使得web應用的水平擴展受到了限制。
③session內容通過廣播同步給成員,會造成網絡流量瓶頸,即便是內網瓶頸。在大并發下表現并不好
3、基于cache DB緩存的session共享
即使用cache DB存取session信息,應用服務器接受請求將session信息保存在cache DB中,當應用服務器發生故障時,調度器會遍歷尋找可用節點,分發請求,當應用服務器發現session不在本機內存時,則去cache DB中查找,如果找到則復制到本機,這樣實現session共享和高可用
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。