Memcached的基础使用

1、Memcached是一种高性能key/value数据缓存系统
memcached的特点:
1)协议简单
memcached的服务器客户端通信并不使用复杂的XML等格式, 而使用简单的基于文本行的协议。因此,通过telnet 也能在memcached上保存数据、取得数据。
2)基于libevent事件处理
libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能 封装成统一的接口。即使对服务器的连接数增加,也能发挥IO的性能。 memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。
3)基于内存完成数据存储LRU算数(最近最少使用算法);为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。 由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。 另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。 memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
4)memcached互不通信的集群:分布式;memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。 各个memcached不会互相通信以共享信息。

在这里插入图片描述

2、Memcached的安装与启动

[root@slave ~]# yum install memcached -y
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
jyy                                                                                            | 4.1 kB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package memcached.x86_64 0:1.4.15-9.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

======================================================================================================================
 Package                      Arch                      Version                          Repository              Size
======================================================================================================================
Installing:
 memcached                    x86_64                    1.4.15-9.el7                     jyy                     84 k

Transaction Summary
======================================================================================================================
Install  1 Package

Total download size: 84 k
Installed size: 172 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : memcached-1.4.15-9.el7.x86_64                                                                      1/1 
  Verifying  : memcached-1.4.15-9.el7.x86_64                                                                      1/1 

Installed:
  memcached.x86_64 0:1.4.15-9.el7                                                                                     

Complete!

[root@slave ~]# systemctl start memcached.service
[root@slave ~]# ss -tunlp |grep memcached
tcp    UNCONN     0      0                      *:11211                 *:*      users:(("memcached",1871,28))
tcp    UNCONN     0      0                     :::11211                :::*      users:(("memcached",1871,29))
tcp    LISTEN     0      128                    *:11211                 *:*      users:(("memcached",1871,26))
tcp    LISTEN     0      128                   :::11211                :::*      users:(("memcached",1871,27))
[root@slave ~]# 

3、启动Memcached常用参数:
-p < num > :设置TCP端口号;默认设置为: 11211;
-U < num > :UDP监听端口;默认: 11211, 0 时关闭;
-l <ip_addr> :绑定地址,默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问;
-d :以daemon方式运行
-u < username >:绑定使用指定用于运行进程< username >
-m < num >:允许最大内存用量,单位M (默认: 64 MB)
-P < file > :将PID写入文件,这样可以使得后边进行快速进程终止, 需要与-d 一起使用

4、基本命令
1)set命令用于向缓存添加新的键值对。如果键已经存在,则之前的值将被替换。

[root@slave ~]# telnet localhost 11211      //连接本地11211端口
Trying ::1...
Connected to localhost.
Escape character is '^]'.
set mykey 0 10 3      //设置键为mykey;0表示在缓存中保存键值对的时间长度(以秒为单位,0 表示永远);10表示value值得保存时长;3表示设置的值的字节长度
aaa                       //值为aaa
STORED
get mykey            //查看mykey的值
VALUE mykey 0 3
aaa                    //返回aaa
END
get mykey          //十秒钟过去值便消失了
END

2)append命令在一个键后面添加字节值

set mykey 0 60 11   
hello world
STORED
get mykey
VALUE mykey 0 11
hello world
END
append mykey 0 60 1     //在mykey键的后面添加1个字节
a                                   //添加的值
STORED
get mykey
VALUE mykey 0 12
hello worlda            //添加成功
END

3)prepend命令在一个键的前面添加字节值

set mykey 0 60 11
hello world
STORED
prepend mykey 0 60 4     //在mykey键的前面添加四个字节
hi! 
STORED
get mykey
VALUE mykey 0 15
hi! hello world           //返回成功
END

4)delete命令用来删除一个键的值

set mykey 0 60 11
hello world
STORED
get mykey   
VALUE mykey 0 11
hello world
END
delete mykey
DELETED
get mykey              //再次查看mykey的值便没有结果返回
END

5)incr命令在某一个键的数值上加上某值

set mykey 0 60 1   
5                          //设置mykey的值为5
STORED
get mykey
VALUE mykey 0 1
5
END
incr mykey 3         //在mykey的值的基础上加3
8
get mykey
VALUE mykey 0 1
8                     //返回值则变为了8
END

6)decr命令在某一个键的数值上减去某值

set mykey 0 60 1
5                //设置mykey的值为5
STORED
decr mykey 3            //减去3
2
get mykey
VALUE mykey 0 1
2                        //mykey的返回值则为2
END

7)flush_all清空所有的键值缓存

