初见memcached

分类:工具

发布于 2016年12月03日

概述

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 size
DATA
  • key : 用来代表这一数据的唯一标识
  • token : 一个unsigned 32位整数,不需要唯一,当获取数据时会和数据一起返回
  • expire_time : 数据存活的时间(单位:秒)
  • size : 数据所占的字节数
  • DATA : 实际的数据

后面命令类似的都有这些元素组成。

add paul 0 900 4
paul
STORED

上面是一个示范例子,add命令需要注意

  • 如果已经存在这个key,就无法保存,提示NOT_STORED
  • 字节数必须对应数据大小,否则提示CLIENT_ERROR bad data chunk。

另一个可以添加数据的命令

set key token expire_time size
DATA

例子

set david 0 900 5
david
STORED

用法和add基本一样,但唯一不同的就是

  • 如果key存在的话,则覆盖之前的数据,即替换

2. 删

delete key

3 . 改

set key token expire_time size
DATA
replace key token expire_time size
DATA

这两个命令的使用方法一样,效果一样

4. 查

get key

示例

get paul
VALUE paul 0 4
paul
END

其他命令

append

在key数据项后面添加数据

append key token expire_time size
DATA

prepend

在key 数据项前面添加数据

prepend key token expire_time size
DATA

gets

gets key

得到数据项 key,同时返回一个整数 , 用以和cas命令结合使用

示例

gets paul
VALUE paul 0 4 11
paul
END
  • 与get相比,gets的结果在数据项大小size后有一个整数,和cas结合使用

cas

cas key token expire_time size int
DATA

int : gets 命令获取数据项时返回的整数

更改数据项key。条件是在上一次gets后此数据项不能有更改

示例

cas paul 0 900 7 11 
iampaul
STORED
get paul
VALUE paul 0 7
iampaul
END

当数据项在gets后已被修改,cas就会失败

gets paul
VALUE paul 0 7 12
iampaul
END
set paul 0 900 4
paul
STORED
cas paul 0 900 6 12
paulme
EXISTS

java连接memcached

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

maven 添加依赖:

 
  net.spy
  spymemcached
  2.10.0 

关键类:

MemcachedClient

建立连接

//ip地址与端口
InetSocketAddress inetSocketAddress = new InetSocketAddress("localhost",11211);
//通过inetSocketAddress创建MemcachedClient
MemcachedClient memcachedClient = new MemcachedClient(inetSocketAddress);

/**所有操作在开始和关闭中间执行*/

//关闭memcachedClient
memcachedClient.shutdown();

主要方法

//增删改方法,都返回OperaionFuture
OperationFuture of = memcachedClient.add(key, exp, obj);
OperationFuture of = memcachedClient.delete(key);
OperationFuture of = memcachedClient.set(key, exp, o);
OperationFuture of = memcachedClient.replace(key, exp, o);

//of.get()得到执行的结果
boolean result = of.get();
		
//get()方法得到数据项
Object obj = memcachedClient.get(key);

//gets()方法得到CASValue,
CASValue casValue = memcachedClient.gets(key);
//casValue的getValue()方法得到数据项
Object obj = casValue.getValue();
//得到用于保存的token
long 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

胡杨 2016年12月09日 17时49分

过来看看留个痕迹~

QJuSwmE2Tdo 2017年01月12日 02时15分

Fidnnig this post solves a problem for me. Thanks!

凯哥自媒体 2016年12月16日 09时39分

看到很多不会的

paulWen 回复 凯哥自媒体 2016年12月16日 17时54分

有帮助就好。

iFtrmAGRyiA 2017年01月12日 09时21分

Posts like this brehgtin up my day. Thanks for taking the time. http://rtbmgjqai.com [url=http://ffksnp.com]ffksnp[/url] [link=http://hxlglqhzf.com]hxlglqhzf[/link]

nY4fKhfS4 2017年01月11日 06时15分

not getting drunk..but releasing DMT from plant ethogens occuring natrually within all ligfeHallucinatin.(actually trancending) u cannot understand unless u experianced .foreal ..its all true. and LOve saves all..GOD

UJX4u6ez 2017年01月14日 00时59分

You are so awesome for helping me solve this
myrsety.

hgyNsqVS 2017年01月15日 04时32分

Always refrhseing to hear a rational answer. http://uidnrd.com [url=http://rnjfippfm.com]rnjfippfm[/url] [link=http://rtjprtehum.com]rtjprtehum[/link]

稿源:WJY的笔记本 (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 后端存储 » 初见memcached

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录