- Memcached 存储命令
- Memcached - 设置数据
- Memcached - 添加数据
- Memcached - 替换数据
- Memcached - 追加数据
- Memcached - 前置数据
- 内存缓存 - CAS
- Memcached 检索命令
- Memcached - 获取数据
- Memcached - 获取 CAS 数据
- Memcached - 删除密钥
- Memcached - 删除数据
- Memcached - 递增/递减
- Memcached 有用资源
- Memcached - 快速指南
- Memcached - 有用的资源
- Memcached - 讨论
Memcached - 快速指南
Memcached - 概述
Memcached 是一个开源、高性能、分布式内存缓存系统,旨在通过减少数据库负载来加速动态 Web 应用程序。它是存储在内存中的字符串、对象等的键值字典,由数据库调用、API 调用或页面渲染产生。
Memcached 由 Brad Fitzpatrick 于 2003 年为 LiveJournal 开发。不过,现在 Netlog、Facebook、Flickr、维基百科、Twitter 和 YouTube 等都在使用它。
Memcached 的主要特点如下:
它是开源的。
Memcached 服务器是一个大哈希表。
显着降低数据库负载
对于数据库负载较高的网站来说,它非常高效。
它根据 Berkeley Software Distribution (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替换命令用于替换现有键的值。如果该键不存在,则输出 NOT_STORED。
句法
Memcached替换命令的基本语法如下所示 -
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替换方法。
例子
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追加命令用于在现有密钥中添加一些数据。该数据存储在密钥的现有数据之后。
句法
Memcached附加命令的基本语法如下所示 -
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追加方法。
例子
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 代表“检查并设置”或“比较并交换”。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命令用于获取存储在 key 中的值。如果 Memcached 中不存在该键,则不会返回任何内容。
句法
Memcached get命令的基本语法如下所示 -
get key
例子
在下面的示例中,我们使用tutorialspoint作为key,并在其中存储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 token 的值。如果 Memcached 中不存在该键,则不会返回任何内容。
句法
Memcached gets命令的基本语法如下所示 -
get key
例子
set tutorialspoint 0 900 9 memcached STORED gets tutorialspoint VALUE tutorialspoint 0 9 1 memcached END
在这个例子中,我们使用tutorialspoint作为key,并在其中存储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删除命令用于从 Memcached 服务器中删除现有密钥。
句法
Memcached删除命令的基本语法如下所示 -
delete key [noreply]
输出
CAS 命令可能会产生以下结果之一 -
DELETED表示删除成功。
ERROR表示删除数据时出错或语法错误。
NOT_FOUND表示该键在 Memcached 服务器中不存在。
例子
在这个例子中,我们使用tutorialspoint作为key,并在其中存储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删除方法。
例子
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删除命令用于从 Memcached 服务器中删除现有密钥。
句法
Memcached删除命令的基本语法如下所示 -
delete key
如果成功删除该键,则返回 DELETED。如果未找到该键,则返回 NOT_FOUND,否则返回 ERROR。
例子
在这个例子中,我们使用tutorialspoint作为key,并在其中存储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删除方法。
例子
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 无法递增或递减非数字值。否则,返回ERROR 。
语法 - incr
Memcached incr命令的基本语法如下所示 -
incr key increment_value
例子
在此示例中,我们使用访问者作为键并最初将其设置为 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
语法 - 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 statslabs命令显示按slab ID组织的slab统计信息,例如大小、内存使用情况、命令、计数等。
句法
Memcached statslabs命令的基本语法如下所示 -
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 flash_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刷新方法。
例子
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