1. 程式人生 > >memcache介紹、安裝及應用

memcache介紹、安裝及應用

1、memcache介紹

百科介紹很詳細,這裡不再囉嗦。

搬過來一些比較重要的資訊:
MemCache的工作流程如下:先檢查客戶端的請求資料是否在memcached中,如有,直接把請求資料返回,不再對資料庫進行任何操作;如果請求的資料不在memcached中,就去查資料庫,把從資料庫中獲取的資料返回給客戶端,同時把資料快取一份到memcached中(memcached客戶端不負責,需要程式明確實現);每次更新資料庫的同時更新memcached中的資料,保證一致性;當分配給memcached記憶體空間用完之後,會使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效資料首先被替換,然後再替換掉最近未使用的資料。
Memcache是一個高效能的分散式的記憶體物件快取系統,通過在記憶體裡維護一個統一的巨大的hash表,它能夠用來儲存各種格式的資料,包括影象、視訊、檔案以及資料庫檢索的結果等。簡單的說就是將資料呼叫到記憶體中,然後從記憶體中讀取,從而大大提高讀取速度。
Memcache是danga的一個專案,最早是LiveJournal 服務的,最初為了加速 LiveJournal 訪問速度而開發的,後來被很多大型的網站採用。
Memcached是以守護程式(監聽)方式運行於一個或多個伺服器中,隨時會接收客戶端的連線和操作。

2、磁碟cache和memcache的區別

磁碟cache的開銷
磁碟IO延遲和資源開銷,如果涉及到File,還要算上檔案系統開銷。

memcache開銷
建立一個到Memcached的TCP連線,可以使用到Memcached的持久連線,或者採用連結池。

3、安裝及應用

1、安裝

在此目錄下進行安裝,將對應壓縮包考至此目錄:

[email protected]:/usr/local/wangpei/cloud/memcache$ ls
libevent-2.0.21-stable.tar.gz memcached-1.4.15.tar.gz

或者直接從官網下載,自己查詢合適版本:

安裝依賴lib

解壓:

memcache$ sudo tar -zxvf libevent-2.0.21-stable.tar.gz

將 libevent 安裝在 /usr/local 下,

[email protected]:/usr/local/wangpei/cloud/memcache/libevent-2.0.21-stable$ sudo ./configure –prefix=/usr/local/libevent

編譯、執行:

libevent-2.0.21-stable$ sudo make

$ sudo make install

安裝memcache:

memcache$ sudo tar -zxvf memcached-1.4.15.tar.gz

依賴libevent安裝memcached到指定目錄下:

/memcached-1.4.15$ ./configure –with-libevent=/usr/local/libevent

$sudo make

$susdo make install

memcache安裝在 /usr/local/bin下,可以進行檢視:

[email protected]:/usr/local/bin$ ls
docker memcached

[email protected]:/usr/local/bin$ ls -al /usr/local/bin/mem*
-rwxr-xr-x 1 root root 447510 7月 3 16:32 /usr/local/bin/memcached

2、啟動memcache

/usr/local/bin$ memcached -m 64 -p 11211 -u nobody -vv

slab class 1: chunk size 96 perslab 10922

slab class 2: chunk size 120 perslab 8738

slab class 3: chunk size 152 perslab 6898

slab class 4: chunk size 192 perslab 5461

slab class 5: chunk size 240 perslab 4369

slab class 6: chunk size 304 perslab 3449

slab class 7: chunk size 384 perslab 2730

slab class 8: chunk size 480 perslab 2184

slab class 9: chunk size 600 perslab 1747

slab class 10: chunk size 752 perslab 1394

slab class 11: chunk size 944 perslab 1110

slab class 12: chunk size 1184 perslab 885

slab class 13: chunk size 1480 perslab 708

slab class 14: chunk size 1856 perslab 564

slab class 15: chunk size 2320 perslab 451

slab class 16: chunk size 2904 perslab 361

slab class 17: chunk size 3632 perslab 288

slab class 18: chunk size 4544 perslab 230

slab class 19: chunk size 5680 perslab 184

slab class 20: chunk size 7104 perslab 147

slab class 21: chunk size 8880 perslab 118

slab class 22: chunk size 11104 perslab 94

slab class 23: chunk size 13880 perslab 75

slab class 24: chunk size 17352 perslab 60

