Memcached 快速指南



Memcached - 概述

Memcached 是一個開源的、高效能的、分散式記憶體快取系統,旨在透過減少資料庫負載來加速動態 Web 應用程式。它是一個字串、物件等的鍵值字典,儲存在記憶體中,來自資料庫呼叫、API 呼叫或頁面渲染的結果。

Memcached 由 Brad Fitzpatrick 於 2003 年為 LiveJournal 開發。然而,它現在被 Netlog、Facebook、Flickr、維基百科、Twitter 和 YouTube 等使用。

Memcached 的主要特性如下:

  • 它是開源的。

  • Memcached 伺服器是一個大型雜湊表。

  • 它顯著減少了資料庫負載。

  • 對於資料庫負載高的網站來說,它非常高效。

  • 它在 Berkeley 軟體發行版 (BSD) 許可下分發。

  • 它是一個透過 TCP 或 UDP 的客戶端-伺服器應用程式。

Memcached 不是:

  • 永續性資料儲存

  • 資料庫

  • 特定於應用程式的

  • 大型物件快取

  • 容錯或高可用

Memcached - 環境

在 Ubuntu 上安裝 Memcached

要在 Ubuntu 上安裝 Memcached,請轉到終端並輸入以下命令:

$sudo apt-get update
$sudo apt-get install memcached

確認 Memcached 安裝

要確認 Memcached 是否已安裝,您需要執行下面給出的命令。此命令顯示 Memcached 正在預設埠 **11211** 上執行。

$ps aux | grep memcached

要在不同的埠上執行 Memcached 伺服器,請執行下面給出的命令。此命令在 TCP 埠 11111 上啟動伺服器,並在 UDP 埠 11111 上作為守護程序監聽。

$memcached -p 11111 -U 11111 -u user -d

您可以透過單個安裝執行 Memcached 伺服器的多個例項。

Memcached Java 環境設定

要在您的 Java 程式中使用 Memcached,您需要下載 **spymemcached-2.10.3.jar** 並將此 jar 設定到類路徑中。

Memcached - 連線

要連線到 Memcached 伺服器,您需要在 HOST 和 PORT 名稱上使用 telnet 命令。

語法

Memcached telnet 命令的基本語法如下所示:

$telnet HOST PORT

這裡,**HOST** 和 **PORT** 分別是 Memcached 伺服器正在執行的機器 IP 和埠號。

示例

以下示例顯示瞭如何連線到 Memcached 伺服器並執行簡單的 set 和 get 命令。假設 Memcached 伺服器正在主機 127.0.0.1 和埠 11211 上執行。

$telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
// now store some data and get it from memcached server
set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
memcached
END

從 Java 應用程式連線

要從您的 java 程式連線 Memcached 伺服器,您需要將 Memcached jar 新增到您的類路徑中,如上一章所示。假設 Memcached 伺服器正在主機 127.0.0.1 和埠 11211 上執行。

示例

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
      
      // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server sucessfully");
      
      //not set data into memcached server
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").done);
      
      //Get value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successfully
set status:true
Get from Cache:memcached.

終端也可能顯示一些資訊訊息,可以忽略這些訊息。

Memcached - 設定資料

Memcached **set** 命令用於為新的或現有的鍵設定新值。

語法

Memcached **set** 命令的基本語法如下所示:

set key flags exptime bytes [noreply] 
value 

語法的關鍵字如下所述:

  • **key** - 它是儲存和檢索 Memcached 中資料的鍵的名稱。

  • **flags** - 它是伺服器與使用者提供的資料一起儲存的 32 位無符號整數,並在檢索專案時與資料一起返回。

  • **exptime** - 它是以秒為單位的過期時間。0 表示沒有延遲。如果 exptime 超過 30 天,Memcached 將其用作過期時間的 UNIX 時間戳。

  • **bytes** - 它是需要儲存的資料塊中的位元組數。這是需要儲存在 Memcached 中的資料的長度。

  • **noreply (可選)** - 它是一個引數,通知伺服器不要傳送任何回覆。

  • **value** - 它是需要儲存的資料。在使用上述選項執行命令後,需要在新行中傳遞資料。

