初见memcached

来源:互联网 发布:缝纫机制造软件 编辑:程序博客网 时间:2024/05/21 21:16

原文链接: 点击打开链接

概述

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。

安装memcached

ubuntu : 
sudo apt-get install memcached
安装后可以执行以下命令来查看是否已经在运行
ps -aux | grep memcache
安装成功并已经运行会得到以下结果
memcache  1043  0.0  0.0 325536  2808 ?        Ssl  18:11   0:00 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1


连接memcached

telnet HOST PORT
连接本地默认端口的memcached
telnet 127.0.0.1 11211

基本使用(增删改查)

1. 增
add key token expire_time sizeDATA
  • key : 用来代表这一数据的唯一标识
  • token : 一个unsigned 32位整数,不需要唯一,当获取数据时会和数据一起返回
  • expire_time : 数据存活的时间(单位:秒)
  • size : 数据所占的字节数
  • DATA : 实际的数据
后面命令类似的都有这些元素组成。
add paul 0 900 4paulSTORED
上面是一个示范例子,add命令需要注意
  • 如果已经存在这个key,就无法保存,提示NOT_STORED
  • 字节数必须对应数据大小,否则提示CLIENT_ERROR bad data chunk。
另一个可以添加数据的命令
set key token expire_time sizeDATA
例子
set david 0 900 5davidSTORED
用法和add基本一样,但唯一不同的就是
  • 如果key存在的话,则覆盖之前的数据,即替换
2. 删
delete key
3 . 改
set key token expire_time sizeDATA
replace key token expire_time sizeDATA
这两个命令的使用方法一样,效果一样

4. 查
get key
示例
get paulVALUE paul 0 4paulEND

其他命令

append
在key数据项后面添加数据
append key token expire_time sizeDATA

prepend
在key 数据项前面添加数据
prepend key token expire_time sizeDATA
gets 
gets key
得到数据项 key,同时返回一个整数 , 用以和cas命令结合使用
示例
gets paulVALUE paul 0 4 11paulEND
  • 与get相比,gets的结果在数据项大小size后有一个整数,和cas结合使用

cas
cas key token expire_time size intDATA
int : gets 命令获取数据项时返回的整数
更改数据项key。条件是在上一次gets后此数据项不能有更改

示例
cas paul 0 900 7 11 iampaulSTOREDget paulVALUE paul 0 7iampaulEND
当数据项在gets后已被修改,cas就会失败
gets paulVALUE paul 0 7 12iampaulENDset paul 0 900 4paulSTOREDcas paul 0 900 6 12paulmeEXISTS

java连接memcached

需要下载jar包 : spymemcached-2.10.0.jar

maven 添加依赖:
<dependency>   <groupId>net.spy</groupId>  <artifactId>spymemcached</artifactId>  <version>2.10.0 </version></dependency>

关键类:

MemcachedClient

建立连接

//ip地址与端口InetSocketAddress inetSocketAddress = new InetSocketAddress("localhost",11211);//通过inetSocketAddress创建MemcachedClientMemcachedClient memcachedClient = new MemcachedClient(inetSocketAddress);/**所有操作在开始和关闭中间执行*///关闭memcachedClientmemcachedClient.shutdown();

主要方法

//增删改方法,都返回OperaionFuture<Boolean>OperationFuture<Boolean> of = memcachedClient.add(key, exp, obj);OperationFuture<Boolean> of = memcachedClient.delete(key);OperationFuture<Boolean> of = memcachedClient.set(key, exp, o);OperationFuture<Boolean> of = memcachedClient.replace(key, exp, o);//of.get()得到执行的结果boolean result = of.get();//get()方法得到数据项Object obj = memcachedClient.get(key);//gets()方法得到CASValue,CASValue<Object> casValue = memcachedClient.gets(key);//casValue的getValue()方法得到数据项Object obj = casValue.getValue();//得到用于保存的tokenlong token = casValue.getCas();//用key,token,value/obj修改数据memcachedClient.cas(key, token, value);
这些方法都是和上面所述的memcached指令相对应的。

需要注意的点

  • 操作需要在创建连接和关闭连接之间进行。JavaWeb项目可以在ServlectContext的生死监听器创建和关闭。
  • 要保存的对象一定要序列化不序列化不能保存,但是没有任何提示。

Eight hours work, eight hours sleep, and eight hours recreation
- Brigham Young
1 0
原创粉丝点击