Linux下Memcache 安装和使用
Memcached是一种高性能的分布式内存对象缓存系统(memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能,其“分布式”由客户端函数库完成,成熟算法的为一致性Hash),用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。很多大型网站都使用了Memcached做缓存。MemCache依赖于libevent,后者是一个基于事件触发的网络库。
下面介绍Linux下MemCache数据库的安装和使用。
libevent版本:libevent-2.0.22-stable.tar.gz
MemCache版本:memcached-1.4.29.tar.gz
1、安装libevent
//make install后会在==prefix指定的地方产生 bin、include、lib 文件夹
[root@localhost src]# tar -zxvf libevent-2.0.-stable.tar.gz
[root@localhost src]# cd libevent-2.0.-stable
[root@localhost libevent-2.0.-stable]# ./configure --prefix=/usr/local/libevent
[root@localhost libevent-2.0.-stable]# make
[root@localhost libevent-2.0.-stable]# make install
2、安装Memcached服务端
//make install后会在==prefix指定的地方产生 bin、include、share 文件夹
[root@localhost src]# tar -zxvf memcached-1.4..tar.gz
[root@localhost src]# cd memcached-1.4.
[root@localhost memcached-1.4.]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
[root@localhost memcached-1.4.]# make
[root@localhost memcached-1.4.]# make install
3、启动
[root@localhost /] /usr/local/memcached/bin/memcached -d -m -u root -p -c -P /tmp/memcached.pid
选项说明:(更多参考 简单之美的博客 )
-d:选项是启动一个守护进程,
-m:是分配给Memcache使用的内存数量,单位是MB,默认是64 MB.
-M:内存耗尽时返回错误而并非删除条目.
-u:是运行Memcache的用户.
-l:是监听的服务器IP地址,我这里没有填.
-p:是设置Memcache tcp监听的端口,默认是11211.
-c:选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定.
-P:是设置保存Memcache的pid文件.
-vv:打印客户端的请求和返回信息.
-i:打印memcached和libevent的版权信息
-h:查看选项说明
运行 telnet localhost 能连上则说明启动成功
4、命令行操作
4.1 基本常用操作
(更多可参考:简单之美的博客、MemCache常用命令及使用说明)
先:telnet localhost
写:set time
读:get time
查看状态:stats
pid Memcached 进程ID
uptime Memcached 运行时间,单位:秒
time Memcached 当前的UNIX时间
version Memcached 的版本号
rusage_user 该进程累计的用户时间,单位:秒
rusage_system 该进程累计的系统时间,单位:秒
curr_items Memcached 当前存储的内容数量
total_items Memcached 启动以来存储过的内容总数
bytes Memcached 当前存储内容所占用的字节数(*//=mb)
curr_connections 当前连接数量
total_connections Memcached 运行以来接受的连接总数
connection_structures Memcached 分配的连接结构的数量
cmd_get 查询请求总数
cmd_set 存储(添加/更新)请求总数
...
get_hits 查询成功获取数据的总次数
get_misses 查询成功未获取到数据的总次数
bytes_read Memcached 从网络读取到的总字节数
bytes_written Memcached 向网络发送的总字节数
limit_maxbytes Memcached 在存储时被允许使用的字节总数
退出telnet:quit
4.2 列出所有key
4.2.1 方法
先用 stats items 得到所有item的id;再用 stats cachedump item_id 得到item的key;最后可以根据key得到value。示例如下:(参考资料:http://www.darkcoding.net/software/memcached-list-all-keys/)
stats items
STAT items::number //The first number after ‘items’ is the slab id. the value after 'number' is the pairs of K/V in the slab.
......
STAT items::crawler_items_checked
STAT items::lrutail_reflocked
END stats cachedump //Request a cache dump for each slab id, with a limit for the max number of keys to dump. dump all key in the corresponding slab when it's 0
ITEM beijing_car_distribution [ b; s]
END get beijing_car_distribution
VALUE beijing_car_distribution
[{"region":"881,1731","count":},{"region":"874,1730","count":}
......"count":}]
END
4.2.2 命令
host=192.168.6.135
port=
num=`echo 'stats items' |nc $host $port |grep number |tail -n1 | grep -o ":[0-9]\+" |grep -o "[0-9]\+" `
for ((i=;i<=$num;i++))
do
echo
echo
echo 'slab '$i
echo 'stats cachedump '$i'' | nc $host $port
done
4.2.3 其他组合命令
得到 items:id:number xx 列表: echo 'stats items' |nc 192.168.6.135 |grep number
得到某个itemid的所有K/V pair: echo stats cachedump | nc 192.168.6.135
4.3 各命令行具体用法
5、代码操作
通过代码操作MemCache,常用的Java客户端有:spymemcached客户端(Java)、XMemcached客户端(Java)、Nodejs等。(具体可参考:简单之美的博客)
以XMemcached为例:
/**
*
*/
package cn.edu.buaa.act.test.TestMemcache; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map; import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.MemcachedClientBuilder;
import net.rubyeye.xmemcached.XMemcachedClientBuilder;
import net.rubyeye.xmemcached.command.BinaryCommandFactory;
import net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator;
import net.rubyeye.xmemcached.utils.AddrUtil; /**
* @author zsm
*
*/
public class MemcacheTest {
private final int bucket = 1000;
private MemcachedClient mcClient1;
private MemcachedClient mcClient2; public MemcacheTest(String memAddr1, String memAddr2) {
try { MemcachedClientBuilder mcbuilder = new XMemcachedClientBuilder(AddrUtil.getAddresses(memAddr1));
mcbuilder.setSessionLocator(new KetamaMemcachedSessionLocator());
mcbuilder.setCommandFactory(new BinaryCommandFactory());
mcbuilder.setConnectionPoolSize(1);
mcbuilder.setFailureMode(false);
mcClient1 = mcbuilder.build(); mcbuilder = new XMemcachedClientBuilder(AddrUtil.getAddresses(memAddr2));
mcbuilder.setSessionLocator(new KetamaMemcachedSessionLocator());
mcbuilder.setCommandFactory(new BinaryCommandFactory());
mcbuilder.setConnectionPoolSize(1);
mcbuilder.setFailureMode(false);
mcClient2 = mcbuilder.build(); System.out.printf(Thread.currentThread().getName() + "||: mcClient1 create instance: %s %s %s\n",
this.getClass().hashCode(), memAddr1, memAddr2);
} catch (Exception e) {
e.printStackTrace();
}
} public void Set(String key, String value) {
try {
mcClient1.set(key, 0, value);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
mcClient2.set(key, 0, value);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} private String Get(String key) {
try {
return mcClient1.get(key);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
return mcClient2.get(key);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
} private Map<String, Object> Get(ArrayList<String> keys) {
try {
Map<String, Object> res = new HashMap<String, Object>();
Map<String, Object> tmp = null;
int keysLen = keys.size();
if (keysLen > bucket) {
ArrayList<String> keyPart = new ArrayList<String>();
for (int i = 0; i < keysLen; i++) {
keyPart.add(keys.get(i));
if (keyPart.size() == bucket || i == keysLen) {// 分批请求
if ((tmp = mcClient1.get(keyPart)) == null) {// 请求
tmp = mcClient2.get(keyPart);
}
res.putAll(tmp);
keyPart.clear();
}
}
} else {
if ((res = mcClient1.get(keys)) == null) {
res = mcClient2.get(keys);
}
}
return res.size() > 0 ? res : null;
} catch (Throwable e) {
System.out.println(e.getMessage());
return null;
}
} public static void main(String[] args) {
// TODO Auto-generated method stub
MemcacheTest mt = new MemcacheTest("192.168.6.135:11211", "192.168.6.136:11211");
mt.Set("zsmtime", new SimpleDateFormat("yyyyMMdd_hhMMssSS").format(System.currentTimeMillis()));
System.out.println(mt.Get("967790142906obd")); }
}
相关Maven依赖:
<dependency>
<groupId>com.googlecode.xmemcached</groupId>
<artifactId>xmemcached</artifactId>
<version>2.0.</version>
</dependency>
6、参考资料
http://shiyanjun.cn/archives/873.html#highlighter_567286
Linux下Memcache 安装和使用的更多相关文章
- Linux 下memcache安装及使用
memcache是高性能,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度.据说官方所说,其用户包括twitter.digg.flickr等,都是些互联网大腕呀.目前用memca ...
- linux下memcache安装
安装配置 1. 安装libevent # tar zxf libevent-1.4.6-stable.tar.gz # cd libevent-1.4.6-stable # ./configure # ...
- Linux下php安装memcache
Linux下php安装memcache说明:php安装目录:/phpstudy/server/php/bin/phpphp.ini配置文件路径:/phpstudy/server/php/etc/php ...
- Linux下Memcache服务器端的安装
最近在研究怎么让Discuz!去应用Memcache去做一些事情,记录下Memcache安装的过程. Linux下Memcache服务器端的安装服务器端主要是安装memcache服务器端,目前的最新版 ...
- Linux下memcached安装和启动方法
Linux下memcached安装和启动方法 1. 首先下载memcached 和 libevent 包. Memcached用到了libevent这个库用于Socket的处理.下面是下载的两个包文件 ...
- Windows下memcache安装使用
Windows下Memcache安装 随着时间的推移,网上现在能找到的在 Windows下安装 Memcache 的文档大多已经过时.雪峰这里再简要介绍一下当下最新版的安装和配置方法. Memcach ...
- Linux下php安装phpredis
说明:php安装目录:/usr/local/php5php.ini配置文件路径:/usr/local/php5/etc/php.iniNginx安装目录:/usr/local/nginxNginx网站 ...
- Linux下yum安装MySQL
写这篇文章的原因是:在刚开始使用Linux操作系统时想要搭建LAMP环境,于是开始在Google和百度上各种寻找资料,碰到了不是很多的问题后,我决定写这篇文章总结一下在Linux下yum安装MySQL ...
- LINUX下编译安装PHP各种报错大集合
本文为大家整理汇总了一些linux下编译安装php各种报错大集合 ,感兴趣的同学参考下. nginx1.6.2-mysql5.5.32二进制,php安装报错解决: 123456 [root@clien ...
随机推荐
- 在Word2013中多次应用格式刷
顾名思义,格式刷是为了方便需要跨区域操作时候,能快速的应用格式到相应文本.那么怎么使用word进行格式刷的多次使用呢.我们先来看单次的,这个比较容易,只要在先需要的格式单击一次格式刷,再到需要的文本执 ...
- Java网络编程——TCP实例
1.客户端 1.1:创建服务端点 1.2:获取已有数据 1.3:通过socket输出流将数据发送给服务端 1.4:读取服务端反馈信息 1.5:关闭socket import java.io.Buffe ...
- java设计优化--单例模式
单例模式是一种对象创建模式,确保系统中一个类只有一个实例. 在java语言中,这样做有两大好处: 1.对于频繁使用的对象,可以省略创建对象所话费的时间: 2.由于new操作的次数减少,对于系统内存的使 ...
- Linux不重启的情况下添加硬盘
众所周知,SATA和SCSI是支持热插拔的,但是新装了这类支持热插拔的驱动器,系统不会马上识别的,往往我们需要重启系统来识别,但是有另外一种方法可以很方面的让系统识别新的设备.作为系统管理员,需要了解 ...
- 用 Fabric 实现自动化部署
自动化部署代码 http://liyangliang.me/posts/2015/06/deploy-applications-using-fabric/ http://fabric-docs-cn. ...
- ActiveMQ_Topic队列(三)
一.本文章包含的内容 1.列举了ActiveMQ中通过Topic方式发送.消费队列的代码(监听者有两个,分别是topicMessageListener1.topicMessageListener2) ...
- Shell命令_for
chmod 755 demo.sh ./demo.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...
- jquery-追加元素
一.在元素内部/外部追加元素 append,prepend:添加到子元素 before,after:作为兄弟元素添加 html: <div id="content"> ...
- hibernate DetachedCriteria实现多表关联查询createAlias的使用
记录本例查询初衷: 有表: 表1,表2,表3 关系 1 many-to-one 2 2 many-to-one 3 结果:要通过表3中的条件反向查询表1中相关的数据 public Page<We ...
- iOS清理缓存的几种方法
- (long long) fileSizeAtPath:(NSString*) filePath{ NSFileManager* manager = [NSFileManager defau ...