slab class 25: chunk size 21696 perslab 48

slab class 26: chunk size 27120 perslab 38

slab class 27: chunk size 33904 perslab 30

slab class 28: chunk size 42384 perslab 24

slab class 29: chunk size 52984 perslab 19

slab class 30: chunk size 66232 perslab 15

slab class 31: chunk size 82792 perslab 12

slab class 32: chunk size 103496 perslab 10

slab class 33: chunk size 129376 perslab 8

slab class 34: chunk size 161720 perslab 6

slab class 35: chunk size 202152 perslab 5

slab class 36: chunk size 252696 perslab 4

slab class 37: chunk size 315872 perslab 3

slab class 38: chunk size 394840 perslab 2

slab class 39: chunk size 493552 perslab 2

slab class 40: chunk size 616944 perslab 1

slab class 41: chunk size 771184 perslab 1

slab class 42: chunk size 1048576 perslab 1

<26 server listening (auto-negotiate)

<27 server listening (auto-negotiate)

<28 send buffer was 212992, now 268435456

<29 send buffer was 212992, now 268435456

<28 server listening (udp)

<28 server listening (udp)

<28 server listening (udp)

<28 server listening (udp)

<29 server listening (udp)

<29 server listening (udp)

<29 server listening (udp)

<29 server listening (udp)

想讓 memcached 作為 daemon 在後臺執行,只需要加-d 選項
$memcached -m 64 -p 11211 -u nobody -d

檢視服務啟動情況:

[email protected]:/usr/local/bin$ ps -ef | grep memcache
root 4139 1 2 5月26 ? 1-00:18:56 java -Xms300M -Xmx300M -XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+HeapDumpOnOutOfMemoryError -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:logs/gc20170526112346.log -cp .:config/:lib/commons-lang-2.5.jar:lib/commons-logging-1.1.1.jar:lib/fqueue-0.1.1-release.jar:lib/log4j-1.2.16.jar:lib/netty-3.2.4.Final.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-nop-1.6.1.jar com.google.code.fqueue.memcached.StartServer

ubuntu 22888 1 0 16:39 ? 00:00:00 memcached -m 64 -p 11211 -u nobody -d
ubuntu 22897 21437 0 16:40 pts/3 00:00:00 grep –color=auto memcache
[email protected]:/usr/local/bin$

引數說明:

$memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid

-d選項是啟動一個守護程序,

-m是分配給Memcache使用的記憶體數量,單位是MB,我這裡是10MB,

-u是執行Memcache的使用者,我這裡是root,

-l是監聽的伺服器IP地址,如果有多個地址的話,我這裡指定了伺服器的IP地址192.168.0.200,

-p是設定Memcache監聽的埠,我這裡設定了12000,最好是1024以上的埠,

-c選項是最大執行的併發連線數,預設是1024,我這裡設定了256,按照你伺服器的負載量來設定,

-P是設定儲存Memcache的pid檔案,如儲存在 /tmp/memcached.pid,

2)如果要結束Memcache程序,執行:

kill `cat /tmp/memcached.pid`

3、memcache和redis的使用區別:

1、儲存方式:
memecache 把資料全部存在記憶體之中,斷電後會掛掉,資料不能超過記憶體大小
redis有部份存在硬碟上,這樣能保證資料的永續性,支援資料的持久化(筆者注:有快照和AOF日誌兩種持久化方式,在實際應用的時候,要特別注意配置檔案快照引數,要不就很有可能伺服器頻繁滿載做dump)。
2、資料支援型別:
redis在資料支援上要比memecache多的多。
3、使用底層模型不同:
新版本的redis直接自己構建了VM 機制 ,因為一般的系統呼叫系統函式的話,會浪費一定的時間去移動和請求。
4、執行環境不同:
redis目前官方只支援Linux 上去行,從而省去了對於其它系統的支援,這樣的話可以更好的把精力用於本系統 環境上的優化,雖然後來微軟有一個小組為其寫了補丁。但是沒有放到主幹上。

強調下,如果斷電,memcache資料會丟失,redis有儲存機制;redis是單核執行,memcache是多核執行支援分散式,redis叢集的讀寫節點。

4、memcache程式碼測試

package memcached;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;

import java.util.Date;

/**
 * Created with goDemo
 * Created by wangpei on 17/7/3.
 */
public class MemCachedManager {

