Memcached常用操作

memcached是一个高性能的、分布式内存对象缓存系统,应用广泛。 通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。
它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。还使用内置的内存块分配和哈希表算法,确保虚拟内存不会过来捣乱。
Memcached 官方网站:http://www.danga.com/memcached 

二. memcached 的安装:
注:memcached 用到了libevent这个库用于Socket的处理,所以还需要安装libevent.官网:http://www.monkey.org/~provos/libevent/
1. 先安装libevent:
[root@localhost software]# tar zxvf libevent-1.4.11-stable.tar.gz 
[root@localhost libevent-1.4.11-stable]# ./configure –prefix=/usr 
[root@localhost libevent-1.4.11-stable]# make 
[root@localhost libevent-1.4.11-stable]# make install 

2. 测试libevent是否安装成功
[root@localhost libevent-1.4.11-stable]# ls -al /usr/lib | grep libevent 
lrwxrwxrwx   1 root root       22 07-10 13:10 libevent-1.1a.so.1 -> libevent-1.1a.so.1.0.2
-rwxr-xr-x   1 root root    31596 2007-01-07 libevent-1.1a.so.1.0.2
lrwxrwxrwx   1 root root       21 07-21 03:33 libevent-1.4.so.2 -> libevent-1.4.so.2.1.3
-rwxr-xr-x   1 root root   308088 07-21 03:33 libevent-1.4.so.2.1.3
-rw-r--r--   1 root root   394474 07-21 03:33 libevent.a
lrwxrwxrwx   1 root root       26 07-21 03:33 libevent_core-1.4.so.2 -> libevent_core-1.4.so.2.1.3
-rwxr-xr-x   1 root root   109490 07-21 03:33 libevent_core-1.4.so.2.1.3
-rw-r--r--   1 root root   148742 07-21 03:33 libevent_core.a
-rwxr-xr-x   1 root root      866 07-21 03:33 libevent_core.la
lrwxrwxrwx   1 root root       26 07-21 03:33 libevent_core.so -> libevent_core-1.4.so.2.1.3
lrwxrwxrwx   1 root root       27 07-21 03:33 libevent_extra-1.4.so.2 -> libevent_extra-1.4.so.2.1.3
-rwxr-xr-x   1 root root   246870 07-21 03:33 libevent_extra-1.4.so.2.1.3
-rw-r--r--   1 root root   307370 07-21 03:33 libevent_extra.a
-rwxr-xr-x   1 root root      873 07-21 03:33 libevent_extra.la
lrwxrwxrwx   1 root root       27 07-21 03:33 libevent_extra.so -> libevent_extra-1.4.so.2.1.3
-rwxr-xr-x   1 root root      831 07-21 03:33 libevent.la
lrwxrwxrwx   1 root root       21 07-21 03:33 libevent.so -> libevent-1.4.so.2.1.3
 

安装OK。

3. 安装memcached,同时需要安装中指定libevent的安装位置
[root@localhost software]# tar zxvf memcached-1.4.0.tar.gz 
[root@localhost memcached-1.4.0]# ./configure –with-libevent=/usr 
[root@localhost memcached-1.4.0]# make 
[root@localhost memcached-1.4.0]# make intall 

4. 测试是否成功安装memcached
[root@localhost memcached-1.4.0]# ls -al /usr/local/bin | grep memcached 
-rwxr-xr-x  1 root root  188225 07-21 03:35 memcached 

安装OK。

三. 如何启动 memcached 服务:
只需要启动一个 memcached 监护进程,监护进程不需要配置文件,只要在命令行里面加三四个参数就可以了:
[root@localhost bin]# memcached -d -m 100 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid 
-d: (run as a daemon) 选项是启动一个守护进程 
-m:(max memory to use for items in megabytes (default: 64 MB))是分配给Memcache使用的内存数量,单位是MB,我这里是100MB,
-u:(assume identity of <username> (only when run as root))是运行Memcache的用户,我这里是root,
-l:(interface to listen on)是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址127.0.0.1,
-p:是设置Memcache监听的端口,这里设置了11211,最好是1024以上的端口,
-c:选项是最大运行的并发连接数,默认是1024,这里设置了256,根据服务器的负载量来设定,
-P:(save PID in <file>, only used with -d option)是设置保存Memcache的pid文件,这里是保存在 /tmp/memcached.pid
 

注:也可以启动多个守护进程,不过端口不能重复。

