Memcached 简明教程
Memcached - Overview
Memcached 是一个开源、高性能的分布式内存缓存系统,旨在通过减轻数据库负载来加速动态 Web 应用程序。它是一个存储在内存中的字符串、对象等键值对字典,源自数据库调用、API 调用或页面渲染。
Memcached 于 2003 年由 Brad Fitzpatrick 为 LiveJournal 开发。然而,它现在正被 Netlog、Facebook、Flickr、Wikipedia、Twitter 和 YouTube 等公司使用。
Memcached 的主要特性如下:
-
It is open source.
-
Memcached 服务器是一个巨大的哈希表。
-
它显著减轻了数据库负载
-
对于数据库负载高的网站而言,它非常高效。
-
它在伯克利软件发行版 (BSD) 许可证下分发。
-
它是一个基于 TCP 或 UDP 的客户端-服务器应用程序。
Memcached - Environment
Installing Memcached on Ubuntu
要在 Ubuntu 上安装 Memcached,请进入终端并键入以下命令:
$sudo apt-get update
$sudo apt-get install memcached
Memcached Java Environment Setup
在您的 Java 程序中使用 Memcached,您需要下载 * spymemcached-2.10.3.jar* ,并将此 jar 设置到类路径中。
Memcached - Connection
要连接到 Memcached 服务器,您需要在 HOST 和 PORT 名称上使用 telnet 命令。
Syntax
Memcached telnet 命令的基本语法如下所示:
$telnet HOST PORT
此处 HOST 和 PORT 分别是 Memcached 服务器正在执行的机器的 IP 和端口号。
Example
以下示例演示如何连接到 Memcached 服务器并执行一个简单的设定和获取命令。假设 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
Connection from Java Application
要从您的 java 程序连接 Memcached 服务器,您需要将 Memcached jar 添加到您的类路径中,如前一章所示。假设 Memcached 服务器正在主机 127.0.0.1 和端口 11211 上运行。-
Example
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"));
}
}
Memcached - Set Data
Memcached set 命令用于为新键或现有键设置新值。
Syntax
Memcached set 命令的基本语法如下所示:
set key flags exptime bytes [noreply]
value
语法中的关键字的说明如下:
-
key :这是数据在 Memcached 中存储和从中检索的键的名称。
-
flags :它是一个 32 位无符号整数,服务器与用户提供的数据一起存储该整数,并在检索该项时与该数据一同返回。
-
exptime :它是以秒为单位的过期时间。0 表示无延迟。如果 exptime 超过 30 天,则 Memcached 会将其用作过期的 UNIX 时间戳。
-
bytes :它是需要存储的数据块中的字节数。这是需要存储在 Memcached 中的数据长度。
-
noreply (optional) - 这是一个参数,通知服务器不发送任何回复。
-
value :它是需要存储的数据。在使用上述选项执行命令后,数据需要在新行上传递。
Example
在以下示例中,我们将 tutorialspoint 用作键,并将值 Memcached 设置为其值,其过期时间为 900 秒。
set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
Memcached
END
Set Data Using Java Application
要在 Memcached 服务器中设置键,您需要使用 Memcached set 方法。
Example
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"));
}
}
Memcached - Add Data
Memcached add 命令用于为新键设置值。如果键已存在,则它给出输出 NOT_STORED。
Syntax
Memcached add 的基本语法如下所示 −
add key flags exptime bytes [noreply]
value
语法中的关键字的说明如下:
-
key :这是数据在 Memcached 中存储和从中检索的键的名称。
-
flags :它是一个 32 位无符号整数,服务器与用户提供的数据一起存储该整数,并在检索该项时与该数据一同返回。
-
exptime − 是以秒计的过期时间。0 表示无延迟。如果 exptime 超过 30 天,则 Memcached 会将其用作过期的 UNIX 时间戳。
-
bytes :它是需要存储的数据块中的字节数。这是需要存储在 Memcached 中的数据长度。
-
noreply (optional) − 是通知服务器不发送任何回复的参数。
-
value :它是需要存储的数据。在使用上述选项执行命令后,数据需要在新行上传递。
Example
在以下示例中,我们使用“key”作为键,并以 900 秒的过期时间在其内添加值 Memcached。
add key 0 900 9
memcached
STORED
get key
VALUE key 0 9
Memcached
END
Add Data Using Java Application
若要将数据添加到 Memcached 服务器,您需要使用 Memcached add 方法。
Example
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"));
}
}
Memcached - Replace Data
Memcached replace 命令用于替换现有键的值。如果键不存在,则会输出 NOT_STORED。
Syntax
Memcached replace 的基本语法如下所示 −
replace key flags exptime bytes [noreply]
value
语法中的关键字的说明如下:
-
key :这是数据在 Memcached 中存储和从中检索的键的名称。
-
flags :它是一个 32 位无符号整数,服务器与用户提供的数据一起存储该整数,并在检索该项时与该数据一同返回。
-
exptime − 是以秒计的过期时间。0 表示无延迟。如果 exptime 超过 30 天,则 Memcached 会将其用作过期的 UNIX 时间戳。
-
bytes − 是需要存储的数据块中的字节数。这是需要存储在 Memcached 中的数据长度。
-
noreply (optional) − 是通知服务器不发送任何回复的参数。
-
value :它是需要存储的数据。在使用上述选项执行命令后,数据需要在新行上传递。
Example
在以下示例中,我们使用“key”作为键,并以 900 秒的过期时间在其内存储 memcached。此后,将使用值“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
Replace Data Using Java Application
若要替换 Memcached 服务器中的数据,您需要使用 Memcached replace 方法。
Example
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"));
}
}
Memcached - Append Data
Memcached append 命令用于在现有键中添加一些数据。将在键的现有数据后存储数据。
Syntax
Memcached append 的基本语法如下所示 −
append key flags exptime bytes [noreply]
value
语法中的关键字的说明如下−
-
key :这是数据在 Memcached 中存储和从中检索的键的名称。
-
flags :它是一个 32 位无符号整数,服务器与用户提供的数据一起存储该整数,并在检索该项时与该数据一同返回。
-
exptime − 是以秒计的过期时间。0 表示无延迟。如果 exptime 超过 30 天,则 Memcached 会将其用作过期的 UNIX 时间戳。
-
bytes :它是需要存储的数据块中的字节数。这是需要存储在 Memcached 中的数据长度。
-
noreply (optional) − 是通知服务器不发送任何回复的参数。
-
value :它是需要存储的数据。在使用上述选项执行命令后,数据需要在新行上传递。
Output
命令的输出如下所示:
STORED
-
STORED indicates success.
-
NOT_STORED 表示键在 Memcached 服务器中不存在。
-
CLIENT_ERROR indicates error.
Example
在以下示例中,我们尝试向一个不存在的键添加一些数据。因此,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
Append Data Using Java Application
若要将数据追加到 Memcached 服务器,您需要使用 Memcached append 方法。
Example
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"));
}
}
Memcached - Prepend Data
Memcached prepend 命令用于在现有键中添加一些数据。将在键的现有数据前存储数据。
Syntax
Memcached prepend 命令的基本语法如下所示 −
prepend key flags exptime bytes [noreply]
value
语法中的关键字的说明如下−
-
key − 它是按键存储和检索 Memcached 中的数据的名称。
-
flags :它是一个 32 位无符号整数,服务器与用户提供的数据一起存储该整数,并在检索该项时与该数据一同返回。
-
exptime − 是以秒计的过期时间。0 表示无延迟。如果 exptime 超过 30 天,则 Memcached 会将其用作过期的 UNIX 时间戳。
-
bytes :它是需要存储的数据块中的字节数。这是需要存储在 Memcached 中的数据长度。
-
noreply (optional) − 这个参数通知服务器不要发送任何回复。
-
value − 需要存储的数据。在使用上述选项执行命令后,数据需要传递到新行上。
Output
命令的输出如下所示:
STORED
-
STORED indicates success.
-
NOT_STORED 表示键在 Memcached 服务器中不存在。
-
CLIENT_ERROR indicates error.
Example
在以下示例中,我们在不存在的密钥中添加了一些数据。因此,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
Prepend Data Using Java Application
要向 Memcached 服务器中置入数据,你需要使用 Memcached prepend 方法。
Example
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"));
}
}
Memcached - CAS Command
CAS 代表 Check-And-Set 或 Compare-And-Swap。Memcached CAS 命令用于在数据自上次获取以来未更新时设置数据。如果密钥不存在于 Memcached 中,则它返回 NOT_FOUND 。
Syntax
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 (optional) − 是通知服务器不发送任何回复的参数。
-
value − 需要存储的数据。在使用上述选项执行命令后,数据需要传递到新行上。
Output
命令的输出如下所示:
STORED
-
STORED indicates success.
-
ERROR 指示保存数据或语法错误时出错。
-
EXISTS 指示自上次获取以来有人修改了 CAS 数据。
-
NOT_FOUND 指示密钥不存在于 Memcached 服务器中。
Example
要在 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
CAS Using Java Application
要从 Memcached 服务器中获取 CAS 数据,你需要使用 Memcached gets 方法。
Example
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"));
}
}
Memcached - Get Data
Memcached get 命令用于获取存储在密钥上的值。如果密钥不存在于 Memcached 中,则它不会返回任何内容。
Example
在以下示例中,我们使用 tutorialspoint 作为密钥,并在其中存储 memcached,其过期时间为 900 秒。
set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
memcached
END
Get Data Using Java Application
要从 Memcached 服务器获取数据,你需要使用 Memcached get 方法。
Example
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"));
}
}
Memcached - Get CAS Data
Memcached gets 命令用于获取带有 CAS 令牌的值。如果 Memcached 中不存在该密钥,则它将不返回任何内容。
Example
set tutorialspoint 0 900 9
memcached
STORED
gets tutorialspoint
VALUE tutorialspoint 0 9 1
memcached
END
在此示例中,我们使用 tutorialspoint 作为密钥,并将 memcached 存储在其中,其到期时间为 900 秒。
Get CAS Data Using Java Application
若要从 Memcached 服务器获取 CAS 数据,您需要使用 Memcached gets 方法。
Example
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"));
}
}
Memcached - Delete Key
Memcached delete 命令用于从 Memcached 服务器中删除现有密钥。
Syntax
Memcached delete 命令的基本语法如下所示:
delete key [noreply]
Delete Data Using Java Application
若要从 Memcached 服务器删除数据,您需要使用 Memcached delete 方法。
Example
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());
}
}
Memcached - Delete data
Memcached delete 命令用于从 Memcached 服务器中删除现有密钥。
Syntax
Memcached delete 命令的基本语法如下所示:
delete key
如果成功删除该密钥,则它将返回 DELETED。如果未找到该密钥,则它将返回 NOT_FOUND,否则将返回 ERROR。
Example
在此示例中,我们使用 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
Delete Data Using Java Application
若要从 Memcached 服务器删除数据,您需要使用 Memcached delete 方法。
Example
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"));
}
}
Memcached - Increment Decrement Data
Memcached incr 和 decr 命令用于增加或减少现有密钥的数值。如果未找到该密钥,则它将返回 NOT_FOUND 。如果该密钥不是数字,则它将返回 CLIENT_ERROR cannot increment or decrement non-numeric value 。否则,将返回 ERROR 。
Example
在此示例中,我们使用 visitors 作为密钥,并最初在其中设置 10,然后将其增加 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
Example
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
Incr/Decr Using Java Application
若要在 Memcached 服务器中增加或减少数据,您需要分别使用 Memcached incr or decr 方法。
Example
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"));
}
}
Memcached - Stats
Memcached stats 命令用于返回服务器统计信息,如 PID、版本、连接等。
Syntax
Memcached stats 命令的基本语法如下所示:
stats
Example
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
Stats Using Java Application
要从 Memcached 服务器获取统计信息,您需要使用 Memcached stats 方法。
Example
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);
}
}
Output
编译并执行该程序后,您可以看到以下输出:
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 - Stats Items
Memcached - Stats Slabs
Memcached stats slabs 命令显示 Slab 统计信息,例如大小、内存使用情况、命令、数量等,并按 Slab 编号排列。
Syntax
Memcached stats slabs 命令的基本语法如下所示:
stats slabs
Example
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 - Clear Data
Memcached flush_all 命令用于从 Memcached 服务器删除所有数据(键值对)。它接受一个名为 time 的可选参数,该参数设置一个时间,在此时间之后将清除 Memcached 数据。
Clear Data Using Java Application
要从 Memcached 服务器清除数据,你需要使用 Memcached flush 方法。
Example
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());
}
}