    // 建立全域性的唯一例項
    protected static MemCachedClient mcc = new MemCachedClient();

    protected static MemCachedManager memCachedManager = new MemCachedManager();

    // 設定與快取伺服器的連線池
    static {
        // 伺服器列表和其權重
        String[] servers = { "10.10.75.15:11211" };
        Integer[] weights = { 3 };

        // 獲取socke連線池的例項物件
        SockIOPool pool = SockIOPool.getInstance();

        // 設定伺服器資訊
        pool.setServers(servers);
        pool.setWeights(weights);

        // 設定初始連線數、最小和最大連線數以及最大處理時間
        pool.setInitConn(5);
        pool.setMinConn(5);
        pool.setMaxConn(250);
        pool.setMaxIdle(1000 * 60 * 60 * 6);

        // 設定主執行緒的睡眠時間
        pool.setMaintSleep(30);

        // 設定TCP的引數,連線超時等
        pool.setNagle(false);
        pool.setSocketTO(3000);
        pool.setSocketConnectTO(0);

        // 初始化連線池
        pool.initialize();

        // 壓縮設定,超過指定大小(單位為K)的資料都會被壓縮
//        mcc.setCompressEnable(true);
//        mcc.setCompressThreshold(64 * 1024);
    }

    /**
     * 保護型構造方法,不允許例項化!
     *
     */
    protected MemCachedManager() {

    }

    /**
     * 獲取唯一例項.
     *
     * @return
     */
    public static MemCachedManager getInstance() {
        return memCachedManager;
    }

    /**
     * 新增一個指定的值到快取中.
     *
     * @param key
     * @param value
     * @return
     */
    public boolean add(String key, Object value) {
        return mcc.add(key, value);
    }

    public boolean add(String key, Object value, Date expiry) {
        return mcc.add(key, value, expiry);
    }

    public boolean replace(String key, Object value) {
        return mcc.replace(key, value);
    }

    public boolean replace(String key, Object value, Date expiry) {
        return mcc.replace(key, value, expiry);
    }

    /**
     * 根據指定的關鍵字獲取物件.
     *
     * @param key
     * @return
     */
    public Object get(String key) {
        return mcc.get(key);
    }

    public static void main(String[] args) {
        MemCachedManager cache = MemCachedManager.getInstance();
        cache.add("hello", 234);
        System.out.print("get value : " + cache.get("hello"));
    }
}

相關推薦

memcache介紹安裝應用

1、memcache介紹 百科介紹很詳細,這裡不再囉嗦。 搬過來一些比較重要的資訊: MemCache的工作流程如下:先檢查客戶端的請求資料是否在memcached中,如有,直接把請求資料返回,不再對資料庫進行任何操作;如果請求的資料不在memcached

Randoop介紹安裝環境變量配置

