分散式緩存memcached介紹,win7環境安裝,常用命令set,get,delete,stats, java訪問

来源:http://www.cnblogs.com/jinhuazhe2013/archive/2016/01/29/5169335.html
-Advertisement-
Play Games

一、memcached是什麼? 二、memcached不互相通信的分散式 三、安裝步驟 四、本文介紹的命令主要包括: 存入命令(Storage commands) 取回命令(Retrieval command) 刪除命令(Deletion) 統計(Statistics) 其他命令 五、java客戶端


一、memcached是什麼?

二、memcached不互相通信的分散式

三、安裝步驟

四、本文介紹的命令主要包括:

  1. 存入命令(Storage commands)
  2. 取回命令(Retrieval command)
  3. 刪除命令(Deletion)
  4. 統計(Statistics)
  5. 其他命令

 五、java客戶端訪問

 

一、     memcached是什麼?

memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 為首開發的一款軟體。現在已成為 mixi、 hatena、 Facebook、 Vox、LiveJournal等眾多服務中 提高Web應用擴展性的重要因素。

許多Web應用都將數據保存到RDBMS中,應用伺服器從中讀取數據併在瀏覽器中顯示。 但隨著數據量的增大、訪問的集中,就會出現RDBMS的負擔加重、資料庫響應惡化、 網站顯示延遲等重大影響。

這時就該memcached大顯身手了。memcached是高性能的分散式記憶體緩存伺服器。 一般的使用目的是,通過緩存資料庫查詢結果,減少資料庫訪問次數,以提高動態Web應用的速度、 提高可擴展性。

 

二、     memcached不互相通信的分散式

memcached儘管是“分散式”緩存伺服器,但伺服器端並沒有分散式功能。 各個memcached不會互相通信以共用信息。那麼,怎樣進行分散式呢? 這完全取決於客戶端的實現。

三、安裝步驟 (我這裡因為是win7系統,為了便於測試,安裝的是windows 64bit版本)

1、 從http://pan.baidu.com/s/1sk7lNgp 下載,解壓到指定目錄,如:C:\Users\Admin\Desktop\memcached-win64-1.4.4-14\memcached

 

2、 用cmd打開命令視窗,轉到解壓的目錄,輸入 “memcached.exe -d install”。

 

3、打開控制面板,打開服務,可以看到memcached已經在上面,如果沒有啟動,則手動啟動一下。

 

 

 

四、 本文介紹的命令主要包括:

1.存入命令(Storage commands)

<command name> <key> <flags> <exptime> <bytes> [noreply]\r\n

cas <key> <flags> <exptime> <bytes> <cas unique> [noreply]\r\n

 

<command name> 是"set", "add", "replace", "append" 或者"prepend"

key 長度最長不能超過250 characters

set 命令用於向緩存添加新的鍵值對。如果鍵已經存在,則之前的值將被替換。

add 僅當緩存中不存在鍵時,add 命令才會向緩存中添加一個鍵值對。如果緩存中已經存在鍵,則之前的值將仍然保持相同,並且您將獲得響應NOT_STORED。

replace 僅當鍵已經存在時,replace 命令才會替換緩存中的鍵。如果緩存中不存在鍵,那麼您將從 memcached 伺服器接受到一條 NOT_STORED 響應。  

Append 將此數據添加到現有數據後的現有key中

prepend 將此數據添加到現有數據前的現有key中

append和prepend命令不接受flags或exptime。他們更新現有的數據部分,而忽略了新的flag和exptime設置。

 

cas是一個check和set操作,這意味著, 存儲這些數據,但在我訪問過此數據後,再沒有其他人更新。

 

<key>用於查找緩存值 
<flags>可以包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息 
<exptime>在緩存中保存鍵值對的時間長度(以秒為單位,0 表示永遠) 
<bytes>在緩存中存儲的位元組點 

<cas unique> 一個存在的64bit的entry值。這個值是客戶端使用gets返回的值。

"noreply" 這是一個可選參數,服務端不會發送回覆。

 

在這一行之下,是客戶端要發送給服務端進行緩存的數據。

<data block>\r\n

<data block> 存儲的數據塊(可直接理解為key-value結構中的value)

 

