Memcached簡介
Mencached是一個自由開源的竭沫、高性能伙判、分布式內存對象緩存系統(tǒng)阵谚。
Memcached是一種基于key—value鍵值對存儲钞翔,用來存儲小塊的任意數據(字符串口叙、對象)。這些數據可以是數據庫調用嗅战、API調用或者頁面渲染的結果妄田。
本質上,它是一個簡潔的key-value存儲系統(tǒng)驮捍。
Mencached的工作原理
當應用服務器首次訪問數據時疟呐,首先從數據庫中查詢數據,從數據庫中查詢出來的數據东且,返回給應用服務器启具,同時也會存儲到memcached中,下次查詢數據的時候先從memcached進行查詢珊泳,如果緩存中有想要的數據鲁冯,則直接從中取數據,如果沒有想要的數據再從數據庫中查詢色查。這樣極大地節(jié)省了數據查詢的時間薯演,特別是應用系統(tǒng)數據量比較大的時候,提高了系統(tǒng)的查詢效率秧了。
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");
// 查看存儲狀態(tài)
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");
// 輸出執(zhí)行 add 方法后的狀態(tài)
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");
// 輸出執(zhí)行 set 方法后的狀態(tài)
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");
// 輸出執(zhí)行 add 方法后的狀態(tài)
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");
// 輸出執(zhí)行 set 方法后的狀態(tài)
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方法的區(qū)別
方法 | 當key值存在時 | 當key值不存在時 |
---|---|---|
add | false | true |
replace | true | false |
set | true | true |