java memcached 存储对象_memcached—向memcached中保存Java实体需注意的问题
今天以代碼實(shí)例的形式總結(jié)一下向memcached中保存Java實(shí)體需注意的問題:
memcached工具類代碼:
package com.ghj.packageoftool;
import java.util.Date;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
/**
* Memcached工具類
*
* @author GaoHuanjie
*/
public class MemcachedUtils {
private static MemCachedClient memCachedClient;
static {
/************************************配置Memcached**************************************/
SockIOPool sockIOPool = SockIOPool.getInstance();
sockIOPool.setServers(new String[]{"127.0.0.1:11211"});//設(shè)置memcachedserver地址
sockIOPool.setWeights(new Integer[]{3}); //設(shè)置每一個(gè)MemCachedserver權(quán)重
sockIOPool.setFailover(true); //當(dāng)一個(gè)memcachedserver失效的時(shí)候是否去連接還有一個(gè)memcachedserver.
sockIOPool.setInitConn(10); //初始化時(shí)對(duì)每一個(gè)server建立的連接數(shù)目
sockIOPool.setMinConn(10); //每一個(gè)server建立最小的連接數(shù)
sockIOPool.setMaxConn(100); //每一個(gè)server建立最大的連接數(shù)
sockIOPool.setMaintSleep(30); //自查線程周期進(jìn)行工作,其每次休眠時(shí)間
sockIOPool.setNagle(false); //Socket的參數(shù),假設(shè)是true在寫數(shù)據(jù)時(shí)不緩沖,馬上發(fā)送出去。Tcp的規(guī)則是在發(fā)送一個(gè)包之前,包的發(fā)送方會(huì)等待遠(yuǎn)程接收方確認(rèn)已收到上一次發(fā)送過來的包;這種方法就能夠關(guān)閉套接字的緩存——包準(zhǔn)備馬上發(fā)出。
sockIOPool.setSocketTO(3000); //Socket堵塞讀取數(shù)據(jù)的超時(shí)時(shí)間
sockIOPool.setAliveCheck(true);//設(shè)置是否檢查memcachedserver是否失效
sockIOPool.setMaxIdle(1000*30*30); // 設(shè)置最大處理時(shí)間
sockIOPool.setSocketConnectTO(0); //連接建立時(shí)對(duì)超時(shí)的控制
sockIOPool.initialize(); // 初始化連接池
if (memCachedClient == null){
memCachedClient = new MemCachedClient();
}
}
private MemcachedUtils() {
}
/**
* 向緩存加入鍵值對(duì)并為該鍵值對(duì)設(shè)定逾期時(shí)間(即多長(zhǎng)時(shí)間后該鍵值對(duì)從Memcached內(nèi)存緩存中刪除,比方: new Date(1000*10),則表示十秒之后從Memcached內(nèi)存緩存中刪除)。
*
* @author GaoHuanjie
*/
public static boolean add(String key, Object value, Date expire) {
try {
return memCachedClient.add(key, value, expire);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 依據(jù)鍵獲取Memcached內(nèi)存緩存管理系統(tǒng)中對(duì)應(yīng)的值
*
* @author GaoHuanjie
*/
public static Object get(String key) {
try {
return memCachedClient.get(key);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}? ? ? ? ?測(cè)試main方法所在類代碼:
package com.ghj.packageofclient;
import java.util.Date;
import com.ghj.packageoftool.MemcachedUtils;
import com.ghj.packageofvo.User;
public class Client{
public static void main(String[] args) {
MemcachedUtils.add("user", new User("liunannan", "liunannan@jd"), new Date(1000*60));//向Memcached中加入一個(gè)序列化的對(duì)象
User user = (User)(MemcachedUtils.get("user"));
System.err.println("username:"+user.getUserName() + ",密碼:" + user.getPassword());
}
}? ? ? ? ?Java實(shí)體代碼:
package com.ghj.packageofvo;
/**
* 用戶業(yè)務(wù)bean
*
* @author 高煥杰
*/
public class User{
private String userName;
private String password;
public User(String userName, String password) {
super();
this.userName = userName;
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}? ? ? ? 執(zhí)行main方法,你將看到例如以下異常:
稍有Java基礎(chǔ)的人一看便知:之所以出現(xiàn)這個(gè)問題全然是因?yàn)镴ava實(shí)體User類沒有實(shí)例化造成的,所以User類應(yīng)該改成例如以下代碼:
package com.ghj.packageofvo;
import java.io.Serializable;
/**
* 用戶業(yè)務(wù)bean
*
* @author 高煥杰
*/
public class User implements Serializable{
private static final long serialVersionUID = -3371451210123762490L;
private String userName;
private String password;
public User(String userName, String password) {
super();
this.userName = userName;
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}? ? ? ? 【
總結(jié)
以上是生活随笔為你收集整理的java memcached 存储对象_memcached—向memcached中保存Java实体需注意的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java字面量 方法区_(一)java的
- 下一篇: Java oracle查询语句无法赋值给