Memcached-api


1、相关类

package com.memcached.util;

import java.io.Serializable;

public class User implements Serializable{
    
    private Integer id;
    private String username;
    private String password;
    
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    public User(Integer id, String username, String password) {
        super();
        this.id = id;
        this.username = username;
        this.password = password;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    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;
    }
    

}


package com.memcached.util;

import java.io.IOException;

import java.util.Properties;

import org.apache.log4j.Logger;

public class PropertyUtils {

    private static Logger log = Logger.getLogger(MemcachedClientUtil.class);
    
    public static Properties properties = new Properties();
    
    /**
     * 根据配置文件名和配置键名查询配置值
     * @param key
     * @param propertiesFileName
     * @return
     * @author wuliu
     * @date   2015-6-5
     */
    public static String getValue(String key,String propertiesFileName){
        try {
            properties.load(PropertyUtils.class.getClassLoader().getResourceAsStream(propertiesFileName));
        } catch (IOException e) {
            log.info(propertiesFileName + "文件没有找到......");
        }
        
        return properties.getProperty(key).trim();
    }
}


package com.memcached.util;

import java.io.IOException;

import org.apache.log4j.Logger;
import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;

import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.MemcachedClientBuilder;
import net.rubyeye.xmemcached.XMemcachedClient;
import net.rubyeye.xmemcached.XMemcachedClientBuilder;
import net.rubyeye.xmemcached.utils.AddrUtil;

/**
 * memcached客户端工具类
 * @author wuliu
 * @date 2015-07-28
 */
public class MemcachedClientUtil {
    
    
    private static Logger log = Logger.getLogger(MemcachedClientUtil.class);
    
    /**
     * memcached客户端
     */
    private static MemcachedClient memcachedClient;
    
    private static MemcachedClientBuilder builder;
    /**
     * 配置文件名
     */
    private static String propertiesFileName;

    /**
     * memcached的服务
     */
    private static String server;
    
    private MemcachedClientUtil(){}
    
    /**
     * 初始化连接
     */
    private static void init(){
        propertiesFileName = "xmemcached.properties";
        server = PropertyUtils.getValue("memcached.server", propertiesFileName) + ":" + PropertyUtils.getValue("memcached.port", propertiesFileName);
        builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(server), new int[]{5});
        //设置连接池大小,即客户端个数
        builder.setConnectionPoolSize(Integer.valueOf(PropertyUtils.getValue("memcached.connectionPoolSize", propertiesFileName)));
        //宕机报警
//        builder.setFailureMode(true);
        //使用二进制文件  
//        builder.setCommandFactory(new BinaryCommandFactory());
    }
    
    
    /**
     * 获取memcached客户端
     * @return
     * @author wuliu
     * @date   2015-07-28
     */
    public static MemcachedClient getMemcachedClient() {
        try {
            if(memcachedClient == null) {
                init();
                memcachedClient = builder.build();
                // 装载数据时,关闭心跳检测
                memcachedClient.setEnableHeartBeat(false);
            }
            
        } catch (IOException e) {
            log.error("获取memcached客户端异常", e);
        }
        return memcachedClient;
    }
    
    /**
     * 关闭memcachedClient客户端的连接
     * @param mm          MemcachedClient客户端
     * @author wuliu
     * @date   2015-07-28
     */
    public static void closeMemcachedClient(MemcachedClient mm) {
        if(mm != null) {
            try {
                mm.shutdown();
            } catch (IOException e) {
                log.error("memcachedClient客户端关闭异常", e);
            }
        }
    }
}

2、xmemcached.properties配置文件

memcached.isOpen=true
memcached.expires=5
memcached.server=127.0.0.1
memcached.port=11211
memcached.connectionPoolSize=30
3、测试类

package com.memcached.util;

import java.util.HashMap;
import java.util.Map;

import net.rubyeye.xmemcached.Counter;
import net.rubyeye.xmemcached.MemcachedClient;

public class MemcachedDemo {
    
    public static void main(String[] args) throws Exception {
        // 获取memcached连接
        MemcachedClient memcachedClient = MemcachedClientUtil.getMemcachedClient();
//        memcachedClient.flushAll();

        //设置指定键对应的值(过期时间单位秒),如果没有则添加,有则修改
//      boolean set_username = memcachedClient.set("username", 0 , "admin0");
//      System.out.println(set_username);
        
        //设置指定键的新值,如果有则修改返回true(相同值也返回false);如果没有则不做操作返回false;
//        boolean replace_username = memcachedClient.replace("username", 0, "admin2");
//        System.out.println(replace_username);
        
        //设置键的值,如果没有则插入返回true;如果有则不操作返回false;
//        boolean add_username2 = memcachedClient.add("username2",0,"admin21");
//        System.out.println(add_username2);
        
        //删除指定键
//        memcachedClient.delete("username");
        //获取指定键对应的值
//      String username = (String)memcachedClient.get("username");
//      System.out.println(username);
        
//        List<String> list = new ArrayList<String>();
//        list.add("100");
//        list.add("101");
//        list.add("102");
//        memcachedClient.set("m-list", 0, list);
//        List<String> resultList = memcachedClient.get("m-list");
//        for(String str : resultList){
//            System.out.println(str);
//        }
        
//        Set<String> set = new HashSet<String>();
//        set.add("1000");
//        set.add("1001");
//        set.add("1002");
//        memcachedClient.set("m-set", 0, set);
//        
//        Set<String> resultSet = memcachedClient.get("m-set");
//        Iterator<String> it = resultSet.iterator();
//        while(it.hasNext()){
//            System.out.println(it.next());
//        }
        
//        Map<String,Object> map = new HashMap<String, Object>();
//        map.put("username", "admin");
//        map.put("password", "123");
//        memcachedClient.set("m-map", 0, map);
//        
//        Map<String,Object> resultMap = memcachedClient.get("m-map");
//        for(Map.Entry<String, Object> entry : resultMap.entrySet()){
//            System.out.println(entry.getKey()+"="+entry.getValue());
//        }
        
//        memcachedClient.set("m-user", 0, new User(1,"admin","123456"));
//        User user = memcachedClient.get("m-user");
//        if(user != null){
//            System.out.println(user.getId()+","+user.getUsername()+","+user.getPassword());
//        }
        
        // 第一个参数指定递增的key名称, 第二个参数指定递增的幅度大小, 第三个参数指定当key不存在的情况下的初始值即设置一个新建为1。
        //返回变化后的值
//        long l = memcachedClient.incr("incrkey", 5, 1);
//        System.out.println(l);
        //两个参数的重载方法省略了第三个参数,默认指定为0。
//        memcachedClient.incr("key1", 5);
//        memcachedClient.decr("incrkey", 1);
//        counter(memcachedClient);
        MemcachedClientUtil.closeMemcachedClient(memcachedClient);
    }
    
    /**
     * 计数器的操作
     *
     * @version 2016年10月31日上午11:00:21
     * @author wuliu
     * @param memcachedClient
     * @throws Exception
     */
    public static void counter(MemcachedClient memcachedClient) throws Exception{
        Counter counter = memcachedClient.getCounter("counter", 0);
//        long incr = counter.incrementAndGet();
//        System.out.println(incr);
//        long decr = counter.decrementAndGet();
//        System.out.println(decr);
//        long add = counter.addAndGet(-10);
    }

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值