Java 使用 memcached 的简单例子 缓存

MemCached 安装日志

关键字: memcached
1、下载memcached-1.2.1.tar.gz和libevent-1.3b.tar.gz;
2、安装libevent
tar xvfz libevent-1.3b.tar.gz
cd libevent-1.3b
./configure && make
make install
3、安装memcache
tar xvfz memcached-1.2.1.tar.gz
cd memcached-1.2.1
./configure
make && make install
4、将libevent安装的/usr/local/lib输出到引用库路径
# vi ~/.bash_profile
加入如下一行:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
5、启动(安装后位置:/usr/local/bin/memcached)
memcached -d -m 128 -l 192.168.0.50 -p 11211 -u root
即以root用户,分配最大2GM内存启动memcache
memcached -d -m 128 -l 192.168.0.50 -p 11212 -u root
在另外一个端口11212启动另外一个memcache实例
 

* Created on 2006-7-24
* 连接缓存服务器
* Window - Preferences - Java - Code Style - Code Templates
*/
public class MemCacheWorkBench {

private static final String POOL_NAME = "danqoo";

private static final String CACHE_SERVER = "211.155.224.112:11211";

private static MemCachedClient client = null;

private static boolean USE_MEMCACHE_FLAG = true;

public static MemCachedClient getMemCachedClient() {
if (USE_MEMCACHE_FLAG){
if (client == null) {
String[] serverlist = { CACHE_SERVER };
SockIOPool pool = SockIOPool.getInstance(POOL_NAME);
pool.setServers(serverlist);
// 设置初始连接数、最小和最大连接数以及最大处理时间

pool.setInitConn( 5 );
pool.setMinConn( 5 );
pool.setMaxConn( 250 );
pool.setMaxIdle( 1000 * 60 * 30);
// 设置主线程的睡眠时间
pool.setMaintSleep( 30 );
// 设置TCP的参数,连接超时等
pool.setNagle( false );
//连接建立后对超时的控制
pool.setSocketTO( 3000 );
//连接建立时对超时的控制
pool.setSocketConnectTO( 0 );
pool.initialize();
client = new MemCachedClient();
// 压缩设置,超过指定大小(单位为K)的数据都会被压缩
client.setCompressEnable(true);
client.setCompressThreshold(4096);
client.setPrimitiveAsString(true);
client.setPoolName(POOL_NAME);
}
return client;
}else{
return null;
}
}

}



/*
* Created on 2006-7-24
* 单子模式实加载一个对象
* Window - Preferences - Java - Code Style - Code Templates
*/
public class MemCacheUtil {

public static String indeKey = "danqoo.index";
private static Integer OVER_TIME = 5*60*1000;
private static Log logger = LogFactory.getLog(MemCacheUtil.class);
private static MemCachedClient mc = MemCacheWorkBench.getMemCachedClient();


public static Object get(String key) {
if (mc != null && key != null && key.trim().length() > 0)
return mc.get(key);
else
return null;
}

public static void set(String key, Object value) {
if (mc != null && key != null && key.trim().length() > 0)
mc.set(key, value,new Date(OVER_TIME));//过期时间设置默认
}

public static void set(String key, Object value,Date date) {
if (mc != null && key != null && key.trim().length() > 0)
mc.set(key, value,date);
}

public static void delete(String key) {
if (mc != null && key != null && key.trim().length() > 0)
mc.delete(key);
}

public static void clear() {
if (mc != null){
mc.flushAll();
}
}

public static String createKey(String id,Map map){
StringBuffer sbuf = new StringBuffer();
sbuf.append(id);
for (Object key : map.keySet()) {
sbuf.append(".").append(key).append("=").append(map.get(key));
}
return Utilities.encodePassword(sbuf.toString(), "md5");
}

public static String createKey(String id,String paraName,String value){
StringBuffer sbuf = new StringBuffer();
sbuf.append(id).append(".").append(paraName).append("=").append(value);
return Utilities.encodePassword(sbuf.toString(), "md5");
}

public static String createKey(String id){
return Utilities.encodePassword(id.toString(), "md5");
}

}



/**
* @Dao层运用缓存机制
* @date:2008-9-17
* @time:上午09:42:03
*/
public class AdvPicDaoImpl extends SqlMapClientDaoSupport implements IAdvPicDao{

public AdvPicBean getAdvPic(int id) {

return (AdvPicBean)this.getSqlMapClientTemplate().queryForObject("advpic.getAdvPic",id);
}

public void setAdvPic(AdvPicBean bean) {
this.getSqlMapClientTemplate().insert("advpic.setAdvPic",bean);

}
public List<AdvPicBean> getAdvice(int begin,int advType,int advFileType)
{
Map map=new HashMap();
map.put("begin", begin);
map.put("adType", advType);
map.put("adFileType", advFileType);
String key = MemCacheUtil.createKey("advpic.getAdvice",map);
List<AdvPicBean> list = (List<AdvPicBean>) MemCacheUtil.get(key);
if (list == null ){
list = this.getSqlMapClientTemplate().queryForList("advpic.getAdvice",map);
MemCacheUtil.set(key, list);
}
return list;
}


public List<FLinkForm> findFLinkList(Integer num) {
// return this.getSqlMapClientTemplate().queryForList("advpic.findFLinkList",num);
String key = MemCacheUtil.createKey("advpic.findFLinkList","num",Integer.toBinaryString(num));
Object obj = MemCacheUtil.get(key);
if (obj !=null){
return (List)obj;
}else{
List value = this.getSqlMapClientTemplate().queryForList("advpic.findFLinkList",num);
MemCacheUtil.set(key, value);
return value;
}
}

public FLinkForm getAdvertiseCodeById(String id) {
return (FLinkForm)this.getSqlMapClientTemplate().queryForObject("advpic.getAdvertiseCodeById", id);
}

public WordAdBean getWordAdByKey(String key) {
return (WordAdBean)this.getSqlMapClientTemplate().queryForObject("advpic.getWordAdByKey", key);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值