輸出

命令的輸出如下所示:

STORED
  • **STORED** 表示成功。

  • **ERROR** 表示語法錯誤或儲存資料時出錯。

示例

在以下示例中,我們使用 tutorialspoint 作為鍵,並在其中設定值為 Memcached,過期時間為 900 秒。

set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
Memcached
END

使用 Java 應用程式設定資料

要在 Memcached 伺服器中設定鍵,您需要使用 Memcached **set** 方法。

示例

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
      
      // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server sucessfully");
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").done);
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successfully
set status:true
Get from Cache:memcached

Memcached - 新增資料

Memcached **add** 命令用於為新鍵設定值。如果鍵已存在,則輸出 NOT_STORED。

語法

Memcached **add** 命令的基本語法如下所示:

add key flags exptime bytes [noreply]
value

語法的關鍵字如下所述:

  • **key** - 它是儲存和檢索 Memcached 中資料的鍵的名稱。

  • **flags** - 它是伺服器與使用者提供的資料一起儲存的 32 位無符號整數,並在檢索專案時與資料一起返回。

  • **exptime** - 它是以秒為單位的過期時間。0 表示沒有延遲。如果 exptime 超過 30 天,Memcached 將其用作過期時間的 UNIX 時間戳。

  • **bytes** - 它是需要儲存的資料塊中的位元組數。這是需要儲存在 Memcached 中的資料的長度。

  • **noreply (可選)** - 它是一個引數,通知伺服器不要傳送任何回覆。

  • **value** - 它是需要儲存的資料。在使用上述選項執行命令後,需要在新行中傳遞資料。

輸出

命令的輸出如下所示:

STORED
  • **STORED** 表示成功。

  • **NOT_STORED** 表示資料未儲存在 Memcached 中。

示例

在以下示例中,我們使用“key”作為鍵,並在其中新增值為 Memcached,過期時間為 900 秒。

add key 0 900 9
memcached
STORED
get key
VALUE key 0 9
Memcached
END

失敗輸出

add key 0 900 5
redis
NOT_STORED

使用 Java 應用程式新增資料

要在 Memcached 伺服器中新增資料,您需要使用 Memcached **add** 方法。

示例

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
      
      // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server successful");
      System.out.println("add status:"+mcc.add("tutorialspoint", 900, "redis").done);
      System.out.println("add status:"+mcc.add("tp", 900, "redis").done);
      
      // Get value from cache
      System.out.println("Get from Cache tp:"+mcc.get("tp"));
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successful
add status:false
add status:true
Get from Cache tp:redis

Memcached - 替換資料

Memcached **replace** 命令用於替換現有鍵的值。如果鍵不存在,則輸出 NOT_STORED。

語法

Memcached **replace** 命令的基本語法如下所示:

replace key flags exptime bytes [noreply]
value

語法的關鍵字如下所述:

  • **key** - 它是儲存和檢索 Memcached 中資料的鍵的名稱。

  • **flags** - 它是伺服器與使用者提供的資料一起儲存的 32 位無符號整數,並在檢索專案時與資料一起返回。

  • **exptime** - 它是以秒為單位的過期時間。0 表示沒有延遲。如果 exptime 超過 30 天,Memcached 將其用作過期時間的 UNIX 時間戳。

  • **bytes** - 它是需要儲存的資料塊中的位元組數。這是需要儲存在 Memcached 中的資料的長度。

  • **noreply (可選)** - 它是一個引數,通知伺服器不要傳送任何回覆。

  • **value** - 它是需要儲存的資料。在使用上述選項執行命令後,需要在新行中傳遞資料。

輸出

命令的輸出如下所示:

STORED
  • **STORED** 表示成功。

  • **NOT_STORED** 表示資料未儲存在 Memcached 中。

