Linux memcached
Linux memcached
?? ?memcached是一套分布式的高速緩存系統,使用key-value來緩存數據,是由LiveJournal的Brad Fitzpatrick開發,目前被許多網站使用。這是一套開放源代碼軟件,以BSD license授權發布。memcached缺乏認證以及安全管制,所以應該將memcached服務器放置在防火墻后。
?? ?一般memcached會和mysql數據庫結合從而提高響應速度;memcached可以將SQL語句進行hash之后作為key,將查詢到的數據作為value,然后存儲在memcached的內存中,進而提高查詢速度;
?? ?memcached特點:
?? ??? ?協議簡單:使用基于文本格式的協議;
?? ??? ?基于libevent進行事件處理
?? ??? ?基于內存進行數據存儲:基于LRU算法進行緩存的存儲;
?? ??? ?memcached支持互不通信的集群:分布式
?? ?安裝:編譯安裝
?? ??? ?出現下面錯誤時才進行這些操作:
?? ??? ??? ?安裝前準備:在官網下載libevent
?? ??? ??? ??? ?wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
?? ??? ??? ??? ?tar xf libevent-2.1.8-stable.tar.gz
?? ??? ??? ??? ?cd libevent-2.1.8-stable/
?? ??? ??? ??? ?./configure
?? ??? ??? ??? ?make & make install
?? ??? ??? ??? ?ln -sv /usr/local/lib/libevent-2.1.so.6 ?/usr/lib64/libevent-2.1.so.6
?? ??? ?tar xf memcached-1.4.15.tar.gz
?? ??? ?cd memcached-1.4.15/
?? ??? ?./configure --prefix=/usr/local/memcached ?或
?? ??? ?./configure --prefix=/usr/loca/memcache --with-libevent=/usr/local/lib/libevent-2.1.so.6 ? ? 感覺這個就算指定了也沒什么用
?? ??? ?make
?? ??? ?make install
?? ?運行memcached:
?? ??? ?cd /usr/local/memcached/bin
?? ??? ?./memcached -d -u root
?? ?幫助信息:./memcached -h
?? ?安裝時的報錯:
?? ??? ?checking for libevent directory... configure: error: libevent is required. ?You can get it from http://www.monkey.org/~provos/libevent/
? ? ? ? If it's already installed, specify its path using --with-libevent=/dir/
?? ?可以通過下面的圖片來對memcached進行操作:
?? ??? ?首先需要用telnet登錄監聽在11211端口的memcached:
?? ??? ??? ?telnet localhost 11211
?
?
?? ?圖片來自:https://blog.csdn.net/qq_14927217/article/details/73692582
?? ?數據查找過程:
?? ??? ?memcached是一個旁掛式緩存,當應用程序第一次到mysql查找數據時,mysql會直接將數據返回給應用程序,接著由應用程序自己將剛在mysql返回給自己的數據保存至memcached中,然后將數據返回給客戶端;當以后客戶端請求相同的數據時,應用程序會首先查找memcached,如果memcached還存有這個數據,就直接返回給應用程序,從而響應給客戶端,如果緩存不存在了,就還要自己去mysql查找,然后再存一份到memcached中,再返回給客戶端;然后以此類推!
?? ?memcached的內存存儲:
?? ??? ?機制:slab allocation,整理內存以進行復用;
?? ??? ??? ?工作方式:slab allocator
?? ??? ??? ??? ?memcached會將自己的內存分成一些固定大小的塊(chunk),然后將大小相同的塊再分成組;比如:分100個2字節的塊,再分200個4字節的塊,再分400個4k的塊,然后將這些相同大小的塊再分成組(slab class);
?? ??? ??? ??? ?page:分配給slab用于進行分割為chunk的內存空間;
?? ??? ??? ??? ?chunk:用于存儲緩存對象的空間;
?? ??? ??? ??? ?slab class:特定大小的chunk組合而成的組空間;
?? ??? ??? ?Note:在memcached啟動時,這些內存空間就已經被切割好了,當有緩存數據需要進行緩存時,就可以直接存儲了,節省了很多時間;但是無法避免內存碎片;
?? ??? ??? ?可以通過./memcached -u root -vv來查看chunk的大小;
?? ??? ??? ?可以通過./memcached -u root -vv -f number來設置chunk的增長因子的大小;增長因子指的是按大小排序,后一種chunk的大小是前一種chunk大小的多少倍;默認為1.25倍,且最小的chunk的大小為96字節;
?? ?狀態查看:
?? ??? ?~]# memcached-tool 127.0.0.1
?? ??? ? ?# ?Item_Size ?Max_age ? Pages ? Count ? Full? ?Evicted Evict_Time OOM
? ?? ??? ? ?1 ? ? ?96B ? ? ? ?28s ? ? ? 1 ? ? ? 1 ? ? yes ? ? ? ?0 ? ? ? ?0 ? ?0
?? ??? ? 標題解釋:
?? ??? ??? ?#:slab class的編號;
?? ??? ??? ?Max_age:已緩存時長;
?? ??? ??? ?Pages:分配個slab的內存頁數量;
?? ??? ??? ?Item_Size:chunk的大小;
?? ??? ??? ?Count:slab中記錄的緩存總數;
?? ??? ??? ?full?:slab中是否還有空閑chunk;
?? ??? ??? ?Evicted:緩存被清除之前的寬限存儲時間;
?? ??? ??? ?OOM:slab class無法存儲的新數據的次數;
?? ?使用memcached緩存Tomcat的session信息:
?? ??? ?簡介:https://github.com/magro/memcached-session-manager/wiki
?? ??? ?1.拓撲結構:一臺Centos7作為前端負載均衡器,兩臺Centos6作為后端的memcached和tomcat服務器;關于前端負載均衡的配置在上一篇博客中有具體演示,此處不在贅述!
?? ??? ?2.需要使用安裝組件來支持這個功能:
?? ??? ??? ?memcached-session-manager-${version}.jar
?? ??? ??? ?memcached-session-manager-tc${6,7,8}-${version}.jar
?? ??? ??? ?spymemcached-${version}.jar ? 序列化工具,能夠將Tomcat的內存對象進行序列化以后存儲在memcached的內存中;
?? ??? ??? ?msm-javolution-serializer-${version}.jar
?? ??? ??? ?javolution-${version}.jar
?? ??? ??? ?組件下載地址:
?? ??? ??? ??? ?https://code.google.com/archive/p/memcached-session-manager/downloads
?? ??? ??? ??? ?http://repo1.maven.org/maven2/de/javakaffee/msm/
?? ??? ??? ??? ?https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
?? ??? ??? ??? ?http://www.java2s.com/Code/Jar/j/Downloadjavolution5431jar.htm
?? ??? ?3.將上述.jar包放置到$CATALINA_HOME/lib/中;
?? ??? ??? ?cp memcached-session-manager-1.7.0.jar memcached-session-manager-tc7-1.7.0.jar ?msm-javolution-serializer-1.7.0.jar javolution-5.4.3.1.jar spymemcached-2.11.1.jar /usr/share/tomcat/lib/
?? ??? ?4.添加配置內容: ?不知道問什么使用tomcat8.5做這個操作不成功,所以接下來的都是在tomcat7中完成的,上面.jar包也是7版本的;使用yum直接安裝tomcat7即可;
?? ??? ??? ?vim conf/service.xml
?? ??? ??? ??? ?<Host name="www|mail.guowei.com" appBase="/data/webapps" autoDeploy="true">
? ? ? ? ?? ??? ??? ??? ?<Context path="/apps" docBase="/data/webapps/ROOT">
?? ??? ??? ??? ??? ??? ??? ?#docBase要使用絕對路徑
? ? ? ? ? ? ? ? ?? ??? ??? ??? ?<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
?? ??? ??? ??? ??? ??? ??? ?#memcached備份管理器的類名
? ? ? ? ? ? ? ? ? ? ? ? ?? ??? ??? ?memcachedNodes="n1:192.168.80.131:11211,n2:192.168.80.134:11211"
?? ??? ??? ??? ??? ??? ??? ??? ?#n1為主機標識,可以更改;
? ? ? ? ? ? ? ? ? ? ? ? ?? ??? ??? ?failoverNodes="n1"
?? ??? ??? ??? ??? ??? ??? ??? ?#指定備用主機節點
? ? ? ? ? ? ? ? ? ? ? ? ?? ??? ??? ?requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
?? ??? ??? ??? ??? ??? ??? ??? ?#指定忽略的數據類型
? ? ? ? ? ? ? ? ? ? ? ?? ?transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
?? ??? ??? ??? ??? ??? ??? ??? ?#指定序列化工具
? ? ? ? ? ? ? ? ?? ??? ??? ??? ?/>
? ? ? ? ?? ??? ??? ??? ?</Context>
? ? ??? ??? ??? ??? ? </Host>
?? ??? ??? ?Note:配置中提到的是兩臺memcached主機(n1:192.168.80.131:11211,n2:192.168.80.134:11211),此處只列出一端的配置,另一端幾乎相同(不同之處已使用”|”標記),就不在贅述!
?? ??? ?5.啟動tomcat服務:
?? ??? ??? ?service tomcat start
?? ??? ?6.訪問測試:
?? ??? ??? ?http://192.168.80.139/apps
?? ??? ?Note:此配置是銜接上面一篇博客的,有些配置沒有給出,具體請看上一篇文章;
?? ?實現session server:
?? ??? ?常用架構示例:
?? ??? ??? ?1.拓撲結構:
?
?? ??? ??? ?2.流程:客戶端訪問某一網站的某一動態內容時,首先會經過負載均衡器的調度,將其調度至某一臺后端的Tomcat服務器(TomcatA)上,然后Tomcat會將客戶端的會話信息進行序列換,然后保存至后端的額memcached服務器中;如果此客戶端在下一次訪問此網站時,如果調度器將其調度至其他Tomcat服務器(TomcatB)上,Tomcat就會到memcached服務器中查找session信息,這樣就實現了session共享;聰明的你已經發現,這個memcached服務器是一個單點,如果其發生故障,那么所有session信息都會丟失,所以我們需要搭建一個備份memcached服務器,以備不時之需!memcached備份服務器可以在主memcached故障時,頂替其繼續工作,并且當Tomcat往主memcached服務器中寫數據時,還會降數據再往備份memcached服務器中寫一份,從而可以實現無縫銜接!
?? ??? ??? ?3.配置過程:
?? ??? ??? ??? ?大寫的略!!!
?? ??? ??? ??? ?因為配置跟上面的差不多!!!
? ? ? ? ? ? ??
? ? ? ? ? ? 注:根據馬哥視頻做的學習筆記,如有錯誤,歡迎指正;侵刪;
轉載于:https://www.cnblogs.com/guowei-Linux/p/11072857.html
總結
以上是生活随笔為你收集整理的Linux memcached的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数式编程让你忘记设计模式
- 下一篇: 《程序员修炼之道:从小工到专家》阅读笔记