最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Memcached 入門介紹(安裝與配置)

 更新時間:2014年08月17日 15:12:31   投稿:mdxy-dxy  
Memcached是一個高性能的分布式內(nèi)存對象緩存系統(tǒng),用于動態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫負(fù)載。它通過在內(nèi)存中緩存數(shù)據(jù)和對象來減少讀取數(shù)據(jù)庫的次數(shù),從而提供動態(tài)、數(shù)據(jù)庫驅(qū)動網(wǎng)站的速度

Memcached是一個高性能的分布式內(nèi)存對象緩存系統(tǒng),用于動態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫負(fù)載。
它通過在內(nèi)存中緩存數(shù)據(jù)和對象來減少讀取數(shù)據(jù)庫的次數(shù),從而提供動態(tài)、數(shù)據(jù)庫驅(qū)動網(wǎng)站的速度。
Memcached基于一個存儲鍵值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,并通過memcached協(xié)議與守護進程通信。

下面來了解下Memcached怎么用~~

一、準(zhǔn)備工作
http://www.fzitv.net/softs/205838.html

下載memcached的windows版

再下載一個java_memcached-release.jar

二、安裝
解壓memcached-1.2.5-win32-bin.zip,CMD進入其目錄,然后執(zhí)行如下命令:

c:>memcached.exe -d install
c:>memcached.exe -l 127.0.0.1 -m 32 -d start第一行是安裝memcached成為服務(wù),這樣才能正常運行,否則運行失??!

第二行是啟動memcached的,這里簡單的只分配32M內(nèi)存了(默認(rèn)64M),然后監(jiān)聽本機端口和以守護進行運行。

執(zhí)行完畢后,我們就可以在任務(wù)管理器中看到memcached.exe這個進程了。

如果想要在同一臺Windows機器中安裝2個Memcached,請看這里

三、使用
現(xiàn)在服務(wù)器已經(jīng)正常運行了,下面我們就來寫java的客戶端連接程序。

將java_memcached-release.zip解壓,把java_memcached-release.jar文件復(fù)制到j(luò)ava項目的lib目錄下,

然后我們來編寫代碼,比如我提供的一個應(yīng)用類如下:

package memcached.test;
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
/**
 * 使用memcached的緩存實用類.
 */
