Memcached常用命令以及使用说明

来源:互联网 发布:程序员 架构师 编辑:程序博客网 时间:2024/06/03 21:53

memcached是高性能的分布式内存缓存服务器,一般使用的目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态WEB应用的速度;许多WEB应用的数据都保存在关系数据库中,应用服务器从中读取数据,并且将其显示在浏览器中,但是随着访问次数的增加大,访问的集中,就会出现数据库的负担加重,数据库响应恶化,网站显示延迟,等问题会出现;

这时,memcached是高性能的分布式内存缓存服务器,一般的使用目的通过缓存数据库的查询结果,使得应用服务器能够在一定程度上可以从他里面读取数据,减少了数据库的压力,提高了了web应用速度;



Linux下memcached的使用:

一,安装memcached

Memcached的安装依赖Libevent,首先安装Libevent:

  1. sean@sean:~$ tar -xzf libevent-1.4.14b-stable.tar.gz   
  2. sean@sean:~$ cd libevent-1.4.14b-stable/  
  3. sean@sean:~/libevent-1.4.14b-stable$ sudo ./configure -prefix /usr  
  4. sean@sean:~/libevent-1.4.14b-stable$ sudo make  
  5. sean@sean:~/libevent-1.4.14b-stable$ sudo make install  
  6. sean@sean:~/libevent-1.4.14b-stable$ sudo make clean  

Libevent将会被安装至/usr/lib下

  1. sean@sean:/usr/lib$ cd /usr/lib/  
  2. sean@sean:/usr/lib$ ll | grep libevent*  
  3. Binary file libevent-1.4.so.2.2.0 matches  
  4. libevent.la:dlname='libevent-1.4.so.2'  
  5. libevent.la:library_names='libevent-1.4.so.2.2.0 libevent-1.4.so.2 libevent.so'  
  6. Binary file libevent.so matches

然后安装Memcached:

  1. sean@sean:~$ tar -xzf memcached-1.4.25.tar.tar  
  2. sean@sean:~$ cd memcached-1.4.25/  
  3. sean@sean:~/memcached-1.4.25$ sudo ./configure -with-libevent=/usr  
  4. sean@sean:~/memcached-1.4.25$ sudo make  
  5. sean@sean:~/memcached-1.4.25$ sudo make install  
  6. sean@sean:~/memcached-1.4.25$ sudo make clean  

Memcached将会被安装至/usr/local/bin下:

  1. sean@sean:/usr/local/bin$ ll  
  2. total 544  
  3. drwxr-xr-x  2 root root   4096  4月 21 21:32 ./  
  4. drwxr-xr-x 10 root root   4096  2月 18 07:12 ../  
  5. -rwxr-xr-x  1 root root 545998  4月 21 21:32 memcached* 

二,启动memcached服务

-m:分配给memcached的最大内存,以M为单位

-p:服务监听的TCP端口,默认值是11211

-d:服务当做守护进程启动

-vv:打印详细信息

