memcached服務

来源:https://www.cnblogs.com/caicairui/archive/2018/03/23/8632029.html
-Advertisement-
Play Games

介紹 它是一套數據緩存系統或軟體 用於動態應用系統中緩存資料庫的數據,減少資料庫的訪問壓力,達到提升性能的效果,實際應用環境中多用於資料庫的cache的應用。它是通過預分配指定的記憶體空間來存儲數據 定義 它是一個開源的、高性能的,具有分散式記憶體對象的緩存系統,它一般用來存儲經常讀取的對象或數據,如同 ...


介紹

它是一套數據緩存系統或軟體

用於動態應用系統中緩存資料庫的數據,減少資料庫的訪問壓力,達到提升性能的效果,實際應用環境中多用於資料庫的cache的應用。它是通過預分配指定的記憶體空間來存儲數據

定義

它是一個開源的、高性能的,具有分散式記憶體對象的緩存系統,它一般用來存儲經常讀取的對象或數據,如同web伺服器會將一些內容緩存到客戶端本地一樣

mysql已經有cache了,為啥還要在它前面加一層memcached?

memcached是一個key/value系統,系統相對於MySQL簡單很多,雖然MySQL也有cache,但是資料庫的SQL解析會耗費性能,查詢慢於memcached,另外MySQL的cache設計得更加複雜,因為要考慮事務,日誌,存儲引擎等模塊,它的性能也沒有memcached好

memcached只做一件事情,簡單高效,在cache上比MySQL強,這應該容易理解

memcached的應用場景

資料庫的前端緩存應用:讓它來分擔數據的併發壓力,當數據更新時,可以使程式通知緩存進行更新

session會話共用的共用存儲

memcached應用中的工作流程

它是一種記憶體緩存,可通過API的方式讀取記憶體中緩存的這些數據,當用戶需要讀取數據時,會首先訪問memcached記憶體緩存,如果緩存中有數據就直接返回給前端的應用程式,如果沒有,再轉發給後臺端的伺服器,這時伺服器除了返回數據給用戶,還會將數據更新給memcached緩存。

如果實際生產環境中,緩存伺服器需要重啟(或者斷電),那麼緩存中的數據將會丟失,那麼這時後端的伺服器
併發壓力會增大,可能會導致後端的伺服器也跟著宕機,無法提供服務,
那麼這時我們的處理流程是這樣的:
首先從負載均衡中將 WEB 應用停掉----->讓負載均衡不再轉發數據給 WEB---->接著啟動緩存伺服器-------->
通過程式把資料庫的內容初始化到緩存伺服器中------->然後將 web 應用啟用------->重啟資料庫伺服器

  

1、設置緩存(expires)和 deflate 壓縮,可以將一些內容直接緩存在用戶端的本地,下次訪問直接調用本地
2、 CDN 緩存靜態內容(html、圖片等),當用戶請求這些內容時直接調用 CDN 的內容,不再請求後端伺服器了
3、 Apache 和 Nginx 靜態伺服器提供靜態內容(通過非同步消息隊列生成靜態內容)
4、 PHP 和 JAVA 動態內容
5、資料庫的 memcached 緩存伺服器
6、資料庫伺服器(MYSQL)
7、資料庫的存儲伺服器

特性

協議簡單:協議使用比較簡單,使用基於文本行的協議

基於libevent的事件處理

memcached軟體的工作原理

它是一套C/S模式架構的軟體,在伺服器端啟動服務守護進程,可以為memcached伺服器指定監聽的IP地址、埠號、併發訪問連接數以及分配多少記憶體來處理客戶的請求參數

需要被緩存的數據以key/value鍵值對的形式在伺服器端預分配的記憶體區中,每個被緩存的數據都有唯一的標識key

安裝與配置

[root@cairui ~]# cat /etc/redhat-release 
CentOS release 6.8 (Final)
[root@cairui ~]# uname -r
2.6.32-696.6.3.el6.x86_64

libevent安裝

[root@cairui software]# tar xf libevent-2.1.8-stable.tar.gz 
[root@cairui software]# cd libevent-2.1.8-stable
[root@cairui libevent-2.1.8-stable]# ./configure 
[root@cairui libevent-2.1.8-stable]# make
[root@cairui libevent-2.1.8-stable]# make install

