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"});//设置memcached服务器地址
         sockIOPool.setWeights(new Integer[]{3}); 				//设置每个MemCached服务器权重
         sockIOPool.setFailover(true);  						//当一个memcached服务器失效的时候是否去连接另一个memcached服务器.
         sockIOPool.setInitConn(10);    						//初始化时对每个服务器建立的连接数目
         sockIOPool.setMinConn(10);     						//每个服务器建立最小的连接数
         sockIOPool.setMaxConn(100);    						//每个服务器建立最大的连接数
         sockIOPool.setMaintSleep(30);  						//自查线程周期进行工作,其每次休眠时间
         sockIOPool.setNagle(false);    						//Socket的参数,如果是true在写数据时不缓冲,立即发送出去。Tcp的规则是在发送一个包之前,包的发送方会等待远程接收方确认已收到上一次发送过来的包;这个方法就可以关闭套接字的缓存——包准备立即发出。
         sockIOPool.setSocketTO(3000);  						//Socket阻塞读取数据的超时时间
         sockIOPool.setAliveCheck(true);						//设置是否检查memcached服务器是否失效
         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", "[email protected]"), new Date(1000*60));//向Memcached中添加一个序列化的对象
		User user = (User)(MemcachedUtils.get("user"));
		System.err.println("用户名:"+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;
	}
}

0分下载工程代码

时间: 2024-08-24 03:30:35

memcached—向memcached中保存Java实体需注意的问题的相关文章

EBS OAF开发中的Java 实体对象(Entity Object)验证功能补充

(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) EO理论上是只有产品组维护,里面包含其所有的业务逻辑,并提供相应的Expert给自己或者其它产品组使用.而VO是各个组根据需要或基于EO或者只读的SQL而建立的,里面可以根据需要添加自己的业务实现和逻辑. 对于EO内部的验证功能,在开发文档中主要介绍了三种: 1. 在setter里面实现单个属性的验证.这主要是对于没有依赖关系的属性,也就是说它的验证不需要其它会被修改的属性的支持.比如,验证

在MySQL中保存Java对象

需要在MySQL中保存Java对象. 说明: 对象必须实现序列化 MySQL中对应字段设置为blob 将Java对象序列化为byte[] public static byte[] obj2byte(Object obj) throws Exception { byte[] ret = null; ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputSt

面试中关于Java你所需知道的的一切

本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么? (1)boolean boolean数据类型非true即false.这个数据类型表示1 bit的信息,但是它的大小并没有精确定义. <Java虚拟机规范>中如是说:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持.在Java虚拟机中没有任何供

【转载】Memcached在.Net中的基本操作

一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有:Perl.PHP.Python.Ruby.C#.C/C++以及Lua等. 那么,我们作为.Net码农,自然是使用C#.既然Memcached客户端有.Net版,那我们就去下载一个来试试. 下载文件:http://pan.baidu.com/s/1w9Q8I memcached clientlib项目

Memcached在.net中的应用

一,MemCached下载 服务端下载:http://memcachedproviders.codeplex.com/ 客户端下载:http://sourceforge.net/p/memcacheddotnet/code/HEAD/tarball?path=/trunk 二,服务端的安装及配置 1)        解压缩文件到c:\memcached(也可以选择任意位置) 2)        命令行输入 'c:\memcached\memcached.exe -d install' 3)   

memcached(2)常用语法与java连接服务

memcached常用语法及java使用方式 Author:SimpleWu Memcached 存储命令 Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中. 如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用. set key flags exptime bytes [noreply] value Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中. 如果 add 的

memcache和memcached在php中的应用

memcache在php中编译 #  wget http://www.lishiming.net/data/attachment/forum/memcache-2.2.3.tgz # tar zxvf memcache-2.2.3.tgz # cd memcache-2.2.3 # /usr/local/php/bin/phpize # ./configure --with-php-config=/usr/local/php/bin/php-config # make # make instal

Memcached在企业中的应用

Memcached简介 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件.现在已成为mixi.hatena.Facebook.Vox.LiveJournal等众多服务中提高Web应用扩展性的重要因素. Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串.对象).这些数据可以是数据库调用.API调用或者是

Java中entity(实体类)的写法规范

在日常的Java项目开发中,entity(实体类)是必不可少的,它们一般都有很多的属性,并有相应的setter和getter方法.entity(实体类)的作用一般是和数据表做映射.所以快速写出规范的entity(实体类)是java开发中一项必不可少的技能. 在项目中写实体类一般遵循下面的规范: 1.根据你的设计,定义一组你需要的私有属性. 2.根据这些属性,创建它们的setter和getter方法.(eclipse等集成开发软件可以自动生成.具体怎么生成?请自行百度.) 3.提供带参数的构造器和