四. 安装 Memcached 的PHP扩展:
在PHP中使用Memcached,有两种方式:
一种是安装PHP的memcached扩展。该扩展是用c写的,效率较高,需要在服务器上安装。
另外一种则是直接使用客户端的php-memcached-client类库。
下面是使用PECL中Memcache的专用扩展,因为毕竟是用C写的,效率高,而且安装部署起来也比较方便。
1. 在 http://pecl.php.net/package/memcache 选择相应想要下载的memcache版本。我下载的是:memcache-2.2.5.tgz 版本。
2. 安装 memcache
[root@localhost software]# tar zxvf memcache-2.2.5.tgz 
[root@localhost software]# cd memcache-2.2.5 
[root@localhost memcache-2.2.5]# /usr/bin/phpize 
[root@localhost memcache-2.2.5]# ./configure –enable-memcache –with-php-config=/usr/bin/php-config –with-zlib-dir 
[root@localhost memcache-2.2.5]# make 
[root@localhost memcache-2.2.5]# make install 
这步会有类似这样的提示:Installing shared extensions: /usr/local/php/modules
3. 把/etc/php.ini中的extension_dir = “./”修改为:extension_dir = "/usr/lib/php/modules"
4. 并添加: extension=memcache.so

也可执行以下shell命令,对php.ini文件的修改:
sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"/nextension = "memcache.so"/n#' /usr/local/webserver/php/etc/php.ini


五. 安装C/C++ Memcached客户端库:libmemcached
下载:http://download.tangent.org/libmemcached-0.32.tar.gz
1. 安装 libmemcached
[root@localhost src]# tar zxvf libmemcached-0.32.tar.gz 
[root@localhost src]# cd libmemcached-0.32 
[root@localhost libmemcached-0.32]# ./configure --prefix=/usr 
[root@localhost libmemcached-0.32]# make && make install 
2. 检查安装结果
[root@localhost src]# ls /usr/lib/libmemcache* //库文件
[root@localhost src]# ls /usr/include/libmemcached/* //头文件
[root@localhost src]# ls /usr/bin/mem* //命令行工具

六. 应用:
1. 启动 memcache 服务
[root@localhost bin]# memcached -d -m 100 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid 
2. 重启 Web 服务器
[root@localhost bin]# service httpd restart 






一、Memcache面向对象的常用接口包括:
Memcache::connect — 打开一个到Memcache的连接
Memcache::pconnect — 打开一个到Memcache的长连接
Memcache::close — 关闭一个Memcache的连接
Memcache::set — 保存数据到Memcache服务器上
Memcache::get — 提取一个保存在Memcache服务器上的数据
Memcache::replace — 替换一个已经存在Memcache服务器上的项目
Memcache::delete — 从Memcache服务器上删除一个保存的项目
Memcache::flush — 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)
Memcache::getStats — 获取当前Memcache服务器运行的状态

For More: http://cn.php.net/memcache

二、查看系统的运行状态:

stats
pid               Process id of this server process (memcache服务器的进程ID
uptime            Number of seconds this server has been running (服务器已经运行的秒数)
time              Current UNIX time according to the server (服务器当前的UNIX时间)
version           Version string of this server (memcache版本)
pointer_size      Current system pointer 当前操作系统的指针大小(32位系统一般是32bit)
rusage_user       Accumulated user time for this process (该进程累计的用户时间(秒:微妙))
rusage_system     Accumulated system time for this process (该进程累计的系统时间(秒:微妙))
curr_items        Current number of items stored by the server (服务器当前存储的内容数量
total_items       Total number of items stored by this server ever since it started (服务器启动以来存储过的内容总数
bytes             Current number of bytes used by this server to store items (服务器当前存储内容所占用的字节数)
curr_connections  Number of open connections (当前打开着的连接数量)
total_connections Total number of connections opened since the server started running (服务器运行以来接受的连接总数)
connection_structures Number of connection structures allocated by the server (服务器分配的连接结构的数量)
cmd_get             Cumulative number of retrieval requests (get命令(获取)总请求次数)
cmd_set             Cumulative number of storage requests (set命令(保存)总请求次数)
get_hits            Number of keys that have been requested and found present (请求成功的总次数)
get_misses          Number of items that have been requested and not found (请求失败的总次数)
threads             Current number of thread (当前线程数)
bytes_read          Total number of bytes read by this server from network (服务器从网络读取到的总字节数)
bytes_written       Total number of bytes sent by this server to network (服务器向网络发送的总字节数)
limit_maxbytes      Number of bytes this server is allowed to use for storage. (服务器在存储时被允许使用的字节总数)
evictions           Number of valid items removed from cache to free memory for new items (为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items))

其中,最关注最多的几个参数:
uptime:是memcached运行的秒数。
cmd_get:是查询缓存的次数。
cmd_get/uptime 结果是平均每秒请求缓存的次数——结果值越大,说明Memcached的利用率越高,站点的访问量大,如果太低,用文件系统缓存就可以了,根本不会体现出使用memcached的强大性能。
cmd_set:是设置key=>value的次数。整个memcached是个大hash,用cmd_get没有找到的内容,就会调用一下cmd_set写进缓存里。
get_hits:是缓存命中的次数。所谓的命中率 = get_hits/cmd_get * 100%。
get_misses:是缓存未命中的次数。get_misses加上get_hits就等于cmd_get。
stats:显示服务器信息、统计数据等
stats reset:清空统计数据

stats slabs:显示各个slab的信息,包括chunk的大小、数目、使用情况等
stats items:显示各个slab中item的数目和存储时长(最后一次访问距离现在的秒数)
quit:退出

三、利用shell命令操作Memcached
1、数据存储(key为wan,value为123)
set
2、数据取回
get
3、替换数据(将以wan为key存储的值替换为122)
replace
4、数值增加 1
incr
5、数值减少 2
decr
6、数据删除
delete
7、查看Memcached当时状态
printf “stats\r\n” | nc 127.0.0.1 11211
8、查看Memcached实时状态

watch “printf ‘stats\r\n’ | nc 127.0.0.1 11211″

watch

Memcached protocol 中英文档可以参考:

http://blog.s135.com/book/memcached/

四. 查看slabs的使用状况
使用memcached的创造着Brad写的名为 memcached-tool 的Perl脚本,可以方便地获得slab的使用情况(它将memcached的返回值整理成容易阅读的格式)。可以从下面的地址获得脚本:
http://code.sixapart.com/svn/memcached/trunk/server/scripts/memcached-tool
[root@localhost html]# vim memcached-tool
[root@localhost html]# chmod +x memcached-tool
[root@localhost html]# ./memcached-tool 127.0.0.1:11211
#  Item_Size   Max_age  1MB_pages Count   Full?
1      80 B        0 s               1           0      no
2     104 B       12175 s         1           1      no
3     176 B    1339587 s       33       196567  yes

各列的含义:
#: slab class编号
Item_Size: Chunk大小
Max_age: LRU内最旧的记录的生存时间
1MB_pages: 分配给Slab的页数
Count: Slab内的记录数
Full?: Slab内是否含有空闲chunk

五. 也可以图形化监控 Memcached 的运行状态
http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/
是一个PHP源文件,只需要修改源码中的用户名、密码以及数组$MEMCACHE_SERVERS 就可以了。





一、存储命令

存储命令的格式:

1
2
<command name> <key> <flags> <exptime> <bytes>
<data block>

参数说明如下:

<command name>set/add/replace
<key>查找关键字
<flags>客户机使用它存储关于键值对的额外信息
<exptime>该数据的存活时间,0表示永远
<bytes>存储字节数
<data block>存储的数据块(可直接理解为key-value结构中的value)

1、添加

(1)、无论如何都存储的set

set

这个set的命令在memcached中的使用频率极高。set命令不但可以简单添加,如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

可以通过“get 键名”的方式查看添加进去的记录:

set_get

如你所知,我们也可以通过delete命令删除掉,然后重新添加。

delete

(2)、只有数据不存在时进行添加的add

add

(3)、只有数据存在时进行替换的replace

replace

 

2、删除

delete

可以看到,删除已存在的键值和不存在的记录可以返回不同的结果。

 

二、读取命令

1、get

get命令的key可以表示一个或者多个键,键之间以空格隔开

get

2、gets

gets

可以看到,gets命令比普通的get命令多返回了一个数字(上图中为13)。这个数字可以检查数据是否发生改变。当key对应的数据改变时,这个多返回的数字也会改变。

3、cas

cas即checked and set的意思,只有当最后一个参数和gets所获取的参数匹配时才能存储,否则返回“EXISTS”。

cas

 

三、状态命令

1、stats

stats

 

2、stats items

statsitems
执行stats items,可以看到STAT items行,如果memcached存储内容很多,那么这里也会列出很多的STAT items行。

 

3、stats cachedump slab_id limit_num

我们执行stats cachedump 1 0 命令效果如下:

statscachedump

这里slab_id为1,是由2中的stats items返回的结果(STAT items后面的数字)决定的;limit_num看起来好像是返回多少条记录,猜的一点不错, 不过0表示显示出所有记录,而n(n>0)就表示显示n条记录,如果n超过该slab下的所有记录,则结果和0返回的结果一致。

statscachedump1
通过stats items、stats cachedump slab_id limit_num配合get命令可以遍历memcached的记录。

 

4、其他stats命令

如stats slabs,stats sizes,stats reset等等使用也比较常见。

statsother

 

四、其他常见命令

1、append

append

在现有的缓存数据添加缓存数据,如现有缓存的key不存在服务器响应为NOT_STORED。

 

2、prepend

和append非常类似,但它的作用是在现有的缓存数据添加缓存数据。

prepend

 

3、flush_all

flush_all

该命令有一个可选的数字参数。它总是执行成功,服务器会发送 “OK\r\n” 回应。它的效果是使已经存在的项目立即失效(缺省),或在指定的时间后。此后执行取回命令,将不会有任何内容返回(除非重新存储同样的键名)。 flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行(这是由memcached的懒惰检测和删除机制决定的)。

flush_all 效果是它导致所有更新时间早于 flush_all 所设定时间的项目,在被执行取回命令时命令被忽略。

4、其他命令

memcached还有很多命令,比如对于存储为数字型的可以通过incr/decr命令进行增减操作等等,这里只列出开发和运维中经常使用的命令,其他的不再一一举例说明。










本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1727469,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android自定义金额输入键盘_Android 自定义控件 - 仿支付宝数字键盘

原标题&#xff1a;Android 自定义控件 - 仿支付宝数字键盘简介在一些带有支付功能的 App 中&#xff0c;输入的密码一般只能是纯数字&#xff0c;虽然我们可以指定 EditText 输入框只能输入数字&#xff0c;但是为了提供用户的使用体验&#xff0c;我们往往更倾向于使用自定义…

tfs文件系统之NS配置管理

NameServer简称NS 充当着客户与DS的交互桥梁 1.NS配置文件修改&#xff1a; [public] #log file size default 1GB log_size1073741824 #log file num default 64 log_num 64 #log file level default debug log_leveldebug #main queue size default 10240 task_max_queue_…

插件式架构设计实践:插件式系统架构设计简介

本系列博文将使用微软RIA技术解决方案Silverlight以及扩展性管理框架Managed Extensibility Framework&#xff08;MEF&#xff09;&#xff0c;以插件式架构设计为导线&#xff0c;分享本人在从事基于微软Silverlight技术构建的RIA系统中实施插件式系统架构设计的相关技术和经…

五种方式让你在java中读取properties文件内容不再是难题

2019独角兽企业重金招聘Python工程师标准>>> 方式1.通过context:property-placeholder加载配置文件jdbc.properties中的内容 <context:property-placeholder location"classpath:jdbc.properties" ignore-unresolvable"true"/> 上面的配置…

hive metastore mysql_Hive MetaStore的结构

本篇主要是介绍Hive在MySQL中存储的源数据的表结构。Hive MetaStore 数据库表结构图test.pngTBLS记录数据表的信息字段解释TBL_ID在hive中创建表的时候自动生成的一个id&#xff0c;用来表示&#xff0c;主键CREATE_TIME创建的数据表的时间&#xff0c;使用的是时间戳DBS_ID这个…

更改阿里云域名解析台里某个域名绑定的IP之后不能解析到新IP

1.由于要撤销一组负载均衡&#xff0c;所以需要更改阿里云域名解析台里某个域名由原来绑定的负载均衡公网IP换到服务器公网IP 2.在服务器上nginx指定了域名访问&#xff0c;开启nginx服务 3.暂时关闭该组负载均衡服务 4.实现通过服务器IP可以访问项目&#xff0c;域名访问不了 …

秒懂数据类型的真谛—Python基础前传(4)

一切编程语言都是人设计的&#xff0c;既然是人设计的&#xff0c;那么设计各种功能的时候就一定会有它的道理&#xff0c;那么设计数据类型的用意是什么呢&#xff1f; (一) 基本数据类型 基本数据类型&#xff1a; 数字 int字符串 str布尔值 bool列表 list元组 tuple字典 dic…

wordpress配置SMTP服务发送邮件

使用SMTP服务发送邮件&#xff0c;需要使用一个插件&#xff1a;http://wordpress.org/extend/plugins/wp-mail-smtp/ 下载完成以后解压到plugin目录&#xff0c;然后在插件中启用这个插件。 配置SMTP服务 SMTP的选项 发送一封测试邮件吧 >>> 本文转自齐师傅博客园博客…

使用Server 2008新GPO做驱动器映射

在Server 2003的时代&#xff0c;我们为用户做网络驱动器映射(以下就直接称为Map Network Drive&#xff09;, 通常可能有以下的做法. 方法一: 做一个登录脚本&#xff0c;放在DC的netlogon目录&#xff0c;接着在“Active Directory用户和计算机”控制台的用户属性的Logon S…

Linux 内核调试器 调试指南

Linux 内核调试器内幕 KDB 入门指南 Hariprasad Nellitheertha (nhariprain.ibm.com), 软件工程师, IBM简介&#xff1a; 调试内核问题时&#xff0c;能够跟踪内核执行情况并查看其内存和数据结构是非常有用的。Linux 中的内置内核调试器 KDB 提供了这种功能。在本文中您将了解…

学习API HOOK,编写了一个winsock 的封包抓取程序,可免费使用;

开发环境是:windows 2000 delphi 7 监视API&#xff1a;recv,recvfrom,WSARecvEx,send,sendto,accept,bind,closesocket,connect socket 版本&#xff1a;wsock32.dll/*ws2_32.dll(暂时有兼容问题) 目前还不支持修改封包&#xff1b; 当前实现针对某个进程或多个选定进程的通…

MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据&#xff0c;算是对MyBatis有一个初步的入门了&#xff0c;今天讲解一下如何使用MyBatis对users表执行CRUD操作。本文中使…

cifs mount 挂载共享目录_安装cifsutils解决linux挂载windows共享文件夹

1、安装mount.cifs软件包yum install cifs-utils -y如果是离线环境&#xff0c;请参考我的另一篇文章https://blog.csdn.net/qq_37119960/article/details/1083313732、开始挂载mount.cifs //192.168.1.110/share /usr/local/winshare -o useradministrator,pass123456参数说明…

JFinal框架

FJinal过滤器(tomcat) 创建java类继承JFinalConfig 会实现六个方法(有一个是拦截器的方法好像是,那个我好像看的跟struts2一样但是又没看懂暂时不写) Controller层的测试方法 Entity实体类 常用方法 查询 增加 删除 修改 转载于:https://www.cnblogs.com/guanzhuang/p/8317949.…

掌握 Linux 调试技术 使用 GDB 调试 Linux 软件

简介&#xff1a; 您可以用各种方法来监控运行着的用户空间程序&#xff1a;可以为其运行调试器并单步调试该程序&#xff0c;添加打印语句&#xff0c;或者添加工具来分析程序。本文描述了几种可以用来调试在 Linux 上运行的程序的方法。我们将回顾四种调试问题的情况&#xf…

集合之二:迭代器

迭代器的简单使用 在遍历容器时&#xff0c;我们可以使用for循环或者是增强for循环&#xff0c;但是不同的集合结构在遍历时&#xff0c;我们要针对集合特点采取不同的方式&#xff0c;比如List是链表&#xff0c;我们可以直接当做数组处理&#xff0c;但Map是Key—Value的形式…

开源Java反编译工具

Java 反编译器 1. JD-GUI JD-GUI 是一个用 C 开发的 Java 反编译工具&#xff0c;由 Pavel Kouznetsov开发&#xff0c;支持Windows、Linux和苹果Mac Os三个平台。 而且提供了Eclipse平台下的插件JD-Eclipse。JD-GUI不需要安装&#xff0c;直接点击运行&#xff0c;可以反编译j…

python自动取款机程序_python ATM取款机----运维开发初学(上篇)

自动取款机基本功能&#xff1a;可以存取转账&#xff0c;刷卡信息查询&#xff0c;银行卡号历史信息查询&#xff0c;消费记录查询&#xff0c;修改密码。思维导图如下&#xff1a;数据库设计&#xff1a;mysql> desc balan_list; #保存账号交易记录option_type-----------…

阿里服务器+Centos7.4+Tomcat+JDK部署

适用对象 本文档介绍如何使用一台基本配置的云服务器 ECS 实例部署 Java web 项目。适用于刚开始使用阿里云进行建站的个人用户。 配置要求 这里列出的软件版本仅代表写作本文档使用的版本。操作时&#xff0c;请您以实际软件版本为准。 操作系统&#xff1a;CentOS 7.4Tomcat …

php输出mysqli查询出来的结果

php连接mysql我有文章已经写过了&#xff0c;这篇文章主要是介绍从mysql中查询出结果之后怎么输出的问题。 一&#xff1a;mysqli_fetch_row(); 查询结果&#xff1a;array([0]>小王) 查询&#xff1a; [php] view plaincopy while ($row mysqli_fetch_assoc($result)) …