安裝memcached

[root@cairui libevent-2.1.8-stable]# yum install memcached
[root@cairui libevent-2.1.8-stable]# find / -name memcached
/etc/sysconfig/memcached
/etc/rc.d/init.d/memcached
/usr/bin/memcached
/var/run/memcached

配置ld.so.conf路徑防止啟動時報錯

[root@cairui lib]# echo "/usr/local/lib">>/etc/ld.so.conf
[root@cairui lib]# ldconfig 
[root@cairui lib]# which memcached
/usr/bin/memcached

memcached參數介紹

[root@cairui lib]# /usr/bin/memcached -h
memcached 1.4.4
-p <num>      TCP port number to listen on (default: 11211)  #指定監聽埠
-U <num>      UDP port number to listen on (default: 11211, 0 is off)
-s <file>     UNIX socket path to listen on (disables network support)
-a <mask>     access mask for UNIX socket, in octal (default: 0700)
-l <ip_addr>  interface to listen on (default: INADDR_ANY, all addresses)  #指定監聽地址
-d            run as a daemon  #後臺模式啟動
-r            maximize core file limit  #最大的文件字元集
-u <username> assume identity of <username> (only when run as root)  #指定用戶
-m <num>      max memory to use for items in megabytes (default: 64 MB)  #分配記憶體區大小
-M            return error on memory exhausted (rather than removing items)
-c <num>      max simultaneous connections (default: 1024)  #最大併發數
-k            lock down all paged memory.  Note that there is a
              limit on how much memory you may lock.  Trying to
              allocate more than that would fail, so be sure you
              set the limit correctly for the user you started
              the daemon with (not for -u <username> user;
              under sh this is done with 'ulimit -S -l NUM_KB').
-v            verbose (print errors/warnings while in event loop)
-vv           very verbose (also print client commands/reponses)  #以very verbose模式啟動
-vvv          extremely verbose (also print internal state transitions)
-h            print this help and exit
-i            print memcached and libevent license
-P <file>     save PID in <file>, only used with -d option  #設置保存memcached的PID
-f <factor>   chunk size growth factor (default: 1.25)
-n <bytes>    minimum space allocated for key+value+flags (default: 48)
-L            Try to use large memory pages (if available). Increasing
              the memory page size could reduce the number of TLB misses
              and improve the performance. In order to get large pages
              from the OS, memcached will allocate the total item-cache
              in one large chunk.
-D <char>     Use <char> as the delimiter between key prefixes and IDs.
              This is used for per-prefix stats reporting. The default is
              ":" (colon). If this option is specified, stats collection
              is turned on automatically; if not, then it may be turned on
              by sending the "stats detail on" command to the server.
-t <num>      number of threads to use (default: 4)
-R            Maximum number of requests per event, limits the number of
              requests process for a given connection to prevent 
              starvation (default: 20)
-C            Disable use of CAS
-b            Set the backlog queue limit (default: 1024)
-B            Binding protocol - one of ascii, binary, or auto (default)
-I            Override the size of each slab page. Adjusts max item size
              (default: 1mb, min: 1k, max: 128m)  

 配置memcached

[root@cairui lib]# memcached -p 11111 -u root -c 1024 -d
[root@cairui lib]# lsof -i:11111
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
memcached 17416 root   26u  IPv4  90768      0t0  TCP *:vce (LISTEN)
memcached 17416 root   27u  IPv4  90785      0t0  UDP *:vce 
[root@cairui lib]# netstat -lntup|grep mem
tcp        0      0 0.0.0.0:11111               0.0.0.0:*                   LISTEN      17416/memcached     
udp        0      0 0.0.0.0:11111               0.0.0.0:*                               17416/memcached     

 寫入數據

