memcached win64位服务端安装和java客户端实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/li4562258fj155/article/details/72829964

项目开发中需要用到memcached缓存记录下来相关操作方便日后复习,如果有错误或遗漏请留言。

memcached服务端安装

下载安装包

下载地址

32位系统 1.4.4版本:http://static.runoob.com/download/memcached-win32-1.4.4-14.zip

64位系统 1.4.4版本:http://static.runoob.com/download/memcached-win64-1.4.4-14.zip

安装

1.解压下载的服务端安装包到指定目录c:/memcached下

2.打开cmd黑窗口 进入解压目录下

3.安装

memcached.exe -d install
4.启动

memcached.exe -d start
5.卸载 需要时执行

memcached.exe -d stop
memcached.exe -d uninstall

注意:必须先停止memecached后才能卸载。

连接

1.语法

telnet host port
host memcached服务端IP地址

port memcached服务端接口

例如:

telnet 127.0.0.1 11211

操作数据

具体参考:http://www.runoob.com/memcached/memcached-set-data.html

java客户端实例

1.解压java客户端将所有jar包放到项目中

2.编写工具类

package com.demo.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.Properties;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;

/**
 * memcached缓存基本操作 2017-6-1 lg
 *
 */
public class Memcached {
    
    private static Memcached instance = new Memcached();
    
    /**
     * memcached客户端
     */
    private static MemCachedClient mcc;

    private int serverAmount = 0;//memcached服务器数量
    
    private String url = "/memcached.properties";//配置文件地址 根据实际情况调整
    
    /**
     * 私有构造方法
     */
    private Memcached(){
        try {
            Properties pro = new Properties();
            pro.load(Memcached.class.getResource(url).openStream());
            
            String[] servers = pro.getProperty("servers").split(",");//memcached服务器连接地址和端口号
            
            serverAmount = servers.length;//服务器数量
            
            SockIOPool pool = SockIOPool.getInstance();
            pool.setServers(servers);
            pool.setFailover(Boolean.valueOf(pro.get("failover").toString()));//当memcached服务器失效的时候是否连接下一个memcached服务器
            pool.setInitConn(Integer.valueOf(pro.get("initConn").toString()));//初始化连接服务器连接数量
            pool.setMinConn(Integer.valueOf(pro.get("minConn").toString()));//服务器最小连接数量
            pool.setMaxConn(Integer.valueOf(pro.get("maxConn").toString()));//服务器最大连接数量
            pool.setMaxIdle(Long.valueOf(pro.get("maxIdle").toString()));//连接最长空闲时间 毫秒
            pool.setMaintSleep(Long.valueOf(pro.get("maintSleep").toString()));//自查线程周期进行工作,其每次休眠时间
            pool.setNagle(Boolean.valueOf(pro.get("nagle").toString()));
            pool.setSocketTO(Integer.valueOf(pro.get("socketTO").toString()));
            pool.setAliveCheck(Boolean.valueOf(pro.get("aliveCheck").toString()));//是否检查memcached服务器是否失效
            pool.initialize();
            
            //memcached客户端
            mcc = new MemCachedClient();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 获取唯一实例
     * @return
     */
    public static Memcached getInstance(){
        return instance;
    }
    
    /**
     * 新增
     * @param key    键
     * @param value    值
     * @return
     */
    public boolean add(String key,Object value){
        if (serverAmount == 1) {//只拥有一个memcached服务器
            return mcc.set(key, value);//直接保存数据
        } else {
            int num = serverNumber(key);//数据应保存的服务器标记
            return mcc.set(key, value, num);
        }
    }
    
    /**
     * 新增
     * @param key    键
     * @param value    值
     * @param millisecond 数据过期时间 单位毫秒
     * @return
     */
    public boolean add(String key,Object value,int millisecond){
        if (serverAmount == 1) {//只拥有一个memcached服务器
            return mcc.set(key, value, new Date(millisecond));//直接保存数据
        } else {
            int num = serverNumber(key);//数据应保存的服务器标记
            return mcc.set(key, value, new Date(millisecond), num);
        }
    }
    
    /**
     * 删除
     * @param key 键
     * @return
     */
    public boolean delete(String key){
        if (serverAmount == 1) {//只拥有一个memcached服务器
            return mcc.delete(key);
        } else {
            int num = serverNumber(key);//数据应保存的服务器标记
            return mcc.delete(key, num, null);
        }
    }
    
    /**
     * 修改
     * @param key    键
     * @param value    值
     * @return
     */
    public boolean update(String key,Object value){
        if (serverAmount == 1) {//只拥有一个memcached服务器
            return mcc.replace(key, value);
        } else {
            int num = serverNumber(key);//数据应保存的服务器标记
            return mcc.replace(key, value, num);
        }
    }
    
    /**
     * 修改
     * @param key    键
     * @param value    值
     * @param millisecond 数据过期时间 单位毫秒
     * @return
     */
    public boolean update(String key,Object value,int millisecond){
        if (serverAmount == 1) {//只拥有一个memcached服务器
            return mcc.replace(key, value, new Date(millisecond));
        } else {
            int num = serverNumber(key);//数据应保存的服务器标记
            return mcc.replace(key, value, new Date(millisecond), num);
        }
    }
    
    /**
     * 查询
     * @param key
     * @return
     */
    public Object query(String key){
        if (serverAmount == 1) {//只拥有一个memcached服务器
            return mcc.get(key, 0);//直接查询数据
        } else {
            int num = serverNumber(key);//数据应保存的服务器标记
            return mcc.get(key, num);
        }
    }
    
    /**
     * 计算数据应该保存到哪个memcached服务器 返回服务器标记
     * @param key 键
     * @return
     */
    public int serverNumber(String key){
        int tem01 = key.hashCode();//主键字节码
        int tem02 = tem01 % serverAmount;//所属服务器标记 = 键字节码 % 服务器数量
        return tem02;
    }
}



3.编写配置文件

#mecached配置信息
#memcached服务器连接地址和端口号 多个已逗号间隔
servers=192.168.1.111:11211,192.168.1.109:11211
#当memcached服务器失效的时候是否连接下一个memcached服务器
failover=true
#初始化连接服务器连接数量
initConn=10
#服务器最小连接数量
minConn=5
#服务器最大连接数量
maxConn=250
#连接最长空闲时间 毫秒
maxIdle=3600000
#自查线程周期进行工作,其每次休眠时间
maintSleep=30
#
nagle=false
#
socketTO=3000
#是否检查memcached服务器是否失效
aliveCheck=true


猜你喜欢

转载自blog.csdn.net/li4562258fj155/article/details/72829964