Memcached常用命令以及使用说明
来源:互联网 发布:程序员 架构师 编辑:程序博客网 时间:2024/06/03 21:53
memcached是高性能的分布式内存缓存服务器,一般使用的目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态WEB应用的速度;许多WEB应用的数据都保存在关系数据库中,应用服务器从中读取数据,并且将其显示在浏览器中,但是随着访问次数的增加大,访问的集中,就会出现数据库的负担加重,数据库响应恶化,网站显示延迟,等问题会出现;
这时,memcached是高性能的分布式内存缓存服务器,一般的使用目的通过缓存数据库的查询结果,使得应用服务器能够在一定程度上可以从他里面读取数据,减少了数据库的压力,提高了了web应用速度;
Linux下memcached的使用:
一,安装memcached
Memcached的安装依赖Libevent,首先安装Libevent:
- sean@sean:~$ tar -xzf libevent-1.4.14b-stable.tar.gz
- sean@sean:~$ cd libevent-1.4.14b-stable/
- sean@sean:~/libevent-1.4.14b-stable$ sudo ./configure -prefix /usr
- sean@sean:~/libevent-1.4.14b-stable$ sudo make
- sean@sean:~/libevent-1.4.14b-stable$ sudo make install
- sean@sean:~/libevent-1.4.14b-stable$ sudo make clean
Libevent将会被安装至/usr/lib下
- sean@sean:/usr/lib$ cd /usr/lib/
- sean@sean:/usr/lib$ ll | grep libevent*
- Binary file libevent-1.4.so.2.2.0 matches
- libevent.la:dlname='libevent-1.4.so.2'
- libevent.la:library_names='libevent-1.4.so.2.2.0 libevent-1.4.so.2 libevent.so'
- Binary file libevent.so matches
然后安装Memcached:
- sean@sean:~$ tar -xzf memcached-1.4.25.tar.tar
- sean@sean:~$ cd memcached-1.4.25/
- sean@sean:~/memcached-1.4.25$ sudo ./configure -with-libevent=/usr
- sean@sean:~/memcached-1.4.25$ sudo make
- sean@sean:~/memcached-1.4.25$ sudo make install
- sean@sean:~/memcached-1.4.25$ sudo make clean
Memcached将会被安装至/usr/local/bin下:
- sean@sean:/usr/local/bin$ ll
- total 544
- drwxr-xr-x 2 root root 4096 4月 21 21:32 ./
- drwxr-xr-x 10 root root 4096 2月 18 07:12 ../
- -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的内存使用率并不是很高
查看进程发现服务启动成功:
- sean@sean:/usr/local/bin$ ps -ef|grep memcached
- sean 17944 8981 0 21:28 ? 00:00:00 ./memcached -m 64 -p 9999 -u root -d -vvv
- 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就把他存放在第一台服务器上;
阅读全文0 0
- Memcached常用命令以及使用说明
- Memcached常用命令及使用说明
- Memcached常用命令及使用说明
- memcached 常用命令及使用说明
- Memcached常用命令及使用说明
- Memcached常用命令及使用说明
- memcached 常用命令及使用说明
- Memcached常用命令及使用说明
- Memcached常用命令及使用说明
- Memcached常用命令及使用说明
- Memcached常用命令及使用说明
- Memcached常用命令及使用说明
- Memcached常用命令及使用说明
- Memcached常用命令及使用说明
- Memcached常用命令及使用说明
- Memcached常用命令及使用说明
- Memcached常用命令及使用说明
- Memcached常用命令及使用说明
- Java中equals和==的区别
- Python的logging使用
- 别被Express的API搞晕了
- CSS的@media语法实现页面端手机端的自适应
- oracle——监听(二、sqlplus连接数据库)
- Memcached常用命令以及使用说明
- 二项分布和多项分布
- Android系统广播大全及开机自启动的Service
- 输入两个链表,找出它们的第一个公共结点
- ADO.NET的数据库访问
- Eclipse 设置新建文件后编码默认都为 utf-8 的方法
- UDP,TCP,SCTP区别
- Javscript删除数组中指定元素
- 【内功篇】C语言的输入输出浅析(一)