實例操作:

 

 

可以看到我保存了carl到username中,結果是STORED。表示存儲成功。 

 

2.取回命令(Retrieval command)

get <key>*\r\n

gets <key>*\r\n

 

<key>* 是一個或多個被空格分開的字元串

返回的結果是0到多個items。存儲的數據會被顯示出來。結尾是一個

"END\r\n"

 

 

3.刪除命令(Deletion)

delete <key> [noreply]\r\n

 

<key> 是客戶端想要刪除的服務端的緩存的key值

  

 

4.統計(Statistics)

stats 命令的功能正如其名:轉儲所連接的 memcached 實例的當前統計數據。在下例中,執行 stats 命令顯示了關於當前 memcached 實例的信息: 

STAT pid 22459                             進程ID 
STAT uptime 1027046                        伺服器運行秒數 
STAT time 1273043062                       伺服器當前unix時間戳 
STAT version 1.4.4                         伺服器版本 
STAT pointer_size 64                       操作系統字大小(這台伺服器是64位的) 
STAT rusage_user 0.040000                  進程累計用戶時間 
STAT rusage_system 0.260000                進程累計系統時間 
STAT curr_connections 10                   當前打開連接數 
STAT total_connections 82                  曾打開的連接總數 
STAT connection_structures 13              伺服器分配的連接結構數 
STAT cmd_get 54                            執行get命令總數 
STAT cmd_set 34                            執行set命令總數 
STAT cmd_flush 3                           指向flush_all命令總數 
STAT get_hits 9                            get命中次數 
STAT get_misses 45                         get未命中次數 
STAT delete_misses 5                       delete未命中次數 
STAT delete_hits 1                         delete命中次數 
STAT incr_misses 0                         incr未命中次數 
STAT incr_hits 0                           incr命中次數 
STAT decr_misses 0                         decr未命中次數 
STAT decr_hits 0                           decr命中次數 
STAT cas_misses 0    cas未命中次數 
STAT cas_hits 0                            cas命中次數 
STAT cas_badval 0                          使用擦拭次數 
STAT auth_cmds 0 
STAT auth_errors 0 
STAT bytes_read 15785                      讀取位元組總數 
STAT bytes_written 15222                   寫入位元組總數 
STAT limit_maxbytes 1048576                分配的記憶體數(位元組) 
STAT accepting_conns 1                     目前接受的鏈接數 
STAT listen_disabled_num 0                 
STAT threads 4                             線程數 
STAT conn_yields 0 
STAT bytes 0                               存儲item位元組數 
STAT curr_items 0                          item個數 
STAT total_items 34                        item總數 
STAT evictions 0                           為獲取空間刪除item的總數 

5.其他命令

flush_all該命令有一個可選的數字參數。它總是執行成功,伺服器會發送 “OK\r\n” 回應。它的效果是使已經存在的項目立即失效(預設),或在指定的時間後。此後執行取回命令,將不會有任何內容返回(除非重新存儲同樣的鍵名)。 flush_all 實際上沒有立即釋放項目所占用的記憶體,而是在隨後陸續有新的項目被儲存時執行(這是由memcached的懶惰檢測和刪除機制決定的)。

flush_all 效果是它導致所有更新時間早於 flush_all 所設定時間的項目,在被執行取回命令時命令被忽略。

 

 五、java客戶端訪問

所依賴的主要jar包

maven配置pom.xml

<!--  memcached client -->
        <dependency>
            <groupId>com.google.code.simple-spring-memcached</groupId>
            <artifactId>spymemcached</artifactId>
            <version>2.8.4</version>
        </dependency>

