memcached—Java操作Memcached实例
代码一:
package com.ghj.packageoftool; import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.management.ManagementFactory;
import java.text.SimpleDateFormat;
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();
memCachedClient.setPrimitiveAsString(true); //是否将基本类型转换为String方法
}
} private MemcachedUtils() {
} /**
* 向缓存添加键值对。注意:如果键已经存在,则之前的键对应的值将被替换。
*
* @author GaoHuanjie
*/
public static boolean set(String key, Object value) {
try {
return memCachedClient.set(key, value);
} catch (Exception e) {
MemcachedLogUtils.writeLog("Memcached set方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
return false;
}
} /**
* 向缓存添加键值对并为该键值对设定逾期时间(即多长时间后该键值对从Memcached内存缓存中删除,比如: new Date(1000*10),则表示十秒之后从Memcached内存缓存中删除)。注意:如果键已经存在,则之前的键对应的值将被替换。
*
* @author GaoHuanjie
*/
public static boolean set(String key, Object value, Date expire) {
try {
return memCachedClient.set(key, value, expire);
} catch (Exception e) {
MemcachedLogUtils.writeLog("Memcached set方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
return false;
}
} /**
* 向缓存添加键值对。注意:仅当缓存中不存在键时,才会添加成功。
*
* @author GaoHuanjie
*/
public static boolean add(String key, Object value) {
try {
if (get(key) != null) {
MemcachedLogUtils.writeLog("Memcached add方法报错,key值:" + key + "\r\n" + exceptionWrite(new Exception("Memcached内存缓存中已经存在该键值对")));
return false;
}else{
return memCachedClient.add(key, value);
}
} catch (Exception e) {
MemcachedLogUtils.writeLog("Memcached add方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
return false;
}
} /**
* 向缓存添加键值对并为该键值对设定逾期时间(即多长时间后该键值对从Memcached内存缓存中删除,比如: new Date(1000*10),则表示十秒之后从Memcached内存缓存中删除)。注意:仅当缓存中不存在键时,才会添加成功。
*
* @author GaoHuanjie
*/
public static boolean add(String key, Object value, Date expire) {
try {
if (get(key) != null) {
MemcachedLogUtils.writeLog("Memcached add方法报错,key值:" + key + "\r\n" + exceptionWrite(new Exception("Memcached内存缓存中已经存在该键值对")));
return false;
}else{
return memCachedClient.add(key, value, expire);
}
} catch (Exception e) {
MemcachedLogUtils.writeLog("Memcached add方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
return false;
}
} /**
* 根据键来替换Memcached内存缓存中已有的对应的值。注意:只有该键存在时,才会替换键相应的值。
*
* @author GaoHuanjie
*/
public static boolean replace(String key, Object newValue) {
try {
return memCachedClient.replace(key, newValue);
} catch (Exception e) {
MemcachedLogUtils.writeLog("Memcached replace方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
return false;
}
} /**
* 根据键来替换Memcached内存缓存中已有的对应的值并设置逾期时间(即多长时间后该键值对从Memcached内存缓存中删除,比如: new Date(1000*10),则表示十秒之后从Memcached内存缓存中删除)。注意:只有该键存在时,才会替换键相应的值。
*
* @author GaoHuanjie
*/
public static boolean replace(String key, Object newValue, Date expireDate) {
try {
return memCachedClient.replace(key, newValue, expireDate);
} catch (Exception e) {
MemcachedLogUtils.writeLog("Memcached replace方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
return false;
}
} /**
* 根据键获取Memcached内存缓存管理系统中相应的值
*
* @author GaoHuanjie
*/
public static Object get(String key) {
try {
return memCachedClient.get(key);
} catch (Exception e) {
MemcachedLogUtils.writeLog("Memcached get方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
return null;
}
} /**
* 根据键删除memcached中的键/值对
*
* @author GaoHuanjie
*/
public static boolean delete(String key) {
try {
return memCachedClient.delete(key);
} catch (Exception e) {
MemcachedLogUtils.writeLog("Memcached delete方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
return false;
}
} /**
* 根据键和逾期时间(例如:new Date(1000*10):十秒后过期)删除 memcached中的键/值对
*
* @author GaoHuanjie
*/
public static boolean delete(String key, Date expireDate) {
try {
return memCachedClient.delete(key, expireDate);
} catch (Exception e) {
MemcachedLogUtils.writeLog("Memcached delete方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
return false;
}
} /**
* 清理缓存中的所有键/值对
*
* @author GaoHuanjie
*/
public static boolean flashAll() {
try {
return memCachedClient.flushAll();
} catch (Exception e) {
MemcachedLogUtils.writeLog("Memcached flashAll方法报错\r\n" + exceptionWrite(e));
return false;
}
} /**
* 返回String类型的异常栈信息
*
* @author GaoHuanjie
*/
private static String exceptionWrite(Exception exception) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
exception.printStackTrace(printWriter);
printWriter.flush();
return stringWriter.toString();
} /**
* Memcached日志记录工具
*
* @author GaoHuanjie
*/
private static class MemcachedLogUtils { private static FileWriter fileWriter;
private static BufferedWriter logWrite;
private final static String PID = ManagementFactory.getRuntimeMXBean().getName();// 通过找到对应的JVM进程获取PID /**
* 初始化Memcached日志写入流
*
* @author GaoHuanjie
*/
static {
try {
String osName = System.getProperty("os.name");
if (osName.contains("Windows")) {
fileWriter = new FileWriter("D:\\memcached.log", true);
} else {
fileWriter = new FileWriter("/usr/local/logs/memcached.log", true);
}
logWrite = new BufferedWriter(fileWriter);
} catch (IOException iOException) {
iOException.printStackTrace();
try {
if (fileWriter != null) {
fileWriter.close();
}
if (logWrite != null) {
logWrite.close();
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
} /**
* 写入日志信息
*
* @author GaoHuanjie
*/
public static void writeLog(String logContent) {
try {
logWrite.write("[" + PID + "] " + "- [" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "]\r\n" + logContent);
logWrite.newLine();
logWrite.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
代码二:
package com.ghj.packageofclient;
import java.util.Date;
import junit.framework.TestCase;
import com.ghj.packageoftool.MemcachedUtils;
public class Client extends TestCase{
/**
* 测试MemcachedUtils类的set方法。
*
* @author GaoHuanjie
*/
public static void testSet1() {
MemcachedUtils.set("set1Description", "调用MemcachedUtils类的set方法,没有设置键值对的存在时长");
System.out.println(MemcachedUtils.get("set1Description").toString());
}
/**
* 测试MemcachedUtils类的set方法。
*
* @author GaoHuanjie
*/
public static void testSet2() {
MemcachedUtils.set("set2Description", "调用MemcachedUtils类的set方法,设置了键值对的存在时长——存在60秒", new Date(1000*60));
System.out.println(MemcachedUtils.get("set2Description").toString());
}
/**
* 测试MemcachedUtils类的add方法。
*
* @author GaoHuanjie
*/
public static void testAdd1() {
MemcachedUtils.add("add1Description", "调用MemcachedUtils类的add方法,没有设置键值对的存在时长");
System.out.println(MemcachedUtils.get("add1Description").toString());
}
/**
* 测试MemcachedUtils类的add方法。
*
* @author GaoHuanjie
*/
public static void testAdd2() {
MemcachedUtils.add("add2Description", "调用MemcachedUtils类的add方法,设置了键值对的存在时长——存在60秒", new Date(1000*60));
System.out.println(MemcachedUtils.get("add2Description").toString());
}
/**
* 测试MemcachedUtils类的replace方法。
*
* @author GaoHuanjie
*/
public static void testReplace1() {
MemcachedUtils.add("replace1Description", "调用MemcachedUtils类的replace方法,没有设置键值对的存在时长");
MemcachedUtils.replace("replace1Description", "值改变了!!!");
System.out.println(MemcachedUtils.get("replace1Description").toString());
}
/**
* 测试MemcachedUtils类的replace方法。
*
* @author GaoHuanjie
*/
public static void testReplace2() {
MemcachedUtils.add("replace2Description", "调用MemcachedUtils类的replace方法,设置了键值对的存在时长——存在60秒", new Date(1000*60));
MemcachedUtils.replace("replace2Description", "值改变了!!!", new Date(1000*60));
System.out.println(MemcachedUtils.get("replace2Description").toString());
}
/**
* 测试MemcachedUtils类的get方法。
*
* @author GaoHuanjie
*/
public static void testGet() {
MemcachedUtils.add("getDescription", "调用MemcachedUtils类的get方法,没有设置键值对的存在时长");
System.out.println(MemcachedUtils.get("getDescription").toString());
}
/**
* 测试MemcachedUtils类的delete方法。
*
* @author GaoHuanjie
*/
public static void testDelete1() {
MemcachedUtils.add("delete1Description", "调用MemcachedUtils类的delete方法,没有设置键值对的逾期时长");
MemcachedUtils.delete("delete1Description");
assertEquals(null, MemcachedUtils.get("delete1Description"));
}
/**
* 测试MemcachedUtils类的delete方法。
*
* @author GaoHuanjie
*/
public static void testDelete2() {
MemcachedUtils.set("delete2Description1", "调用MemcachedUtils类的delete方法,设置键值对的逾期时长", new Date(600*1000));
MemcachedUtils.delete("delete2Description1", new Date(1000*600));
assertEquals(null, MemcachedUtils.get("delete2Description1"));
}
/**
* 测试MemcachedUtils类的flashAll方法。
*
* @author GaoHuanjie
*/
public static void testFlashAll() {
MemcachedUtils.add("flashAllDescription", "调用MemcachedUtils类的delete方法,没有设置键值对的预期时长");
MemcachedUtils.flashAll();
assertEquals(null, MemcachedUtils.get("flashAllDescription"));
}
}
memcached—Java操作Memcached实例的更多相关文章
- Java操作Memcached
本文复制其他播客,有好的技术文章希望各位大神能告知... 谢谢. 如何使用Java操作Memcached实例: 代码一: package com.ghj.packageoftool; import j ...
- java操作Hbase实例
所用HBase版本为1.1.2,hadoop版本为2.4 /* * 创建一个students表,并进行相关操作 */ import java.io.IOException; import java.u ...
- Java操作memcached(一)
Memcached事实上,两次Hash算法 第一次hash算法被用于定位Memcached示例 第二次hash算法是底部HashMap中间hash算法 Hash算法 1.依据余数 ...
- java操作hdfs实例
环境:window7+eclipse+vmware虚拟机+搭建好的hadoop环境(master.slave01.slave02) 内容:主要是在windows环境下,利用eclipse如何来操作hd ...
- Memcached Java Client API详解
针对Memcached官方网站提供的java_memcached-release_2.0.1版本进行阅读分析,Memcached Java客户端lib库主要提供的调用类是SockIOPool和MemC ...
- Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用
介绍 Memcached java client是官方推荐的最早的memcached java客户端.最新版本:java_memcached-release_2.6.1. 官方下载地址:http ...
- 分布式缓存技术memcached学习(五)—— memcached java客户端的使用
Memcached的客户端简介 我们已经知道,memcached是一套分布式的缓存系统,memcached的服务端只是缓存数据的地方,并不能实现分布式,而memcached的客户端才是实现分布式的地方 ...
- Python操作memcached及redis
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- Memcache笔记03-php操作Memcached
通过php程序操作Memcached服务几种形式 Memcache 扩展 Memcached 扩展 Socket套接字操作 memcached-client.php(函数) 对于php扩展来说,dan ...
随机推荐
- wireshark 无线抓包
1)抓取无线网卡的数据包(类似有线,仅抓取本网卡的数据包,适用与windows,linux) 1. 打开菜单项“Capture”下的子菜单“Capture Options”选项: 2. 找到设置面 ...
- alsa音频播放过程中的基本概念
以下为 ALSA-Project/FramesPeriods[1] 学习笔记 1, sample_rate: 即每秒进行多少次采样,常见的比如 8000.16000.44100和48000等 2, s ...
- AJ的笔记之上拉电阻的工作原理分析
第二章:聊一聊上拉电阻的工作原理 **********本文所采用的单片机是:STC89C52RC系******************** [重点提要]其实,理解上拉电阻的原理,关键是理解这两个词:锁 ...
- linux使用"userdel 用户名“删除用户的解决办法
在新建用户的时候我们可以忽略掉给用户分组的信息,而直接使用“useradd 用户名” 来直接添加新用户,所以由此想到删除用户能不能直接使用“userdel 用户名”来删除用户呢?回答是否定的,如此会残 ...
- 使用gulp和browser-sync实现浏览器自动刷新
安装gulp (前提是已经安装了node) 全局安装: npm install -g gulp 本项目安装: npm install gulp --save-dev 安装browser-sync 全局 ...
- C# DataView数据处理的几种方法
1.找到刚删除的所有列 DataView dv = dt.DefaultView; dv.Delete(); dv.Delete(); //找出所有刚删除掉的行 1.5 dv.RowStateFilt ...
- ubutu16.04 安装Tenda u12无线网卡驱动
ubutu16.04 安装Tenda u12无线网卡驱动 一些问题: 1) Tenda u12 linux版本的驱动支持 kernel 2.6 到 4.4,而前系统内版本核为4.10,所以编译不过去啦 ...
- js入门 关于js属性及其数据类型(详解)
1. js的本质就是处理数据.数据来自于后台的数据库. 所以变量就起到一个临时存储数据的作用. ECMAScript制定了js的数据类型. 数据类型有哪些? 1. 字符串 String 2. 数字 ...
- VMware Workstation Pro 安装win7系统
1.准备工作VMware Workstation Pro 虚拟机软件cn_windows_7_enterprise_x64_dvd_x15-70741.iso2.选择典型(推荐)(T) 单选按钮 3. ...
- 动画讲解TCP的3次握手,4次挥手
https://mp.weixin.qq.com/s/TUBhH_lJe6M4KgAZO-rP2A TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一.很多读者都知道三次和四次,但是如果问深入 ...