今天以代码实例的形式总结一下向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实体需注意的问题相关推荐

  1. java memcached 存储对象_java – 从Memcache中获取低级别数据存储区实体对象时的慢速反序列化...

    事实证明,检索存储内存缓存的低级数据存储实体非常缓慢.由于objectify将实体缓存为低级数据存储区实体类型,因此当使用objectify从memcache中获取许多实体时,这会导致性能不佳. 真正 ...

  2. java存储对象的数组_Java中数组可以存储对象吗?

    数组是一个容器,可以存放固定数量的项目,这些项目应该是相同的类型.大多数数据结构使用数组来实现它们的算法.以下是理解数组概念的重要术语.元素:存储在数组中的每个项目都称为元素. 索引:数组中元素的每个 ...

  3. java map存储对象_java-在ConcurrentHashMap中存储复杂对象

    根据实践中的Java Concurrency,以下代码可能引发断言错误: 如果要调用发布线程以外的线程 assertSanity,它可能会引发AssertionError public class H ...

  4. redis java hash存储对象

    前言: redis缓存的hash数据类型可以让用户将多个key-value对存储到一个redis键里,适合用来存储对象. 本文介绍在spring-redis环境上使用RedisTemplate操作对象 ...

  5. java方法传对象参数_Java方法中的参数太多,第2部分:参数对象

    java方法传对象参数 在上一篇文章中 ,我研究了与方法和构造函数的长参数列表相关的一些问题. 在那篇文章中,我讨论了用自定义类型替换基元和内置类型以提高可读性和类型安全性. 这种方法使方法或构造函数 ...

  6. html 属性存储对象,在HTML5 localStorage中存储对象

    Stringify并不能解决所有问题 似乎这里的答案并未涵盖JavaScript中可能的所有类型,因此这里有一些关于如何正确处理它们的简短示例://Objects and Arrays: var ob ...

  7. java二维对象数组存入文件_关于Java:将2D数组保存到磁盘文件

    我目前正在开发一个基本的国际象棋程序,该程序允许用户保存当前游戏并稍后再返回并从上次停止的地方接机. 唯一的问题是我不知道如何将2d数组保存到磁盘文件. 我感到更加困惑的是,该代码集需要单独写入每个值 ...

  8. java cmd找不到文件_cmd中输入java找不到文件解决方法

    很多小伙伴都需要运行java代码,但是最近很多的小伙伴都遇到了找不到文件这个问题很是棘手,那么这个问题该怎么解决呢?下面就为大家带来解决方法. cmd中输入java找不到文件怎么办: 方法一. 1.找 ...

  9. java osgi web开发_在Tomcat中使用Java Web应用程序的OSGi软件包

    我试图从Java Web应用程序调用OSGi包的方法.两者都应该在Tomcat 7上运行. 我已经写了一个正常的Java应用程序,它调用OSGi软件包中的方法,如本站所述:http://drupal. ...

最新文章

  1. 关于Tomcat性能监控的第三方工具Probe的简介
  2. BESR备份还原SERVER 2003域控制器
  3. 支持全球探测点的新一代网站监控
  4. iOS开发内购图文教程
  5. nginx ---- nginx服务器版本升级和新增模块
  6. python3.7读取csv文件_Python3 读取csv文件
  7. 两种获取python版本的方法
  8. 电线电缆行业MES解决方案
  9. c语言实验报告问题错误分析,C语言实验报告(三)
  10. 【2022最新Java面试宝典】—— Java集合面试题(52道含答案)
  11. 颠覆性创新:未来人人都可以构建一个元宇宙
  12. 记录阿里云增加二级域名步骤[同三级]
  13. “快解析”动态域名解析工具使用教程
  14. Win11电脑系统使用U盘安装的方法分享
  15. android模拟器 opengl,在Android模拟器上缺少OpenGL驱动程序
  16. 中国车联网行业市场现状分析及投资趋势预测报告2022-2028年
  17. 利用计算机开方洋葱数学,他借助“洋葱数学”实现学讲模式
  18. 自定义vbs脚本开机启动程序
  19. IP和MAC地址的区别与联系
  20. echarst环形进度,官网https://echarts.apache.org/examples/zh/index.html

热门文章

  1. Mybatis 实现SQL拦截并在控制台打印SQL和参数
  2. Ubuntu 软件包管理APT
  3. 掌握Angular2的服务(service)
  4. ubuntu系统下创建软件桌面快捷方式
  5. 新增达达设计的8个Skin
  6. 【学习笔记】22、读写文件(I/O操作)— 读文件
  7. 【转】根据起止日期+时间取数
  8. SAP与其他系统交互的方式
  9. 男篮球员特点 里约惨案就是这样造成的
  10. SAP收购Sybase意欲何为