Memcached简介
Mencached是一个自由开源的、高性能、分布式内存对象缓存系统。
Memcached是一种基于key—value键值对存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者页面渲染的结果。
本质上,它是一个简洁的key-value存储系统。
Mencached的工作原理
当应用服务器首次访问数据时,首先从数据库中查询数据,从数据库中查询出来的数据,返回给应用服务器,同时也会存储到memcached中,下次查询数据的时候先从memcached进行查询,如果缓存中有想要的数据,则直接从中取数据,如果没有想要的数据再从数据库中查询。这样极大地节省了数据查询的时间,特别是应用系统数据量比较大的时候,提高了系统的查询效率。
Memcached的一些常用指令
主要用到的指令是set指令和get指令;
set指令set(key,value);
get指令 get(key)
这两个指令一个是存值,一个是取值;
java程序使用memcached作为缓存,首先应该与memcached进行连接,然后再进行存值和取值的操作;
本地连接memcached服务:
// 本地连接 Memcached 服务
MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
// 关闭连接
mcc.shutdown();
使用set方法向memcached中存值得操作
//使用java.util.concurrent.Future 来存储数据
// 连接本地的 Memcached 服务
MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("Connection to server sucessful.");
// 存储数据
Future fo = mcc.set("runoob", 900, "Free Education");
// 查看存储状态
System.out.println("set status:" + fo.get());
// 输出值
System.out.println("runoob value in cache - " + mcc.get("runoob"));
// 关闭连接
mcc.shutdown();
使用add方法向缓存中增加一个新值得示例代码
//连接本地的 Memcached 服务
MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("Connection to server sucessful.");
// 添加第一个 key=》value 对
Future fo = mcc.set("runoob", 900, "Free Education");
// 输出执行 add 方法后的状态
System.out.println("add status:" + fo.get());
// 获取键对应的值
System.out.println("runoob value in cache - " + mcc.get("runoob"));
// 添加新的 key
fo = mcc.replace("runoob", 900, "Largest Tutorials' Library");
// 输出执行 set 方法后的状态
System.out.println("replace status:" + fo.get());
// 获取键对应的值
System.out.println("runoob value in cache - " + mcc.get("runoob"));
// 关闭连接
mcc.shutdown();
replace方法替换原有键值对中的value值 示例代码:
//连接本地的 Memcached 服务
MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("Connection to server sucessful.");
// 添加第一个 key=》value 对
Future fo = mcc.set("runoob", 900, "Free Education");
// 输出执行 add 方法后的状态
System.out.println("add status:" + fo.get());
// 获取键对应的值
System.out.println("runoob value in cache - " + mcc.get("runoob"));
// 添加新的 key
fo = mcc.replace("runoob", 900, "Largest Tutorials' Library");
// 输出执行 set 方法后的状态
System.out.println("replace status:" + fo.get());
// 获取键对应的值
System.out.println("runoob value in cache - " + mcc.get("runoob"));
// 关闭连接
mcc.shutdown();
append方法是向对应key值的value值中追加数据,就像是StringBuffer的append方法
操作示例:
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("yiibai", 900, "memcached").isDone());
//Get value from cache
System.out.println("Get from Cache:"+mcc.get("yiibai"));
// now append some data into existing key
System.out.println("Append to cache:"+mcc.append("yiibai", "redis").isDone());
// get the updated key
System.out.println("Get from Cache:"+mcc.get("yiibai"));
输出的结果如下
Connection to server successfully
set status:true
Get from Cache:memcached
Append to cache:true
Get from Cache:memcachedredis
prepend方法跟append方法相反,append方法是将数据追加到原有的数据后面,prepend方法是将数据插入到原来的数据前面
示例代码:
//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("yiibai", 900, "memcached").isDone());
//Get value from cache
System.out.println("Get from Cache:"+mcc.get("yiibai"));
// now append some data into existing key
System.out.println("Append to cache:"+mcc.prepend("yiibai", "redis").isDone());
// get the updated key
System.out.println("Get from Cache:"+mcc.get("yiibai"));
输出的结果如下:
Connection to server successfully
set status:true
Get from Cache:memcached
Append to cache:true
Get from Cache:redismemcached
memcached的add、set和replace方法的区别
方法 | 当key值存在时 | 当key值不存在时 |
---|---|---|
add | false | true |
replace | true | false |
set | true | true |