示例

在以下示例中,我們使用“key”作為鍵,並在其中儲存 memcached,過期時間為 900 秒。之後,同一個鍵被替換為值“redis”。

add key 0 900 9
memcached
STORED
get key
VALUE key 0 9
memcached
END
replace key 0 900 5
redis
get key
VALUE key 0 5
redis
END

使用 Java 應用程式替換資料

要在 Memcached 伺服器中替換資料,您需要使用 Memcached **replace** 方法。

示例

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
      
      // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server sucessfully");
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").done);
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
      
      // now replace the existing data
      System.out.println("Replace cache:"+mcc.replace("tutorialspoint", 900, "redis").done);
      
      // get the updated data
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successfully
set status:true
Get from Cache:memcached
Replace cache:true
Get from Cache:redis

Memcached - 追加資料

Memcached **append** 命令用於在現有鍵中新增一些資料。資料儲存在鍵的現有資料之後。

語法

Memcached **append** 命令的基本語法如下所示:

append key flags exptime bytes [noreply]
value

語法的關鍵字如下所述:

  • **key** - 它是儲存和檢索 Memcached 中資料的鍵的名稱。

  • **flags** - 它是伺服器與使用者提供的資料一起儲存的 32 位無符號整數,並在檢索專案時與資料一起返回。

  • **exptime** - 它是以秒為單位的過期時間。0 表示沒有延遲。如果 exptime 超過 30 天,Memcached 將其用作過期時間的 UNIX 時間戳。

  • **bytes** - 它是需要儲存的資料塊中的位元組數。這是需要儲存在 Memcached 中的資料的長度。

  • **noreply (可選)** - 它是一個引數,通知伺服器不要傳送任何回覆。

  • **value** - 它是需要儲存的資料。在使用上述選項執行命令後,需要在新行中傳遞資料。

輸出

命令的輸出如下所示:

STORED
  • **STORED** 表示成功。

  • **NOT_STORED** 表示鍵不存在於 Memcached 伺服器中。

  • **CLIENT_ERROR** 表示錯誤。

示例

在以下示例中,我們嘗試在不存在的鍵中新增一些資料。因此,Memcached 返回 **NOT_STORED**。之後,我們設定一個鍵並在其中追加資料。

append tutorials 0 900 5
redis
NOT_STORED
set tutorials 0 900 9
memcached
STORED
get tutorials
VALUE tutorials 0 14
memcached
END
append tutorials 0 900 5
redis
STORED
get tutorials
VALUE tutorials 0 14
memcachedredis
END

使用 Java 應用程式追加資料

要在 Memcached 伺服器中追加資料,您需要使用 Memcached **append** 方法。

示例

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
      
      // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server successful");
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").isDone());
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
      
      // now append some data into existing key
      System.out.println("Append to cache:"+mcc.append("tutorialspoint", "redis").isDone());
      
      // get the updated key
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successful
set status:true
Get from Cache:memcached
Append to cache:true
Get from Cache:memcachedredis

Memcached - 前置資料

Memcached **prepend** 命令用於在現有鍵中新增一些資料。資料儲存在鍵的現有資料之前。

語法

Memcached **prepend** 命令的基本語法如下所示:

prepend key flags exptime bytes [noreply]
value

語法的關鍵字如下所述:

  • **key** - 它是儲存和檢索 Memcached 中資料的鍵的名稱。

  • **flags** - 它是伺服器與使用者提供的資料一起儲存的 32 位無符號整數,並在檢索專案時與資料一起返回。

  • **exptime** - 它是以秒為單位的過期時間。0 表示沒有延遲。如果 exptime 超過 30 天,Memcached 將其用作過期時間的 UNIX 時間戳。

  • **bytes** - 它是需要儲存的資料塊中的位元組數。這是需要儲存在 Memcached 中的資料的長度。

  • **noreply (可選)** - 它是一個引數,通知伺服器不要傳送任何回覆。

  • **value** - 它是需要儲存的資料。在使用上述選項執行命令後,需要在新行中傳遞資料。

