java memcached 存储对象_memcached—向memcached中保存Java实体需注意的问题
今天以代碼實例的形式總結一下向memcached中保存Java實體需注意的問題:
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"});//設置memcachedserver地址
sockIOPool.setWeights(new Integer[]{3}); //設置每一個MemCachedserver權重
sockIOPool.setFailover(true); //當一個memcachedserver失效的時候是否去連接還有一個memcachedserver.
sockIOPool.setInitConn(10); //初始化時對每一個server建立的連接數目
sockIOPool.setMinConn(10); //每一個server建立最小的連接數
sockIOPool.setMaxConn(100); //每一個server建立最大的連接數
sockIOPool.setMaintSleep(30); //自查線程周期進行工作,其每次休眠時間
sockIOPool.setNagle(false); //Socket的參數,假設是true在寫數據時不緩沖,馬上發送出去。Tcp的規則是在發送一個包之前,包的發送方會等待遠程接收方確認已收到上一次發送過來的包;這種方法就能夠關閉套接字的緩存——包準備馬上發出。
sockIOPool.setSocketTO(3000); //Socket堵塞讀取數據的超時時間
sockIOPool.setAliveCheck(true);//設置是否檢查memcachedserver是否失效
sockIOPool.setMaxIdle(1000*30*30); // 設置最大處理時間
sockIOPool.setSocketConnectTO(0); //連接建立時對超時的控制
sockIOPool.initialize(); // 初始化連接池
if (memCachedClient == null){
memCachedClient = new MemCachedClient();
}
}
private MemcachedUtils() {
}
/**
* 向緩存加入鍵值對并為該鍵值對設定逾期時間(即多長時間后該鍵值對從Memcached內存緩存中刪除,比方: new Date(1000*10),則表示十秒之后從Memcached內存緩存中刪除)。
*
* @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;
}
}
/**
* 依據鍵獲取Memcached內存緩存管理系統中對應的值
*
* @author GaoHuanjie
*/
public static Object get(String key) {
try {
return memCachedClient.get(key);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}? ? ? ? ?測試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中加入一個序列化的對象
User user = (User)(MemcachedUtils.get("user"));
System.err.println("username:"+user.getUserName() + ",密碼:" + user.getPassword());
}
}? ? ? ? ?Java實體代碼:
package com.ghj.packageofvo;
/**
* 用戶業務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;
}
}? ? ? ? 執行main方法,你將看到例如以下異常:
稍有Java基礎的人一看便知:之所以出現這個問題全然是因為Java實體User類沒有實例化造成的,所以User類應該改成例如以下代碼:
package com.ghj.packageofvo;
import java.io.Serializable;
/**
* 用戶業務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;
}
}? ? ? ? 【
總結
以上是生活随笔為你收集整理的java memcached 存储对象_memcached—向memcached中保存Java实体需注意的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java字面量 方法区_(一)java的
- 下一篇: Java oracle查询语句无法赋值给