-f:增长因子,默认值是1.25,指定的值必须比1大

    sean@sean:/usr/local/bin$ ./memcached -m 64 -p 9999 -d -vv      sean@sean:/usr/local/bin$ slab class   1: chunk size        96 perslab   10922      slab class   2: chunk size       120 perslab    8738      slab class   3: chunk size       152 perslab    6898      slab class   4: chunk size       192 perslab    5461      slab class   5: chunk size       240 perslab    4369      slab class   6: chunk size       304 perslab    3449      slab class   7: chunk size       384 perslab    2730      slab class   8: chunk size       480 perslab    2184      slab class   9: chunk size       600 perslab    1747      slab class  10: chunk size       752 perslab    1394      slab class  11: chunk size       944 perslab    1110      slab class  12: chunk size      1184 perslab     885      slab class  13: chunk size      1480 perslab     708      slab class  14: chunk size      1856 perslab     564      slab class  15: chunk size      2320 perslab     451      slab class  16: chunk size      2904 perslab     361      slab class  17: chunk size      3632 perslab     288      slab class  18: chunk size      4544 perslab     230      slab class  19: chunk size      5680 perslab     184      slab class  20: chunk size      7104 perslab     147      slab class  21: chunk size      8880 perslab     118      slab class  22: chunk size     11104 perslab      94      slab class  23: chunk size     13880 perslab      75      slab class  24: chunk size     17352 perslab      60      slab class  25: chunk size     21696 perslab      48      slab class  26: chunk size     27120 perslab      38      slab class  27: chunk size     33904 perslab      30      slab class  28: chunk size     42384 perslab      24      slab class  29: chunk size     52984 perslab      19      slab class  30: chunk size     66232 perslab      15      slab class  31: chunk size     82792 perslab      12      slab class  32: chunk size    103496 perslab      10      slab class  33: chunk size    129376 perslab       8      slab class  34: chunk size    161720 perslab       6      slab class  35: chunk size    202152 perslab       5      slab class  36: chunk size    252696 perslab       4      slab class  37: chunk size    315872 perslab       3      slab class  38: chunk size    394840 perslab       2      slab class  39: chunk size    493552 perslab       2      slab class  40: chunk size    616944 perslab       1      slab class  41: chunk size    771184 perslab       1      slab class  42: chunk size   1048576 perslab       1      <26 server listening (auto-negotiate)      <27 server listening (auto-negotiate)      <28 send buffer was 212992, now 268435456      <32 send buffer was 212992, now 268435456      <31 server listening (udp)      <35 server listening (udp)      <30 server listening (udp)      <34 server listening (udp)      <29 server listening (udp)      <33 server listening (udp)      <28 server listening (udp)      <32 server listening (udp)


从日志信息中,我们可以了解到很多东西

首先就是memcached的内存管理机制,memcached会将内存分为数个大小相等的slab,每个slab又按固定大小分成数个chunk,随着slab编号的增加,slab中chunk的大小按一定比率增长

从日志中可以看到,memcached将内存分为了42个大小均为1M的slab,而每个slab又分为大小相同的数个chunk,比如slab1中每个chunk的大小为120B,slab1中总共有8738个这样的chunk,而slab42中每个chunk的大小为1M,所以slab42中只能有一个chunk,随着slab编号的增加,slab中chunk的大小按1.25的比率增长(slab1:120,slab2:150,150/120=1.25,正好是-f指定的增长因子的默认值)

slab5中每个chunk的大小为240B,当我要存放200B的数据时,则会选择slab5中的一个chunk存放数据,如果slab5中的chunk都被使用了怎么办?没关系,找到一个最近最少使用(LRU:least recently used)的chunk,将新数据存入其中,即使slab6中有空闲的chunk,因此当memcached中保存数据的大小基本一致时,增长因子过大将导致memcahed的内存使用率并不是很高

查看进程发现服务启动成功:

  1. sean@sean:/usr/local/bin$ ps -ef|grep memcached  
  2. sean      17944   8981  0 21:28 ?        00:00:00 ./memcached -m 64 -p 9999 -u root -d -vvv  
  3. sean      17951  14900  0 21:28 pts/15   00:00:00 grep --color=auto memcached

三、连接和退出

telnet 127.0.0.1 11211

quit

四,基本memcached命令

memcached最基本的命令:
set

add

replace

get

delete

前三个命令用于操作存储在memcached中的键值对的标准修改命令。标准语法都是如下所示:

command <key> <flag> <expiration time><bytes>

参数说明如下:

command set/add/replace

key值用于查找缓存值

flags可以包括键值对的整形参数,客户机存储他用于保存

expriation time在缓存中保持键值对的时间

bytes 在缓存中存储的字节数

value 存储的值

3.1  set 用于向缓存中添加新的键值对,如果键存在,那么新的键将会替换旧的键