you 套件 文件路徑 令行 sts dt.jar 開發 通知 一個 大體來說,開發人員開發源程序,測試人員找bug,中間人產品經理。 黑盒測試:(不看代碼) 白盒測試:     1、基於覆蓋:語句、分支(if、for、真假)、方法     結構:順序、分支(T or F,

分散式服務框架Zookeeper介紹原理應用

轉載:https://www.jianshu.com/p/bf32e44d3113 分散式服務框架Zookeeper介紹、原理及應用 Zookeeper簡介 Zookeeper 分散式服務框架是 Apache Hadoop 的一個子專案,它主要是用來解決分散式應用中經常遇到的一些資料管理

Jupyter Notebook介紹安裝使用教程

目錄 一、什麼是Jupyter Notebook? 1. 簡介 Jupyter Notebook是基於網頁的用於互動計算的應用程式。其可被應用於全過程計算:開發、文件編寫、執行程式碼和展示結果。——Jupyter Notebook官方介紹 簡而言之,Jupyter

MongoDB介紹安裝mongocxx C++驅動程式的安裝

MongoDB介紹 MongoDB 是一個基於分散式檔案儲存的資料庫。由C++語言編寫。旨在為WEB應用提供可擴充套件的高效能資料儲存解決方案。 MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的

secrets 管理工具 Vault 的介紹安裝使用

>原文: ![](https://img2020.cnblogs.com/blog/968138/202101/968138-20210125220714459-133908869.jpg) [Vault](https://github.com/hashicorp/vault) 是 hashicorp 推

redis學習筆記01 — 基本介紹安裝配置常用命令

redis——NoSQL的一種 為了解決高併發、高可用、高擴充套件、大資料儲存等一系列問題而產生的資料庫解決方案,就是NoSQL NoSQL,非關係型資料庫,全名:Not Only Sql,它不能代替關係型資料庫,只能作為關係型資料庫的一個良好補充。 redis 簡介 是使用

深度學習中Attention Mechanism詳細介紹:原理分類應用

Attention是一種用於提升基於RNN(LSTM或GRU)的Encoder + Decoder模型的效果的的機制(Mechanism),一般稱為Attention Mechanism。Attention Mechanism目前非常流行,廣泛應用於機器翻譯、語音識別、影象標

hadoop+zookeeper+hbase安裝配置應用例項

出於種種原因,想要搭建一個小叢集,來搞搞資料處理。 實踐環境: ubuntu10.04+jdk1.6.20+hadoop-0.20.2+zookeeper3.3.4+hbase0.90.6 本來是準備好了三臺機器,結果後面一臺掛了,所以只有兩臺了=。= 機器名  

FFmpeg下載安裝內容介紹

FFmpeg是什麼呢?A complete, cross-platform solution to record, convert and stream audio and video.一個完全的,跨平臺的記錄,轉換音視訊流的解決方案。官網地址:http://ffmpeg.o

Java語言出現的背景影響應用前景分析

分析 工具 需要 研究 面向對象 use 公司 們的 開發規範 一、背景 1991年 ,SUN MicroSystem公司的 Jame Gosling、 Bill Joe等人 ,為在電視、控制烤面包箱等家用消費類電子產品上進行交互式操作而開發了一個名為Oak的軟件 (即

libevent源碼分析-介紹安裝使用

ont write net clas pretty string his har oot Libevent介紹 安裝 樣例 Libevent介紹 在include\event2\event.h中有關於Libevent的介紹,這裏簡單翻譯

運維學習之磁盤的分區劃分管理應用

linux磁盤管理1. bootloader(512) 啟動引導 / | \ / | \ mbr(446) mpt(6

前端開發工具Brackets介紹安裝安裝Emme插件時踩過的坑

module 文件 不想 現在 div 當前 user 沒有 -s   對於前端開發的園友來說有可能IDE工具有很多,層次不窮,還有每個人的喜好及習慣也不一樣,因為我是一名後端開發的.Net程序員,但是大家都知道,現在都提倡什麽全棧工程師,所以也得會點前端開發,所以我對於

VUE -- JSONP的誕生原理應用實例

some body 發送 我們 att box 想要 random ati 問題: 頁面中有一個按鈕,點擊之後會更新網頁中的一個盒子的內容。 Ajax可以很容易的滿足這種無須刷新整個頁面就可以實現數據變換的需求。 但是,Ajax有一個缺點,就是他不允許跨域請求資源。

Tomcat介紹 安裝jdk 安裝Tomcat

temp star path rap tar.gz 查看 ora 1.7 穩定性 Tomcat介紹以及流行的java容器 Tomcat是Apache軟件基金會(Apache Soft

Tomcat介紹安裝JDK安裝Tomcat

jdk software java程序 pre runtime soft web nor 二進制包 Tomcat介紹 Tomcat是Apache軟件基金會(Apache Software Foundation)的Jakarta項目中的一個核心項目,由Apache、Sun和

pythoon介紹安裝環境基礎知識練習題

基礎 行程 分享 生產 image 雲計算 bool 字符串 習題 pyrhoon介紹:創始人為吉多·範羅蘇姆(Guido van Rossum)(龜叔) Python崇尚優美、清晰、簡單,是一個優秀並廣泛使用的語言

linux監控平臺介紹zabbix監控介紹安裝zabbix

web .so dmi zabbix日誌 展現 com 狀態 中文顯示 代理 linux監控平臺介紹 常見開源監控軟件 cacti、nagios、zabbix、smokeping、open-falcon 等等。 nagios和zabbix流行度很高。 cacti

Windows 7下java SDK下載安裝環境變量設置

x64 tool 32位 index ext 步驟 cli lis runt 第一步:下載Java JDK 1 登錄官網站下載正版JDK 2 點擊"SDK Download"進入Java JDK下載頁面 註明: Java JDK和Jav