輸出

命令的輸出如下所示:

STORED
  • **STORED** 表示成功。

  • **NOT_STORED** 表示鍵不存在於 Memcached 伺服器中。

  • **CLIENT_ERROR** 表示錯誤。

示例

在以下示例中,我們嘗試在不存在的鍵中新增一些資料。因此,Memcached 返回 **NOT_STORED**。之後,我們設定一個鍵並在其中前置資料。

prepend tutorials 0 900 5
redis
NOT_STORED
set tutorials 0 900 9
memcached
STORED
get tutorials
VALUE tutorials 0 14
memcached
END
prepend tutorials 0 900 5
redis
STORED
get tutorials
VALUE tutorials 0 14
redismemcached
END

使用 Java 應用程式前置資料

要在 Memcached 伺服器中前置資料,您需要使用 Memcached **prepend** 方法。

示例

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
      // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server successful");
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").isDone());
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
      
      // now append some data into existing key
      System.out.println("Prepend to cache:"+mcc.prepend("tutorialspoint", "redis").isDone());
      
      // get the updated key
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successful
set status:true
Get from Cache:memcached
Prepend to cache:true
Get from Cache:redismemcached

Memcached - CAS 命令

CAS 代表 Check-And-Set 或 Compare-And-Swap。Memcached **CAS** 命令用於在自上次獲取以來資料未更新的情況下設定資料。如果鍵不存在於 Memcached 中,則返回 **NOT_FOUND**。

語法

Memcached **CAS** 命令的基本語法如下所示:

set key flags exptime bytes unique_cas_key [noreply]
value

語法的關鍵字如下所述:

  • **key** - 它是儲存和檢索 Memcached 中資料的鍵的名稱。

  • **flags** - 它是伺服器與使用者提供的資料一起儲存的 32 位無符號整數,並在檢索專案時與資料一起返回。

  • **exptime** - 它是以秒為單位的過期時間。0 表示沒有延遲。如果 exptime 超過 30 天,Memcached 將其用作過期時間的 UNIX 時間戳。

  • **bytes** - 它是需要儲存的資料塊中的位元組數。這是需要儲存在 Memcached 中的資料的長度。

  • **unique_cas_key** - 它是從 gets 命令獲取的唯一鍵。

  • **noreply (可選)** - 它是一個引數,通知伺服器不要傳送任何回覆。

  • **value** - 它是需要儲存的資料。在使用上述選項執行命令後,需要在新行中傳遞資料。

輸出

命令的輸出如下所示:

STORED
  • **STORED** 表示成功。

  • **ERROR** 表示儲存資料時出錯或語法錯誤。

  • **EXISTS** 表示自上次獲取以來有人修改了 CAS 資料。

  • **NOT_FOUND** 表示鍵不存在於 Memcached 伺服器中。

示例

要在 Memcached 中執行 CAS 命令,您需要從 Memcached gets 命令獲取 CAS 令牌。

cas tp 0 900 9
ERROR
cas tp 0 900 9 2
memcached
set tp 0 900 9
memcached
STORED
gets tp
VALUE tp 0 9 1
memcached
END
cas tp 0 900 5 2
redis
EXISTS
cas tp 0 900 5 1
redis
STORED
get tp
VALUE tp 0 5
redis
END

使用 Java 應用程式 CAS

要從 Memcached 伺服器獲取 CAS 資料,您需要使用 Memcached **gets** 方法。

示例

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
     
     // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server successful");
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").isDone());

      // Get cas token from cache
      long castToken = mcc.gets("tutorialspoint").cas;
      System.out.println("Cas token:"+castToken);

      // now set new data in memcached server
      System.out.println("Now set new data:"+mcc.cas("tutorialspoint",
      castToken, 900, "redis"));
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successful
set status:true
Cas token:3
Now set new data:OK
Get from Cache:redis

Memcached - 獲取資料