set userid 0 0 512345STORED
如果使用 set 命令正确设定了键值对,服务器将使用单词 STORED 进行响应。本示例向缓存中添加了一个键值对,其键为userId,其值为12345。并将过期时间设置为 0,这将向 memcached 通知您希望将此值存储在缓存中直到删除它为止。
3.2 add 仅当缓存中不从在键的时候,才会向缓存中存入键值队,如果已经存在键值对,那么原来的键值对不会改
add userid 0 0 6123456NOT_STORED
add companyid 0 0 3567STORED3.3 replace 仅当缓存中存在 键时,该命令才有效,否则会收到NOT_STOREreplace  accountid 0 0 567890NOT_STOREDset accountid 0 0 567890STOREDreplace accountid 0 0 555555STOREDreplace accountid 0 0 6666666STORED最后俩个命令是get/delete语法:command <key>3.4 get:当缓存中存在时,就会得到数据,当缓存中不存在的时候,什么都的不到,如下所示。get accountidVALUE accountid 0 6666666ENDget bobEND3.4 delete:当缓存中存在该数据时,会删除该数据,当缓存中不存在该数据时,返回NOT_FOUNDdelete accountid DELETEDdelete accountidNOT_FOUND3.5 flush_all:清理缓存中的所有名称/键值,如果你想将缓存重新置与干净的状态,就可以使用该命令set userid 0 0 555555STOREDget userid    VALUE userid 0 555555ENDflush_allOKget useridENDget accountidEND3.6追加与清楚命令 append 将数据追加到当前缓存数据之后,当缓存数据存在时才存储
set username 0 0 8wayne173STOREDget usernameVALUE username 0 8wayne173ENDappend username 0 0 5_agesSTOREDget usernameVALUE username 0 13wayne173_agesEND

3.7 prepend
prepend 将数据追加到当前缓存数据的之前,当缓存数据存在时才存储。

set username 0 0 8wayne173STOREDget usernameVALUE username 0 8wayne173ENDprepend username 0 0 5name_STOREDget usernameVALUE username 0 13name_wayne173END



查看memcached的状态:

先启动memcached:cd /usr/local/bin ./memcached -m 64 -p 9999 -d,然后在另一个终端输入以下内容

lxn@lxn-Inspiron-3442:~$ telnet 127.0.0.1 9999Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.statsSTAT pid 3291STAT uptime 688STAT time 1509766889STAT version 1.2.0STAT pointer_size 64STAT rusage_user 0.032000STAT rusage_system 0.012000STAT curr_items 0STAT total_items 0STAT bytes 0STAT curr_connections 2STAT total_connections 3STAT connection_structures 3STAT cmd_get 0STAT cmd_set 0STAT get_hits 0STAT get_misses 0STAT bytes_read 7STAT bytes_written 0STAT limit_maxbytes 67108864END
memcached的特征

(1)协议简单;基于文本行的协议可以通过telnet能在memcached上访问数据;

(2)基于libevent的事件处理;

(3)memcached不互相通信;

XML(extensiable makeable lauguage):可扩展的标记语言,是一种数据存储语言;

XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展示数据。事实上XML与其他数据表现形式最大的不同是:他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。

XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。

内置内存的存储方式:

memcached保存的数据都放在内置内存中,所以重启电脑或者重新启动操作系统都会使原来保存的数据消失,当内存达到指定的值后他会使用LRU算法将不用的数据删除掉;

不互相通信的分布式:

memcached不互相通信所以也不共享数据,服务器并不会分布式,这主要取决于客户端的算法;假设客户端有三台:node1,node2,node3;

 

接下来获取保存的数据,首先应用程序也是先把get("  tokyo  "),将其传给函数库,函数库使用相同的算法,就能找到之前存过这个数据的服务器,然后把它们取出来;


客户端使用的算法有俩种:

(1)根据服务器的余数法

   根据所存字符串的哈希值然后除以服务器的个数所得余数,作为选择服务器的标准;

(2)Cosistent Hashing算法

   首先将计算机的节点数通过哈希算法映射到0~2^23的圆上,然后将键值通过相同的哈希算法映射到该圆上,存键值映射的位置顺时针开始找第一代出现的服务器,就把他的值存放在该服务器上,这样他收到服务器的影响就不会很大;如果超过了2^23就把他存放在第一台服务器上;


原创粉丝点击