memcached

一、启动参数

-p <num>      设置TCP端口号(默认不设置为: 11211)

-U <num>      UDP监听端口(默认: 11211, 0 时关闭) 

-l <ip_addr>  绑定地址(默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问)

-d                    以daemon方式运行

-u <username> 绑定使用指定用于运行进程<username>

-m <num>      允许最大内存用量,单位M (默认: 64 MB)

-P <file>     将PID写入文件<file>,这样可以使得后边进行快速进程终止, 需要与-d 一起使用


启动例子:/usr/local/memcached/bin/memcached -d -m 512 -u www -l 192.168.20.100 -p 11211 -c 512 -P /usr/local/memcached/memcached.pid


二、常用命令

<command name> <key> <flag> <expire> <bytes>

<data block>


说明:

command name:如,set/add/replace

key:缓存的key

flag:客户机使用它存储关于键值对的额外信息

expire:缓存过期时间 单位为秒 0 表示永远存储

bytes:缓存值的字节数


data block:数据块


例子:

首先telnet 127.0.0.1 11211 连上memcached


set myKey 0 0 6

myValu

STORED


get myKey

VALUE myKey 0 5

myValu

STORED

 delete myKey

DELETED


三、java使用memcached

1.

Socket socket = null;
        OutputStreamWriter outputStreamWriter = null;
        BufferedReader bufferedReader = null;
        try {
            socket = new Socket("127.0.0.1", 11211);
            outputStreamWriter = new OutputStreamWriter(socket.getOutputStream()); 
            
            String command = "get firstKey\r\n";
            /*String command = "set firstKey 0 0 6\r\n";
            outputStreamWriter.write(command);
            command = "second\r\n";*/
            //command = "delete firstKey\r\n";
            outputStreamWriter.write(command);
            outputStreamWriter.flush();
            
            bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String line = null;
            StringBuilder sb = new StringBuilder();
            while((line = bufferedReader.readLine()) != null){
                sb.append(line).append("\r\n");
                if(line.equals("END")) break;
                if(line.equals("STORED")) break;
                if(line.equals("NOT_STORED")) break;
                if(line.equals("DELETED")) break;
                if(line.equals("EXISTS")) break;
                if(line.equals("ERROR")) break;
            }
            
            System.out.println(sb.toString());
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try {
                if(outputStreamWriter != null){
                    outputStreamWriter.close();
                }
                if(bufferedReader != null){
                    bufferedReader.close();
                }
                if(socket != null && socket.isConnected()){
                    socket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

2、使用java连接memcached的客户端

需要jar包:

commons-pool-1.6.jar

java_memcached-release_2.6.6.jar

slf4j-api-1.6.1.jar

slf4j-simple-1.6.1.jar

public class MemCachedServer {
    
    private static MemCachedClient memCachedClient;
    
    private static SockIOPool sockIOPool;
    
    private static MemCachedServer instance = new MemCachedServer();
    
    private MemCachedServer(){}
    
    public static MemCachedServer getInstance(){
        return instance;
    }
    
    public void init(){
        sockIOPool = SockIOPool.getInstance();
        
        String[] servers = {"127.0.0.1:11211"};
        sockIOPool.setServers(servers);
        //设置每个MemCached服务器的权重
        Integer[] weights = {3};
        sockIOPool.setWeights(weights);
        //当一个memcached服务器失效的时候是否去连接另一个memcached服务器
        sockIOPool.setFailover(true);
        sockIOPool.setInitConn(3);
        sockIOPool.setMinConn(3);
        sockIOPool.setMaxConn(5);
        //自查线程周期进行工作,其每次休眠时间
        sockIOPool.setMaintSleep(30);
        //socket的参数,true:写数据不缓存,立即发送出去
        sockIOPool.setNagle(false);
        //socket阻塞数据的超时时间
        sockIOPool.setSocketTO(3000);
        //设置是否检查memcached的服务器是否失效
        sockIOPool.setAliveCheck(true);
        //设置最大的处理时间
        sockIOPool.setMaxIdle(1000 * 30 * 30);
        sockIOPool.setSocketConnectTO(0);
        
        sockIOPool.initialize();

        if(memCachedClient == null){
            memCachedClient = new MemCachedClient();
        }
    }
    
    public void destroy(){
        if(sockIOPool != null){
            sockIOPool.shutDown();
        }
    }
    
    public MemCachedClient getMemCachedClient(){
        return memCachedClient;
    }
    
}

public class MemcachedTest {
    
    public static void main(String[] args){
        
        MemCachedServer server = MemCachedServer.getInstance();
        server.init();
        MemCachedClient client = server.getMemCachedClient();
        
        //client.set("firstKey", "firstValue", new Date(1000 * 1));
        
        //client.delete("firstKey");
        
        System.out.println(client.get("firstKey"));
        
        server.destroy();
    }

}

...


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值