public class MemCached {
  // 創(chuàng)建全局的唯一實例
  protected static MemCachedClient mcc = new MemCachedClient();
  protected static MemCached memCached = new MemCached();
  // 設(shè)置與緩存服務(wù)器的連接池
  static {
    // 服務(wù)器列表和其權(quán)重
    String[] servers = { "127.0.0.1:11211" };
    Integer[] weights = { 3 };
    // 獲取socke連接池的實例對象
    // 這個類用來創(chuàng)建管理客戶端和服務(wù)器通訊連接池,
    // 客戶端主要的工作(包括數(shù)據(jù)通訊、服務(wù)器定位、hash碼生成等)都是由這個類完成的。
    SockIOPool pool = SockIOPool.getInstance();
    // 設(shè)置服務(wù)器信息
    pool.setServers(servers);
    
    // 設(shè)置Server權(quán)重
    pool.setWeights(weights);
    // 設(shè)置初始連接數(shù)、最小和最大連接數(shù)以及最大處理時間
    pool.setInitConn(5);
    pool.setMinConn(5);
    pool.setMaxConn(250);
    pool.setMaxIdle(1000 * 60 * 60 * 6);
    // 設(shè)置主線程的睡眠時間
    pool.setMaintSleep(30);
    // 設(shè)置連接心跳監(jiān)測開關(guān)
    // true:每次通信都要進行連接是否有效的監(jiān)測,造成通信次數(shù)倍增,加大網(wǎng)絡(luò)負(fù)載,
    // 因此在對HighAvailability要求比較高的場合應(yīng)該設(shè)為true
    // 默認(rèn)狀態(tài)是false,建議保持默認(rèn)。
    pool.setAliveCheck(false);
    // 設(shè)置連接失敗恢復(fù)開關(guān)
    // 設(shè)置為true,當(dāng)宕機的服務(wù)器啟動或中斷的網(wǎng)絡(luò)連接后,這個socket連接還可繼續(xù)使用,否則將不再使用.
    // 默認(rèn)狀態(tài)是true,建議保持默認(rèn)。
    pool.setFailback(true);
    // 設(shè)置容錯開關(guān)
    // true:當(dāng)當(dāng)前socket不可用時,程序會自動查找可用連接并返回,否則返回NULL
    // 默認(rèn)狀態(tài)是true,建議保持默認(rèn)。
    pool.setFailover(true);
    // 設(shè)置hash算法
    // alg=0 使用String.hashCode()獲得hash code,該方法依賴JDK,可能和其他客戶端不兼容,建議不使用
    // alg=1 使用original 兼容hash算法,兼容其他客戶端
    // alg=2 使用CRC32兼容hash算法,兼容其他客戶端,性能優(yōu)于original算法
    // alg=3 使用MD5 hash算法
    // 采用前三種hash算法的時候,查找cache服務(wù)器使用余數(shù)方法。采用最后一種hash算法查找cache服務(wù)時使用consistent方法。
    // 默認(rèn)值為0
    pool.setHashingAlg(0);
    // 設(shè)置是否使用Nagle算法,因為我們的通訊數(shù)據(jù)量通常都比較大(相對TCP控制數(shù)據(jù))而且要求響應(yīng)及時,
    // 因此該值需要設(shè)置為false(默認(rèn)是true)
    pool.setNagle(false);
    
    // 設(shè)置socket的讀取等待超時值
    pool.setSocketTO(3000);
    
    // 設(shè)置socket的連接等待超時值
    pool.setSocketConnectTO(0);
    // 初始化連接池
    pool.initialize();
    // 壓縮設(shè)置,超過指定大小(單位為K)的數(shù)據(jù)都會被壓縮
    // mcc.setCompressEnable(true);  //UnsupportedOperation
    // mcc.setCompressThreshold(64 * 1024);
  }
  private MemCached() {
  }
  /**
   * 獲取唯一實例.
   * singleton
   * @return
   */
  public static MemCached getInstance() {
    return memCached;
  }
  /**
   * 添加一個指定的鍵值對到緩存中.
   * 
   * @param key
   * @param value
   * @return
   */
  public boolean add(String key, Object value) {
    return mcc.add(key, value);
  }
  /**
   * 添加一個指定的鍵值對到緩存中.
   * 
   * @param key
   * @param value
   * @param expiry 多久之后過期
   * @return
   */
  public boolean add(String key, Object value, Date expiry) {
    return mcc.add(key, value, expiry);
  }
  
  
  public boolean set(String key, Object value) {
    return mcc.set(key, value);
  }
  public boolean set(String key, Object value, Date expiry) {
    return mcc.set(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);
  }
  
  
  /**
   * 根據(jù)指定的關(guān)鍵字獲取對象.
   * 
   * @param key
   * @return
   */
  public Object get(String key) {
    return mcc.get(key);
  }
}
MemCached

寫個Main方法測試下:

