Linux下Memcache 安装和使用

时间:2022-09-06 14:09:04

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 各命令行具体用法

Linux下Memcache 安装和使用

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 安装和使用的更多相关文章

  1. Linux 下memcache安装及使用

    memcache是高性能,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度.据说官方所说,其用户包括twitter.digg.flickr等,都是些互联网大腕呀.目前用memca ...

  2. linux下memcache安装

    安装配置 1. 安装libevent # tar zxf libevent-1.4.6-stable.tar.gz # cd libevent-1.4.6-stable # ./configure # ...

  3. Linux下php安装memcache

    Linux下php安装memcache说明:php安装目录:/phpstudy/server/php/bin/phpphp.ini配置文件路径:/phpstudy/server/php/etc/php ...

  4. Linux下Memcache服务器端的安装

    最近在研究怎么让Discuz!去应用Memcache去做一些事情,记录下Memcache安装的过程. Linux下Memcache服务器端的安装服务器端主要是安装memcache服务器端,目前的最新版 ...

  5. Linux下memcached安装和启动方法

    Linux下memcached安装和启动方法 1. 首先下载memcached 和 libevent 包. Memcached用到了libevent这个库用于Socket的处理.下面是下载的两个包文件 ...

  6. Windows下memcache安装使用

    Windows下Memcache安装 随着时间的推移,网上现在能找到的在 Windows下安装 Memcache 的文档大多已经过时.雪峰这里再简要介绍一下当下最新版的安装和配置方法. Memcach ...

  7. Linux下php安装phpredis

    说明:php安装目录:/usr/local/php5php.ini配置文件路径:/usr/local/php5/etc/php.iniNginx安装目录:/usr/local/nginxNginx网站 ...

  8. Linux下yum安装MySQL

    写这篇文章的原因是:在刚开始使用Linux操作系统时想要搭建LAMP环境,于是开始在Google和百度上各种寻找资料,碰到了不是很多的问题后,我决定写这篇文章总结一下在Linux下yum安装MySQL ...

  9. LINUX下编译安装PHP各种报错大集合

    本文为大家整理汇总了一些linux下编译安装php各种报错大集合 ,感兴趣的同学参考下. nginx1.6.2-mysql5.5.32二进制,php安装报错解决: 123456 [root@clien ...

随机推荐

  1. Silverlight无法启动调试,错误&OpenCurlyDoubleQuote;Unable to start debugging&period; The Silverlight Developer Runtime is not installed&period; Please install a matching version&period;” 解决办法

    今天调试Silverlight出现了以下错误: 意思是“无法启动调试,因为Silverlight Developer Runtime没有安装,请安装一个匹配的版本”.但是按Ctrl + F5可以调试运 ...

  2. Redis Tools

    1. Resources Redis Desktop Manager http://redisdesktop.com/ Redis命令的中文文档 http://redisdoc.com/ Redis安 ...

  3. Table AdvanceTable针对表内行禁用multipleSelection &comma; singleSelection

    OATableBean table = (OATableBean)webBean.findChildRecursive("LineTable"); table.setInserta ...

  4. php框架Symfony资料

    1.http://snippets.symfony-project.org/snippets/tagged/criteria/order_by/date 2.Propel API: http://ap ...

  5. excel导入 导出 兼容各个版本服务器不装EXCEL也可以

    给出 demo源码: http://pan.baidu.com/s/1hqGMudY 提取码:pw4n首先要引用 NPOI.dll (可在网上下载!) //导入 public void OnSubmi ...

  6. IT痴汉的工作现状13-吓唬电话

    那是一个普通的周末上午,稍微阴沉的天,使得暑气消退了好多.刚吃过早饭,我懒懒的浏览着CSDN论坛上有趣的问题和答案. 突然电话响起.是一个陌生的号码.我像往常一样接起电话,""您好 ...

  7. c&num; 图片插入Excel

    引用COM:Microsoft Office 11.0 Object Library 引用类:    using System;    using System.Windows.Forms;    u ...

  8. Excel两列查找重复值

    判断A列的值在B列是否存在,如果存在则输出“yes” 在C1单元格使用如下公式: =IF(COUNTIF(A:A,B2)>0,"yes","")

  9. C&plus;&plus; vc中怎么使用SendMessage自定义消息函数

    vc中怎么使用SendMessage自定义消息函数: SendMessage的基本结构如下:SendMessage(    HWND hWnd,  //消息传递的目标窗口或线程的句柄.    UINT ...

  10. swift - 高斯模糊

      /* case extraLight case light case dark @available(iOS 10.0, *) case regular @available(iOS 10.0, ...