java客戶端測試代碼(參考自文章:http://blog.csdn.net/arui_email/article/details/8129400)

另外大家也可以參考這篇文章http://blog.csdn.net/seelye/article/details/8511073

package com.carl.carlapp.memcached;

import java.net.InetSocketAddress;
import java.util.concurrent.Future;

import net.spy.memcached.MemcachedClient;

public class TestSpyMemcache {  
       
    public static void main(String[] args) {  
   
       // 保存對象  
   
       try {  
   
           /* 建立MemcachedClient 實例,並指定memcached服務的IP地址和埠號 */  
   
           MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));  
   
           Future<Boolean> b = null;  
   
           /* 將key值,過期時間(秒)和要緩存的對象set到memcached中 */  
   
           b = mc.set("neea:testDaF:ksIdno", 900, "someObject");  
   
           if (b.get().booleanValue() == true) {  
   
              mc.shutdown();  
   
           }  
   
       } catch (Exception ex) {  
   
           ex.printStackTrace();  
   
       }  
   
       // 取得對象  
   
        try {  
   
           /* 建立MemcachedClient 實例,並指定memcached服務的IP地址和埠號 */  
   
           MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));  
   
           /* 按照key值從memcached中查找緩存,不存在則返回null */  
   
           Object b = mc.get("neea:testDaF:ksIdno");  
   
           System.out.println(b.toString());  
   
           mc.shutdown();  
   
       } catch (Exception ex) {  
   
           ex.printStackTrace();  
   
       }  
   
    }  
   
}  

結果:

someObject

 

使用telnet 結果:

 

-----------------------------------------------------------------------

官方網站:http://www.memcached.org/

Github源代碼: https://github.com/memcached/memcached

幫助文檔:https://github.com/memcached/memcached/blob/master/doc/protocol.txt

 


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

-Advertisement-
Play Games
更多相關文章
  • 一、協同程式基礎 1.什麼是協同程式 協同程式與線程差不多,也就是一條執行序列,擁有自己獨立的棧、局部變數和指令指針(即可以保存變數的值和狀態),同時又與其他協同程式共用全局變數和其他大部分東西。 與線程的區別是具有多個線程的程式可以同時運行幾個線程,而程式任意時刻只能運行一個協同程式,並且協同程式
  • 解決的問題:需要讀取某個大文件夾下所有子文件夾中的excel文件,並彙總,彙總文件中需要包含的2部分的信息:1.該條數據來源於哪個子文件夾;2.該條數據來源於哪個excel文件。最終,按照子文件夾單獨保存彙總文件,或者只保存成一個彙總文件。 場景描述:抓取了各個APP的使用數據,分散地保存在各個文件
  • 學習背景: 我在西藏拉薩出差已經連續將近2個月了,實時想到會精通一門編程語言並編寫出自己想要的程式是我多年的夢想,一定找時間實現,回想高中時,自己對編程的興趣十分濃厚,父母給自己購買了學習機插卡式的,只能敲basic代碼,同時學校有電腦課,經常和老師討論編程問題,時光一晃20多年過去了,編程放下了
  • Codeforces 55D Beautiful Number a positive integer number is beautiful if and only if it is divisible by each of its nonzero digits. Input The first l
  • 通過實際項目中對eventbus的應用來分析它能解決的問題以及當初應用有待提高的地方。很顯示eventbus應用得當可以簡化程式複雜性,提高代碼可讀性,降低開發維護成本。
  • 最近項目中有一個這樣的需求,要做一個定時任務功能,定時備份資料庫的操表,將表數據寫入txt文件。因為文件的讀寫路徑可能需要隨時改動,所以寫死或者寫成靜態變數都不方便,就考慮使用配置文件,這裡總結些配置文件用法。 一、Java Properties類 1、Java中有個比較重要的的類Propertie...
  • 1 背景概述 數通暢聯本著分享傳遞的理念已經將產品家族中的核心產品開源,目的在於滿足客戶與伙伴的OEM需求,以及為廣大IT愛好者的集成工具提供多一種選擇,多一種便利。如果需要對產品進行擴展開發或者更深層次的瞭解產品可以在svn中check out源碼。 本文詳細介紹BPM、Portal、SMC工程在
  • 題外:做過一陣開發,後來接觸了很多東西,改變了觀念,比較浮躁,嘗試過轉行各種崗位,最後做了網路運營,其間走的彎路中學到了很多東西,時間推移開發扔了很久,故此閑暇時間複習下。 概述:沒有寫技術博客的經驗,看過的博客也不喜歡長篇大論,比較喜歡直觀看代碼,學習的習慣是行動中理解,如果需要深入瞭解我會看一些
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...