public static void main(String[] args) {
    MemCached cache = MemCached.getInstance();
    boolean result1 = cache.add("hello", 1234, new Date(1000 * 2));// 設(shè)置2秒后過期
    System.out.println("第一次add : " + result1);
    System.out.println("Value : " + cache.get("hello"));
    
    boolean result2 =cache.add("hello", 12345, new Date(1000 * 2));// add fail
    System.out.println("第二次add : " + result2);
    
    boolean result3 =cache.set("hello", 12345, new Date(1000 * 2));// set successes
    System.out.println("調(diào)用set : " + result3);
    
    System.out.println("Value : " + cache.get("hello"));

    try {
      Thread.sleep(1000 * 2);
      System.out.println("已經(jīng)sleep2秒了....");
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    System.out.println("Value : " + cache.get("hello"));
  }

執(zhí)行結(jié)果如下:

第一次add : true
Value : 1234
第二次add : false
調(diào)用set : true
Value : 12345
已經(jīng)sleep2秒了....
Value : null

說明:

1.第二次add失敗是因為"hello"這個key已經(jīng)存在了。
2.調(diào)用set成功,是因為set的時候覆蓋了已存在的鍵值對,這正是add和set的不同之處
3.設(shè)置過期之間之后,cache按時自動失效

上面的例子是對于基本數(shù)據(jù)類型,對于普通的POJO而言,如果要進行存儲的話,那么比如讓其實現(xiàn)java.io.Serializable接口。

因為memcached是一個分布式的緩存服務(wù)器,多臺服務(wù)器間進行數(shù)據(jù)共享需要將對象序列化的,所以必須實現(xiàn)該接口,否則會報錯的(java.io.NotSerializableException)。

下面來試試POJO的存儲:

package memcached.test;
public class Person implements java.io.Serializable {
  private static final long serialVersionUID = 1L;

  private String name;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

簡單的POJO對象

Main方法如下:

public static void main(String[] args) {
    MemCached cache = MemCached.getInstance();

    Person p1 = new Person();
    p1.setName("Jack");
    cache.add("bean", p1);
    
    Person p2 = (Person) cache.get("bean");
    System.out.println("name=" + p2.getName());//Jack
    p2.setName("Rose");
    
    // cache.replace("bean", p2);
    Person p3 = (Person) cache.get("bean");
    System.out.println("name=" + p3.getName());
  }

上面的代碼中,我們通過p2.setName("Rose")修改了對象的名字,

最后一行打印的會是什么呢?

name=Jack
name=JackWhy?

這是因為我們修改的對象并不是緩存中的對象,而是通過序列化過來的一個實例對象
那么要修改怎么辦?使用replace,注釋掉的那一行把注釋去掉就可以了。

四、其他
Memcached的命令參數(shù)說明
-p <num>                監(jiān)聽的端口
-l <ip_addr>            連接的IP地址, 默認(rèn)是本機
-d start                   啟動memcached服務(wù)
-d restart                重起memcached服務(wù)
-d stop|shutdown    關(guān)閉正在運行的memcached服務(wù)
-d install                  安裝memcached服務(wù)
-d uninstall              卸載memcached服務(wù)
-u <username>       以<username>的身份運行 (僅在以root運行的時候有效)
-m <num>              最大內(nèi)存使用,單位MB。默認(rèn)64MB
-M                          內(nèi)存耗盡時返回錯誤,而不是刪除項
-c <num>                最大同時連接數(shù),默認(rèn)是1024
-f <factor>              塊大小增長因子,默認(rèn)是1.25
-n <bytes>             最小分配空間,key+value+flags默認(rèn)是48
-h                          顯示幫助

 Memcached也可以在控制臺中添加鍵值對,首先使用命令“telnet 127.0.0.1 11211”進入到Memcached控制臺,

然后使用set、add、replace、get、delete來操作。

更詳細(xì)操作可參照這里

五、Memcached的優(yōu)勢和不足

說到Memcached的優(yōu)勢,那當(dāng)然是:速度快,操作簡便,易擴展

不足的話,主要有2點:

1.數(shù)據(jù)的臨時性(數(shù)據(jù)僅保存在內(nèi)存中)
2.只能通過指定鍵來讀取數(shù)據(jù),不支持模糊查詢

六、Memcached停止時的保障措施
如果數(shù)據(jù)庫的訪問量比較大,就需要提前做好準(zhǔn)備,以便應(yīng)對在memcached停止時發(fā)生的負(fù)載問題。

如果能在停止memcached之前,把數(shù)據(jù)復(fù)制到其他的server就好了。恩,這個可以通過repcached來實現(xiàn)。

repcached是日本人開發(fā)的實現(xiàn)memcached復(fù)制功能,
它是一個單master、單slave的方案,但它的master/slave都是可讀寫的,而且可以相互同步
如果master壞掉,slave偵測到連接斷了,它會自動listen而成為master

相關(guān)文章

  • 跨域(CORS)問題的解決方案分享

    跨域(CORS)問題的解決方案分享

    跨域是指跨域名的訪問,如果域名和端口都相同,但是請求路徑不同,不屬于跨域??缬虿灰欢〞锌缬騿栴}。因為跨域問題是瀏覽器對于ajax請求的一種安全限制:一個頁面發(fā)起的ajax請求,只能是于當(dāng)前頁同域名的路徑,這能有效的阻止跨站攻擊。
    2023-02-02
  • CyberPanel配置教程,新手安裝?CyberPanel?終極指南

    CyberPanel配置教程,新手安裝?CyberPanel?終極指南

    CyberPanel?是第一個LiteSpeed為web服務(wù)器的Linux面板,使用LiteSpeed?Cache簡單優(yōu)化之后?Gtmetrix?和?Google?PageSpeed?Insights?的評分幾乎都是A,這個結(jié)果讓人十分滿意
    2023-12-12
  • 使用Idea調(diào)試RocketMQ源碼教程

    使用Idea調(diào)試RocketMQ源碼教程

    這篇文章主要為大家介紹了使用Idea調(diào)試RocketMQ源碼教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • N點主機管理系統(tǒng)的重裝步驟(圖文)

    N點主機管理系統(tǒng)的重裝步驟(圖文)

    這篇文章主要介紹了N點主機管理系統(tǒng)的重裝步驟(圖文),需要的朋友可以參考下
    2015-10-10
  • Deployment副本無狀態(tài)服務(wù)創(chuàng)建及水平擴展

    Deployment副本無狀態(tài)服務(wù)創(chuàng)建及水平擴展

    這篇文章主要為大家介紹了Deployment副本無狀態(tài)服務(wù)及水平擴展,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • ubuntu服務(wù)器部署過程

    ubuntu服務(wù)器部署過程

    本文詳細(xì)介紹了Ubuntu服務(wù)器的部署過程,包括關(guān)閉歡迎消息、修改hostname、配置SSH、防火墻設(shè)置、安裝和配置Web服務(wù)(如Nginx和Apache)、安裝和配置MySQL、以及PHP的安裝和配置,通過這些步驟,讀者可以成功部署一個基本的Ubuntu服務(wù)器環(huán)境,感興趣的朋友一起看看吧
    2025-02-02
  • Fluentd搭建日志收集服務(wù)

    Fluentd搭建日志收集服務(wù)

    這篇文章主要為大家介紹了Fluentd搭建日志收集服務(wù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 什么是WebsitePanel(基于windows虛擬主機管理系統(tǒng))

    什么是WebsitePanel(基于windows虛擬主機管理系統(tǒng))

    一套比較容易上手的Windows系統(tǒng)中的虛擬主機管理系統(tǒng)。他可以同時管理多臺服務(wù)器,并且擁有一個簡潔的、穩(wěn)定的統(tǒng)一管理界面
    2013-12-12
  • HDFS免重啟掛載新磁盤

    HDFS免重啟掛載新磁盤

    這篇文章主要介紹了HDFS免重啟掛載新磁盤,需要的朋友可以參考下
    2022-04-04
  • 輕量級域名解析服務(wù)器之dnsmasq的介紹與部署

    輕量級域名解析服務(wù)器之dnsmasq的介紹與部署

    dnsmasq這個輕量級的dns服務(wù)器,具有開源,搭建簡單,維護成本低的優(yōu)點,符合生產(chǎn)環(huán)境需求,下面這篇文章主要給大家介紹了關(guān)于輕量級域名解析服務(wù)器之dnsmasq的介紹與部署的相關(guān)資料,需要的朋友可以參考下
    2022-07-07

最新評論

武安市| 宜黄县| 宣城市| 松溪县| 梧州市| 武宣县| 汶上县| 舞钢市| 赣榆县| 兴海县| 乐业县| 寿光市| 同仁县| 龙陵县| 集贤县| 习水县| 丹阳市| 沁源县| 鞍山市| 托克托县| 海林市| 铜陵市| 绥芬河市| 正蓝旗| 两当县| 阿拉善右旗| 临泉县| 清水县| 吴堡县| 永仁县| 拜城县| 沧源| 乌海市| 宁陵县| 开鲁县| 平山县| 阿鲁科尔沁旗| 深圳市| 璧山县| 翁牛特旗| 旌德县|