set mykey1 0 0 3
abc
STORED
set mykey2 0 0 3
def
STORED
get mykey1
VALUE mykey1 0 3
abc
END
get mykey2 
VALUE mykey2 0 3
def
END
flush_all                 //执行清空操作
OK
get mykey1           //没有值返回
END
get mykey2          
END

8)stats命令转储所连接的 memcached 实例的当前统计数据。执行 stats 命令显示了关于当前 memcached 实例的信息:

stats
STAT pid 1871                              //进程ID
STAT uptime 2663                           //服务器运行秒数
STAT time   1549449725                     //服务器当前unix时间戳
STAT version 1.4.15                        //服务器版本
STAT libevent 2.0.21-stable
STAT pointer_size 64                       //操作系统字大小(这台服务器是64位的)
STAT rusage_user 0.079676                  //进程累计用户时间
STAT rusage_system 0.112874                //进程累计系统时间
STAT curr_connections 10                   //当前打开连接数
STAT total_connections 11                  //曾打开的连接总数
STAT connection_structures 131             //服务器分配的连接结构数
STAT reserved_fds 20
STAT cmd_get 27                            //执行get命令总数
STAT cmd_set 17                            //执行set命令总数
STAT cmd_flush 1                           //指向flush_all命令总数
STAT get_hits 14                           //get命中次数
STAT get_misses 13                         //get未命中次数
STAT delete_misses 0                       //delete未命中次数
STAT delete_hits 1                         //delete命中次数
STAT incr_misses 0                         //incr未命中次数
STAT incr_hits 2                           //incr命中次数
STAT decr_misses 0                         //decr未命中次数
STAT decr_hits 0                           //decr命中次数
STAT cas_misses 0                          //cas未命中次数
STAT cas_hits 0                            //cas命中次数
STAT cas_badval 0                          //使用擦拭次数
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 15785                      //读取字节总数
STAT bytes_written 15222                   //写入字节总数
STAT limit_maxbytes 67108864               //分配的内存数(字节)
STAT accepting_conns 1                     //目前接受的链接数
STAT listen_disabled_num 0                
STAT time_in_listen_disabled_us 0
STAT threads 4                             //总线程数
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT conn_yields 0
STAT bytes 0                               //存储item字节数
STAT curr_items 0                          //item个数
STAT total_items 34                        //item总数
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0                           //为获取空间删除item的总数
STAT reclaimed 0
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0

9)stats slabs 显示各个slab的信息,包括chunk的大小、数目、使用情况等

stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 0
STAT 1:free_chunks 10922
STAT 1:free_chunks_end 0
STAT 1:mem_requested 0
STAT 1:get_hits 14
STAT 1:cmd_set 17
STAT 1:delete_hits 1
STAT 1:incr_hits 2
STAT 1:decr_hits 1
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT 1:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048512
END

5、Memcached的内存存储
slab allocation:整理内存以进行复用;
age:分配给slab用于再次分割为chunk的内存空间
chunk:用于缓存缓存对象的空间;
slab class:特定大小的chunk组合而成的组;

1)调整chunk size大小:

[root@slave ~]# memcached -u memcached  -vv -f 2.0
slab class   1: chunk size        96 perslab   10922
slab class   2: chunk size       192 perslab    5461
slab class   3: chunk size       384 perslab    2730
slab class   4: chunk size       768 perslab    1365
slab class   5: chunk size      1536 perslab     682
slab class   6: chunk size      3072 perslab     341
slab class   7: chunk size      6144 perslab     170
slab class   8: chunk size     12288 perslab      85
slab class   9: chunk size     24576 perslab      42
slab class  10: chunk size     49152 perslab      21
slab class  11: chunk size     98304 perslab      10
slab class  12: chunk size    196608 perslab       5
slab class  13: chunk size    393216 perslab       2
slab class  14: chunk size   1048576 perslab       1
failed to listen on TCP port 11211: Address already in use
//调整chunk size增长因子为2倍

2)memcached-tool查看stats信息

[root@slave ~]# memcached-tool 127.0.0.1
  #  Item_Size  Max_age   Pages   Count   Full?  Evicted Evict_Time OOM
  1      96B        25s       1       1     yes        0        0    0

#:slab class的编号;
Ltem_size:Chunk大小;
Max_age:缓存对象的生存时间;
Pages:分配给slab内存页数;
Count:slab内的记录数;
Full:slab内是否仍有空闲chunk;


猜你喜欢

转载自blog.csdn.net/Micky_Yang/article/details/86768979