Memcached **get** 命令用於獲取儲存在鍵中的值。如果鍵不存在於 Memcached 中,則不返回任何內容。

語法

Memcached **get** 命令的基本語法如下所示:

get key

示例

在以下示例中,我們使用 tutorialspoint 作為鍵,並在其中儲存 memcached,過期時間為 900 秒。

set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
memcached
END

使用 Java 應用程式獲取資料

要從 Memcached 伺服器獲取資料,您需要使用 Memcached **get** 方法。

示例

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
      // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server sucessfully");
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").done);
     
     // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successfully
set status:true
Get from Cache:memcached

Memcached - 獲取 CAS 資料

Memcached **gets** 命令用於獲取帶有 CAS 令牌的值。如果鍵不存在於 Memcached 中,則不返回任何內容。

語法

Memcached **gets** 命令的基本語法如下所示:

get key

示例

set tutorialspoint 0 900 9
memcached
STORED
gets tutorialspoint
VALUE tutorialspoint 0 9 1
memcached
END

在此示例中,我們使用 tutorialspoint 作為鍵,並在其中儲存 memcached,過期時間為 900 秒。

使用 Java 應用程式獲取 CAS 資料

要從 Memcached 伺服器獲取 CAS 資料,您需要使用 Memcached 的 **gets** 方法。

示例

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
      
      // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server sucessfully");
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").done);
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.gets("tutorialspoint"));
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successfully
set status:true
Get from Cache:{CasValue 2/memcached}

Memcached - 刪除鍵

Memcached 的 **delete** 命令用於從 Memcached 伺服器刪除現有鍵。

語法

Memcached **delete** 命令的基本語法如下所示:

delete key [noreply]

輸出

CAS 命令可能產生以下結果之一:

  • **DELETED** 表示刪除成功。

  • **ERROR** 表示刪除資料時出錯或語法錯誤。

  • **NOT_FOUND** 表示鍵不存在於 Memcached 伺服器中。

示例

在此示例中,我們使用 tutorialspoint 作為鍵,並將 memcached 儲存在其中,過期時間為 900 秒。之後,它會刪除儲存的鍵。

set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
memcached
END
delete tutorialspoint
DELETED
get tutorialspoint
END
delete tutorialspoint
NOT_FOUND

使用 Java 應用程式刪除資料

要從 Memcached 伺服器刪除資料,您需要使用 Memcached 的 **delete** 方法。

示例

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

import net.spy.memcached.MemcachedClient;

