用泛型实现了memcache各种适合各种类型的批量插入等。
package com.payeco.memcache; import java.lang.reflect.Field; import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.logging.Logger; import com.danga.MemCached.MemCachedClient; import com.danga.MemCached.SockIOPool; public class MemcacheClient extends MemCachedClient{ private static final Logger log=Logger.getLogger(MemcacheClient.class.getName()); private static boolean status=false; /** * 初始化memcache管理客户端和服务器通讯连接池 * @param servers 设置memcache连接池可用的cache服务器列表 * @param weights 设置连接池可用cache服务器的权重 * @param initConn 设置开始时每个cache服务器的可用连接数 * @param minConn 设置每个服务器最少可用连接数 * @param maxConn 设置每个服务器最大可用连接数 * @param maxIdle 设置可用连接池的最长等待时间 * @param maintSleep 设置连接池维护线程的睡眠时间 * @param nagle 设置是否使用Nagle算法,当通讯数据量通常都比较大(相对TCP控制数据)而且要求响应及时,因此该值需要设置为false * @param socketto 设置socket的读取等待超时值 * @param socketConnectTo 设置socket的连接等待超时值 * @return 是否初始化成功 */ public boolean init(String[] servers,Integer[] weights,int initConn,int minConn,int maxConn,int maxIdle,int maintSleep,boolean nagle,int socketto,int socketConnectTo){ try { SockIOPool pool=SockIOPool.getInstance(); pool.setServers(servers); pool.setWeights(weights); pool.setInitConn(initConn); pool.setMinConn(minConn); pool.setMaxConn(maxConn); pool.setMaxIdle(maxIdle); pool.setMaintSleep(maintSleep); pool.setNagle(nagle); pool.setSocketTO(socketto); pool.setSocketConnectTO(socketConnectTo); pool.initialize(); status=true; } catch (Exception e) { status=false; log.severe("Memcache Init() failure!"); e.printStackTrace(); } return status; } /** * 批量插入(字符串数组) * @param key key的数组 * @param value value的数组 * @return 插入是否成功 */ public <T> boolean set(String[] key,T[] value) { boolean set=false; int min=0; if (status==false) { log.warning("memcache未初始化!请先初始化在做此操作"); return set; } if (key.length==0 || value.length==0) { log.warning("插入的数据长度不能小于或等于0!"); return set; } if (key.length>value.length) { min=value.length; }else if (key.length<value.length) { min=key.length; }else { min=key.length; } MemcacheClient client=new MemcacheClient(); try { for (int i = 0; i < min; i++) { if (key[i].getBytes().length>250 || (value[i].toString().getBytes().length + key[i].getBytes().length) > (1024*1024)) { log.warning("memcache对存储值有限制key为250个字节,key+value为1m!"); } client.set(key[i], value[i]); } set=true; } catch (Exception e) { set=false; log.severe("插入失败!"); e.printStackTrace(); } return set; } /** * 批量插入(List数组和字符串数组) * @param key key的数组 * @param value value的数组 * @return 插入是否成功 */ public <T> boolean set(List<String> key,T[] value) { boolean set=false; int min=0; if (status==false) { log.warning("memcache未初始化!请先初始化在做此操作"); return set; } if (key.size()==0 || value.length==0) { log.warning("插入的数据长度不能小于或等于0!"); return set; } if (key.size()>value.length) { min=value.length; }else if (key.size()<value.length) { min=key.size(); }else { min=key.size(); } MemcacheClient client=new MemcacheClient(); try { for (int i = 0; i < min; i++) { if (key.get(i).getBytes().length>250 || (value[i].toString().getBytes().length + key.get(i).getBytes().length) > (1024*1024)) { log.warning("memcache对存储值有限制key为250个字节,key+value为1m!"); } client.set(key.get(i), value[i]); } set=true; } catch (Exception e) { set=false; log.severe("插入失败!"); e.printStackTrace(); } return set; } /** * 批量插入(字符串数组和List数组) * @param key key的数组 * @param value List的数组 * @return 插入是否成功 */ public <T> boolean set(String[] key,List<T> value) { boolean set=false; int min=0; if (status==false) { log.warning("memcache未初始化!请先初始化在做此操作"); return set; } if (key.length==0 || value.size()==0) { log.warning("插入的数据长度不能小于或等于0!"); return set; } if (key.length>value.size()) { min=value.size(); }else if (key.length<value.size()) { min=key.length; }else { min=key.length; } MemcacheClient client=new MemcacheClient(); try { for (int i = 0; i < min; i++) { if (key[i].getBytes().length>250 || (value.get(i).toString().getBytes().length + key[i].getBytes().length) > (1024*1024)) { log.warning("memcache对存储值有限制key为250个字节,key+value为1m!"); } client.set(key[i], value.get(i)); } set=true; } catch (Exception e) { set=false; log.severe("插入失败!"); e.printStackTrace(); } return set; } /** * 批量插入(List集合) * @param key key的数组 * @param value value的数组 * @return 插入是否成功 */ public <T> boolean set(List<String> key,List<T> value) { boolean set=false; int min=0; if (status==false) { log.warning("memcache未初始化!请先初始化在做此操作"); return set; } if (key.size()==0 || value.size()==0) { log.warning("插入的数据长度不能小于或等于0!"); return set; } if (key.size()>value.size()) { min=value.size(); }else if (key.size()<value.size()) { min=key.size(); }else { min=key.size(); } MemcacheClient client=new MemcacheClient(); try { for (int i = 0; i < min; i++) { if (key.get(i).getBytes().length>250 || (value.get(i).toString().getBytes().length + key.get(i).getBytes().length) > (1024*1024)) { log.warning("memcache对存储值有限制key为250个字节,key+value为1m!"); } client.set(key.get(i), value.get(i)); } set=true; } catch (Exception e) { set=false; log.severe("插入失败!"); e.printStackTrace(); } return set; } /** * 批量插入(map集合) * @param key key的数组 * @param value value的数组 * @return 插入是否成功 */ public <T> boolean set(Map<String,T> map) { boolean set=false; if (status==false) { log.warning("memcache未初始化!请先初始化在做此操作"); return set; } if (map.size()==0) { log.warning("插入的数据长度不能小于或等于0!"); return set; } MemcacheClient client=new MemcacheClient(); try { for (Map.Entry<String, T> m : map.entrySet()) { if (!m.getKey().equals("") && m.getValue().equals("")) { if (m.getKey().getBytes().length>250 || (m.getValue().toString().getBytes().length + m.getKey().getBytes().length) > (1024*1024)) { log.warning("memcache对存储值有限制key为250个字节,key+value为1m!"); } client.set(m.getKey(), m.getValue()); } } set=true; } catch (Exception e) { set=false; log.severe("插入失败!"); e.printStackTrace(); } return set; } /** * 批量删除(字符串集合) * @param key key的数组 * @param value value的数组 * @return 删除是否成功 */ public <T> boolean delete(String[] key) { boolean set=false; if (status==false) { log.warning("memcache未初始化!请先初始化在做此操作"); return set; } if (key.length==0) { log.warning("删除的数据长度不能小于或等于0!"); return set; } MemcacheClient client=new MemcacheClient(); try { for (int i = 0; i < key.length; i++) { if (key[i].getBytes().length>250) { log.warning("memcache对存储值有限制key为250个字节,key+value为1m!"); } client.delete(key[i]); } set=true; } catch (Exception e) { set=false; log.severe("删除失败!"); e.printStackTrace(); } return set; } /** * 批量删除(list集合) * @param key key的数组 * @param value value的数组 * @return 删除是否成功 */ public <T> boolean delete(List<String> key) { boolean set=false; if (status==false) { log.warning("memcache未初始化!请先初始化在做此操作"); return set; } if (key.size()==0) { log.warning("删除的数据长度不能小于或等于0!"); return set; } MemcacheClient client=new MemcacheClient(); try { for (int i = 0; i < key.size(); i++) { if (key.get(i).getBytes().length>250) { log.warning("memcache对存储值有限制key为250个字节,key+value为1m!"); } client.delete(key.get(i)); } set=true; } catch (Exception e) { set=false; log.severe("删除失败!"); e.printStackTrace(); } return set; } /** * 批量删除(list集合) * @param key key的数组 * @param value value的数组 * @return 删除是否成功 */ public <T> boolean delete(Map<String,T> map) { boolean set=false; if (status==false) { log.warning("memcache未初始化!请先初始化在做此操作"); return set; } if (map.size()==0) { log.warning("删除的数据长度不能小于或等于0!"); return set; } MemcacheClient client=new MemcacheClient(); try { for (Map.Entry<String, T> m : map.entrySet()) { if (m.getKey().getBytes().length>250) { log.warning("memcache对存储值有限制key为250个字节,key+value为1m!"); } client.delete(m.getKey()); } set=true; } catch (Exception e) { set=false; log.severe("删除失败!"); e.printStackTrace(); } return set; } public static void main(String[] args) { MemcacheClient client=new MemcacheClient(); String[] servers={"10.123.1.12:12000"}; Integer[] weights={3}; int initConn=5; int minConn=5; int maxConn=250; int maxIdle=1000*60*60*6; int maintSleep=30; boolean nagle=false; int socketto=3000; int socketConnectTo=0; client.init(servers, weights, initConn, minConn, maxConn, maxIdle, maintSleep, nagle, socketto, socketConnectTo); //字符串数组添加 String[] key={"zz","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; String[] value={"测试zz","测试a","测试b","测试c","测试d","测试e","测试f","测试g","测试h","测试i","测试j","测试k","测试l","测试m","测试n","测试o","测试p","测试q","测试r","测试s","测试t","测试u","测试v","测试w","测试x","测试y","测试z"}; log.info("...."+key.length); log.info("..."+value.length); //boolean add= client.set(key, value); //System.out.println("插入状态:"+add); String[] gets={"a","b","c","d","e","zz"}; System.out.println("字符串插入后查询:"+client.getMulti(gets)); //对象添加 //String[] entitykey={"a","b","c","d","e","f","g","h","i","j","k"}; //client.delete(entitykey); String[] keyentity={"aa","bb","cc","dd","ee","ff","gg","hh","ii","jj","kk"}; List<StudentDemo> list=new ArrayList<StudentDemo>(); StudentDemo demo=null; for (int i = 0; i < 10; i++) { try { demo=new StudentDemo(); demo.setId(i); demo.setName("测试"+i); demo.setSex("男"); demo.setAge(23); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse("1992-"+(i+1)+"-05"); Timestamp timestamp=new Timestamp(date.getTime()); demo.setBirthday(timestamp); list.add(demo); } catch (ParseException e) { e.printStackTrace(); } } client.set(keyentity,list); String[] li={"aa","bb","cc","kk"}; System.out.println("对象插入后查询:"+client.getMulti(li)); Map<String, Object> mapentity=client.getMulti(li); for (Map.Entry<String, Object> string : mapentity.entrySet()) { System.out.println("key-->"+string.getKey()); if (string.getValue() instanceof StudentDemo) { StudentDemo student=(StudentDemo) string.getValue(); System.out.println(student.getId()+"<--value-->"+student); } } //list添加 List<String> keylist=new ArrayList<String>(); keylist.add("seta"); keylist.add("setb"); keylist.add("setd"); keylist.add("sete"); keylist.add("setf"); keylist.add("setg"); keylist.add("seth"); keylist.add("seti"); keylist.add("setj"); keylist.add("setk"); List<Object> valuelist=new ArrayList<Object>(); valuelist.add("测试add1"); valuelist.add("测试add2"); valuelist.add("测试add3"); valuelist.add("测试add4"); valuelist.add("测试add5"); valuelist.add("测试add6"); valuelist.add("测试add7"); valuelist.add("测试add8"); valuelist.add("测试add9"); valuelist.add("测试add10"); //boolean addlist=client.set(keylist, valuelist); //log.info("list添加状态:"+addlist); String[] get={"seta","setb","setc","setd","sete","setzz"}; System.out.println("list插入后查询的结果:"+client.getMulti(get)); //map添加 Map<String, Object> map=new HashMap<String, Object>(); map.put("adda", "测试1"); map.put("addb", "测试2"); map.put("addc", "测试3"); map.put("addd", "测试4"); map.put("adde", "测试5"); map.put("addf", "测试6"); map.put("addg", "测试7"); map.put("addh", "测试8"); map.put("addi", "测试9"); map.put("addj", "测试10"); map.put("addk", "测试11"); map.put("addl", "测试12"); //boolean addmap=client.set(map); //log.info("map添加状态:"+addmap); String[] m={"adda","addb","addc","addd","adde","addzz"}; System.out.println("map插入后查询的结果:"+client.getMulti(m)); //字符串批量删除测试 String[] dels={"a","b","c","ssss"}; System.out.println("字符串删除前查询:"+client.getMulti(dels)); client.delete(dels); System.out.println("字符串删除后查询:"+client.getMulti(dels)); String[] mapKey={"adda","addb","addd","ssss"}; Map<String, Object> keyMap=new HashMap<String, Object>(); keyMap.put("adda", "111"); keyMap.put("addb", "222"); keyMap.put("addd", "333"); keyMap.put("ssss", "444"); System.out.println("map数组前查询:"+client.getMulti(mapKey)); client.delete(keyMap); System.out.println("map数组后查询:"+client.getMulti(mapKey)); String[] delList={"seta","setb","setd","setdsadasdasdasdasdasdasdadadadsadsadasdasdsdadasdsetdsadasdasdasdasdasdasdadadadsadsadasdasdsdadasdasdadsadsaddasdasdasdsadsadsadasdsdasdadsdasdsadasdsadsadasdsadsadasdsadasdsadsadsadsaasdadsadsaddasdasdasdsadsadsadasdsdasdadsdasdsadasdsadsadasdsadsadasdsadasdsadsadsadsa"}; List<String> keyList=new ArrayList<String>(); keyList.add("seta"); keyList.add("setb"); keyList.add("setd"); keyList.add("setdsadasdasdasdasdasdasdadadadsadsadasdasdsdadasdsetdsadasdasdasdasdasdasdadadadsadsadasdasdsdadasdasdadsadsaddasdasdasdsadsadsadasdsdasdadsdasdsadasdsadsadasdsadsadasdsadasdsadsadsadsaasdadsadsaddasdasdasdsadsadsadasdsdasdadsdasdsadasdsadsadasdsadsadasdsadasdsadsadsadsa"); System.out.println("list数组前查询:"+client.getMulti(delList)); client.delete(keyList); System.out.println("list数组后查询:"+client.getMulti(delList)); } }
相关推荐
memcache图形监控工具phpmemcache,尽是一个PHP文件就可以实现对memcache的监控。 使用方法:本地测试监控机安装Apache或者下载XAMPP(Apache+MySQL+PHP+PERL),安装后把memcachephp.zip中的memcache.php文件放到...
windows下memcache安装包 附带php扩展包
memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问。
最新windows的memcache模块下载 这个模块是平和php5.3的,在我的windowsxp php5.3.5上安装成功 里面有两个php库,一个php_memcache.dll.vc6 和一个php_memcache.dll.vc9 另外一个windows的memcache.exe文件,都是网上...
Memcache就不用多介绍了,做开发的人都知道。 但要用得好,却并不是那么容易的事。 如果用得不好,反而得不偿失。 这篇文档短小精悍,囊括了使用过程中需要要注意的方方面面。值得一读。
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从...
C语言memcache代码文档C语言memcache代码文档C语言memcache代码文档C语言memcache代码文档C语言memcache代码文档C语言memcache代码文档C语言memcache代码文档
MemCache.0.2.0.zip Memcached Client for Delphi 客户端调用类 MemCache.0.2.0.zip Show all LinksExternal links Memcached Project This project is a delphi unit which implements a thread safe client for ...
windows memcache 安装服务,php_memcache.dll所有版本扩展dll 安装说明 在命令行下安装Memcache,输入 ‘c:/memcached/memcached.exe -d install’。 3.启动Memcache,再输入: ‘c:/memcached/memcached.exe -d ...
php的memcache扩展,linux下的,php的memcache扩展分为两种,一种是memcache,一种是基于libmemcached的memcached,这个是memcache版本的beta版本
linux平台使用的memcache压缩包,解压缩之后运行make && make install安装, 然后/usr/local/memcache/bin/memcache -d -m 1024 -u root -p 11211 -c 1024命令运行memcache
$memcache = new Memcache; $memcache->connect("localhost",11211); echo "Server's version: " . $memcache->getVersion() . "\n"; $tmp_object = new stdClass; $tmp_object->str_attr = "test"; $tmp_object->...
PHP 添加 Memcache 扩展 : 下载包中包括如下: php_memcache-3.0.8-5.5-nts-vc11-x64.zip php_memcache-3.0.8-5.5-nts-vc11-x86.zip php_memcache-3.0.8-5.5-ts-vc11-x64.zip ...
win版的memcache,包括.net的驱动
将信息保持memcache中
php_memcache.dll
memcache 监控工具,可以实现实时对内存中的memcache进行监控 获取值等等
memcache的客户端,用maven构建,里有用hibernate-memcached与hibernate,spring3.0进行配置,也有与spring3.0单独配置。
memcache的配置及使用——memcache及其客户端telnet
简单的memcache命令