[root@cairui ~]# printf "set key001 0 0 10\r\ntest123456\r\n"|nc 127.0.0.1 11111  #寫入數據
STORED
[root@cairui ~]# printf "get key001\r\n"|nc 127.0.0.1 11111  #查詢數據
VALUE key001 0 10
test123456
END
[root@cairui ~]# printf "delete key001\r\n"|nc 127.0.0.1 11111  #刪除數據
DELETED
[root@cairui ~]# printf "get key001\r\n"|nc 127.0.0.1 11111
END
正確關閉 memcached 服務
一般啟動時最好指定下 PID
[root@LVS-2 ~]# memcached -p 11213 -u root -m 16m -c 1024 -d -P /var/run/11213.pid #指定進程文件
[root@LVS-2 ~]# kill `cat /var/run/11213.pid`
提示:實際生產環境中,要佈署 memcached 服務,做為數據緩存,記憶體的指定大小是根據業務來確定,是不是需要負載均衡?最好同開發一起討論確定好,還有它還有分客戶端與服務端
配置 session 會話共用存儲
vi /applicaton/php/lib/php.ini
session.save_path = "/tmp"改成 memcached 伺服器地址 tcp ://10.10.10.1:11211
session.save_handler = files(改成 memcached)
將所有的 WEB 伺服器(WEB 伺服器需要安裝客戶端)里的 PHP 配置文件改成上述配置,即可完成會話共用存儲

memcached監控軟體介紹

[root@LB01 vhost]# cd /web/www/
[root@LB01 www]# wget http://www.junopen.com/memadmin/memadmin-1.0.12.tar.gz
[root@LB01 www]# tar zxf memadmin-1.0.12.tar.gz
無需安裝,解壓即可

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 操作系統用於管理系統的硬體、軟體和數據資源,控製程序的運行,是應用軟體與硬體之間的介面,也是人機之間的介面。操作系統的職能包括進程管理、存儲管理、文件管理、設備管理、作業管理等。 在進程管理中,PV操作在處理進程的同步與互斥問題方面非常重要,當多個進程需要同時訪問共用資源時會用到。PV是用荷蘭語表示 ...
  • 某個角度上說,kindle很類似android,同樣的Linux內核,同樣的Java用戶層。不過kindle更註重簡單、節能、穩定。Amazon一向認為,功能過多會分散人們閱讀時候的註意力。 Kindle底層的Linux比Android保持了更多的linux相容性,可以使用GTK或者QT編寫程式。Q ...
  • exit(0):正常運行程式並退出程式; exit(1):非正常運行導致退出程式; exit 0 可以告知你的程式的使用者:你的程式是正常結束的。如果 exit 非 0 值,那麼你的程式的使用者通常會認為你的程式產生了一個錯誤。在 shell 中調用完你的程式之後,用 echo $? 命令就可以看到 ...
  • "原文鏈接" 之所以轉載這篇文章,是因為例子舉的太好了,非常適合初學者理解。但是樣式有點亂 自己稍微整理了下。 正向代理 比如你現在缺錢,想找馬雲爸爸去借錢,可想而知人家可能鳥都不鳥你,到最後碰一鼻子灰借不到錢。不過你認識你家隔壁老王,而老王認識馬雲同志,而且關係還很好。這時候你托老王去找馬雲借錢, ...
  • Linux由於其眾多獨特的優勢(可參見Linux系統的優勢),而被很多人所喜愛。而要使用Linux那首先要做的工作就是安裝Linux系統了。這裡給出在 win10 下利用虛擬機 Hyper-v 安裝 Linux 的過程供大家交流學習。 由於 Linux 版本眾多,在選擇時很多人就犯難了,不知道該怎樣 ...
  • 一、shell和shell腳本 在linux系統下,以 #/bin/bash開頭的文本會被shell解釋器進行解釋。 shell是指一種應用程式,這個應用程式提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。 shell腳本(shell script),是一種為shell編寫的腳本程式。業界所 ...
  • 熟悉電腦的人都知道,Linux 相比較於 Windows 有著眾多的優勢,所以現在越來越多的電腦用戶開始使用 Linux 進行辦公、學習。總體來講,Linux 的優勢主要有以下幾個方面。 一、開源、免費 眾所周知,不管是微軟的 Windows 還是蘋果的 macOS,都是需要付費的,而且是比較昂貴的 ...
  • 隨著深度學習、區塊鏈的發展,人類對計算量的需求越來越高,在傳統的計算模式下,壓榨GPU的計算能力一直是重點。 NV系列的顯卡在這方面走的比較快,CUDA框架已經普及到了高性能計算的各個方面,比如Google的TensorFlow深度學習框架,預設內置了支持CUDA的GPU計算。 AMD(ATI)及其 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...