public class MemcachedJava {
   public static void main(String[] args) {
   
      try{
   
         // Connecting to Memcached server on localhost
         MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
         System.out.println("Connection to server sucessful.");

         // add data to memcached server
         Future fo = mcc.set("tutorialspoint", 900, "World's largest online tutorials library");

         // print status of set method
         System.out.println("set status:" + fo.get());

         // retrieve and check the value from cache
         System.out.println("tutorialspoint value in cache - " + mcc.get("tutorialspoint"));

         // try to add data with existing key
         Future fo = mcc.delete("tutorialspoint");

         // print status of delete method
         System.out.println("delete status:" + fo.get());

         // retrieve and check the value from cache
         System.out.println("tutorialspoint value in cache - " + mcc.get("codingground"));

         // Shutdowns the memcached client
         mcc.shutdown();
         
      }catch(Exception ex)
         System.out.println(ex.getMessage());
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successful
set status:true
tutorialspoint value in cache - World's largest online tutorials library
delete status:true
tutorialspoint value in cache - null

Memcached - 刪除資料

Memcached 的 **delete** 命令用於從 Memcached 伺服器刪除現有鍵。

語法

Memcached **delete** 命令的基本語法如下所示:

delete key

如果鍵成功刪除,則返回 DELETED。如果未找到鍵,則返回 NOT_FOUND,否則返回 ERROR。

示例

在此示例中,我們使用 tutorialspoint 作為鍵,並將 memcached 儲存在其中,過期時間為 900 秒。之後,它會刪除儲存的鍵。

set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
memcached
END
delete tutorialspoint
DELETED
get tutorialspoint
END
delete tutorialspoint
NOT_FOUND

使用 Java 應用程式刪除資料

要從 Memcached 伺服器刪除資料,您需要使用 Memcached 的 **delete** 方法。

示例

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
      
      // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server successful");
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").done);
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
      
      // delete value from cache
      System.out.println("Delete from Cache:"+mcc.delete("tutorialspoint").isDone());
      
      // check whether value exists or not
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successful
set status:true
Get from Cache:memcached
Delete from Cache:true
Get from Cache:null

Memcached - 增量遞減資料

Memcached 的 **incr** 和 **decr** 命令用於增加或減少現有鍵的數值。如果未找到鍵,則返回 **NOT_FOUND**。如果鍵不是數字,則返回 **CLIENT_ERROR cannot increment or decrement non-numeric value**。否則,返回 **ERROR**。

語法 - incr

Memcached **incr** 命令的基本語法如下所示:

incr key increment_value

示例

在此示例中,我們使用 visitors 作為鍵,並最初將其設定為 10,然後我們將 visitors 增加 5。

set visitors 0 900 2
10
STORED
get visitors
VALUE visitors 0 2
10
END
incr visitors 5
15
get visitors
VALUE visitors 0 2
15
END

語法 - decr

Memcached **decr** 命令的基本語法如下所示

decr key decrement_value

示例

set visitors 0 900 2
10
STORED
get visitors
VALUE visitors 0 2
10
END
decr visitors 5
5
get visitors
VALUE visitors 0 1
5
END

使用 Java 應用程式進行增量/遞減

要增加或減少 Memcached 伺服器中的資料,您需要分別使用 Memcached 的 **incr 或 decr** 方法。

示例

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
      
      // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server sucessfully");
      System.out.println("set status:"+mcc.set("count", 900, "5").isDone());
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("count"));
      
      // now increase the stored value
      System.out.println("Increment value:"+mcc.incr("count", 2));
      
      // now decrease the stored value
      System.out.println("Decrement value:"+mcc.decr("count", 1));
      
      // now get the final stored value
      System.out.println("Get from Cache:"+mcc.get("count"));
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successfully
set status:true
Get from Cache:5
Increment value:7
Decrement value:6
Get from Cache:6

Memcached - 統計資訊

Memcached **stats** 命令用於返回伺服器統計資訊,例如 PID、版本、連線等。

語法

Memcached **stats** 命令的基本語法如下所示:

stats

示例

stats
STAT pid 1162
STAT uptime 5022
STAT time 1415208270
STAT version 1.4.14
STAT libevent 2.0.19-stable
STAT pointer_size 64
STAT rusage_user 0.096006
STAT rusage_system 0.152009
STAT curr_connections 5
STAT total_connections 6

STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 6
STAT cmd_set 4
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 4
STAT get_misses 2
STAT delete_misses 1
STAT delete_hits 1

STAT incr_misses 2
STAT incr_hits 1
STAT decr_misses 0
STAT decr_hits 1
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0

STAT auth_errors 0
STAT bytes_read 262
STAT bytes_written 313
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16

STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT expired_unfetched 1
STAT evicted_unfetched 0
STAT bytes 142
STAT curr_items 2
STAT total_items 6
STAT evictions 0
STAT reclaimed 1
END

使用 Java 應用程式獲取統計資訊

要從 Memcached 伺服器獲取統計資訊,您需要使用 Memcached 的 **stats** 方法。

示例

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
      
      // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server successful");
      System.out.println("Stats:"+mcc.stats);
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successful
Stats:[/127.0.0.1:11211:[delete_hits:0, bytes:71, total_items:4,
rusage_system:0.220013, touch_misses:0, cmd_touch:0, listen_disabled_num:0,
auth_errors:0, evictions:0, version:1.4.14, pointer_size:64, time:1417279366,
incr_hits:1, threads:4, expired_unfetched:0, limit_maxbytes:67108864,
hash_is_expanding:0, bytes_read:170, curr_connections:8, get_misses:1,
reclaimed:0, bytes_written:225, hash_power_level:16, connection_structures:9,
cas_hits:0, delete_misses:0, total_connections:11, rusage_user:0.356022,
cmd_flush:0, libevent:2.0.19-stable, uptime:12015, reserved_fds:20,
touch_hits:0, cas_badval:0, pid:1138, get_hits:2, curr_items:1, cas_misses:0,
accepting_conns:1, evicted_unfetched:0, cmd_get:3, cmd_set:2, auth_cmds:0,
incr_misses:1, hash_bytes:524288, decr_misses:1, decr_hits:1, conn_yields:0]]

Memcached - 統計專案

Memcached **stats items** 命令用於獲取專案統計資訊,例如計數、年齡、逐出等,並按 slab ID 組織。

語法

Memcached **stats items** 命令的基本語法如下所示:

stats items

示例

stats items
STAT items:1:number 1
STAT items:1:age 7
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
END

Memcached - 統計記憶體塊

Memcached **stats slabs** 命令顯示 slab 統計資訊,例如大小、記憶體使用情況、命令、計數等,並按 slab ID 組織。

語法

Memcached **stats slabs** 命令的基本語法如下所示:

stats slabs

示例

stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 1
STAT 1:free_chunks 10921
STAT 1:free_chunks_end 0
STAT 1:mem_requested 71
STAT 1:get_hits 0
STAT 1:cmd_set 1
STAT 1:delete_hits 0
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT 1:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048512
END

Memcached - 統計大小

Memcached **stats sizes** 命令提供有關快取中每個大小的專案的大小和數量的資訊。資訊以兩列返回。第一列是專案的大小(四捨五入到最接近的 32 位元組邊界),第二列是快取中該大小專案的數量。

語法

Memcached **stats sizes** 命令的基本語法如下所示:

stats sizes

示例

stats sizes
STAT 96 1
END

專案大小統計資訊僅用於確定您正在儲存的物件的大小。由於實際記憶體分配僅與塊大小和頁面大小相關,因此該資訊僅在仔細的除錯或診斷會話期間有用。

Memcached - 清除資料

Memcached **flush_all** 命令用於刪除 Memcached 伺服器中的所有資料(鍵值對)。它接受一個可選引數稱為 **time**,該引數設定 Memcached 資料將在其後清除的時間。

語法

Memcached **flush_all** 命令的基本語法如下所示:

flush_all [time] [noreply]

上述命令始終返回 OK。

示例

在以下示例中,我們將一些資料儲存到 Memcached 伺服器中,然後清除所有資料。

set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
memcached
END
flush_all
OK
get tutorialspoint
END

使用 Java 應用程式清除資料

要從 Memcached 伺服器清除資料,您需要使用 Memcached 的 **flush** 方法。

示例

import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
   public static void main(String[] args) {
     
     // Connecting to Memcached server on localhost
      MemcachedClient mcc = new MemcachedClient(new
      InetSocketAddress("127.0.0.1", 11211));
      System.out.println("Connection to server sucessfully");
      System.out.println("set status:"+mcc.set("count", 900, "5").isDone());
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("count"));
     
      // now increase the stored value
      System.out.println("Increment value:"+mcc.incr("count", 2));
     
      // now decrease the stored value
      System.out.println("Decrement value:"+mcc.decr("count", 1));
      
      // now get the final stored value
      System.out.println("Get from Cache:"+mcc.get("count"));
      
      // now clear all this data
      System.out.println("Clear data:"+mcc.flush().isDone());
   }
}

輸出

編譯並執行程式後,您將看到以下輸出:

Connection to server successfully
set status:true
Get from Cache:5
Increment value:7
Decrement value:6
Get from Cache:6
Clear data:true
廣告