阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Memcached的安装配置及将PHP的session保存在Memcached中

140次阅读
没有评论

共计 18450 个字符,预计需要花费 47 分钟才能阅读完成。

Memcached 是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对 Database 的访问来加速 web 应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API 调用或页面引用结果的直接数据,如字符串、对象等。

Memcached 现已成为 mixi、hatena、Facebook、Vox、LiveJournal 等众多服务中提高 Web 应用扩展性的重要因素。

Memcached 有以特点

1. 简单 key/value 存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成;

2. 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期;

3. 各服务器间彼此无视:不在服务器间进行数据同步;

4. O(1) 的执行效率

5. 清理超期数据:默认情况下,Memcached 工作在 Lazy 模式下,是一个 LRU(最近最少使用)缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached 不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached 也不会真正按期限清理缓存,而仅是当 get 命令到达时检查其时长;但是键一旦过期,则再次查询不会返回结果

Memcached 虽然是一个键值存储 server, 但是它本身无法决定缓存那些数据,而是由客户端决定的键名,键值,缓存时长,标志位等

Memcached 可以基于文本或者二进制上传和下载数据

Memcached 将所有数据缓存再自己的内存中,并不会进行持久存储,且它认为自己也仅仅是一个缓存 server, 其上的数据丢失并不影响原数据,仅仅对服务有所影响

不同的 memcached 服务器之间不能进行通信,也不监控对方心跳信息,client 端可以根据调度器如 Nginx、haproxy、lvs 等基于持久连接将数据缓存在多台 memcached 上(为了能够保证始终能够在同一个 memcached 找到同一个键,就需要对键做哈希运算,如将键做一定运算后 /memcached 的个数,再取余,根据余数将其存储在固定 memcached 服务器上,这样只要知道键一计算,就可以知道它在哪个 server 上存着;但这个取余法有个致命缺陷就是,万一挂掉或多了一个 memcached 服务器,其同一个键取余结果就会改变,就再也不能根据原来计算方法找到其对应的键值,即所有 memcached 上的缓存都失效)

这时就可以使用一致性哈希运算:1 到 2^32 之间取几个对应区间对应每台服务器,然后对键 /2^32 取余,然后根据余数顺时针找最近服务器进行缓存,这样一旦挂了或加了一个 memcached 其结果也只让一台服务器上的缓存失效

Memcached 有两个很重要组件:

1:buddy system(伙伴系统)为了保证内存中的空间连续可用 buddy system 会将临近的空间碎片合并为一个大的连续空间,避免了内存碎片的产生

2:slab allocator:当要存储小于内存页面大小(4K)数据时如存储一个 128 字节的数据,为了节省空间,slab allocator 会将一个 4K 的内存页提前划分为许多 128 字节的块,将其存在里面,然后标记此块已近使用,而数据释放后也不会销毁这个 128 字节的块,会提供给以后的数据存储使用。并且 slab allocator slab 为不同大小的数据结构提前准备各种不同大小的内存块,存储时选择与它大小最近,且比它大的块进行存储,这样就提高了内存的利用效率

memcached 依赖于 libevent API,因此要事先安装之,项目主页:http://libevent.org/,且 memcached 是基于 Event_Driven(事件驱动)的 I / O 机制,而 event_driven 是由 libevent 这个库提供的

[root@node1 libevent-2.0.22-stable]# ./configure –prefix=/usr/local/libevent

[root@node1 libevent-2.0.22-stable]# make && make install

[root@node1 local]# echo “/usr/local/libevent/lib/” > /etc/ld.so.conf.d/libevent.conf

[root@node1 local]# ldconfig -v

[root@node1 ~]# yum install -y cyrus-sasl-devel

装 memcached 的服务端 memcached memcached 官网 www.memcached,org

[root@node1 tool]# tar memcached-1.4.33.tar.gz

[root@node1 tool]# cd memcached-1.4.33

[root@node1 memcached-1.4.33]# ./configure –enable-sasl –prefix=/usr/local/memcached –with-libevent=/usr/local/libevent

[root@node1 memcached-1.4.33]# make && make install

-l <ip_addr>:指定进程监听的地址;

-d: 以服务模式运行;

-u <username>:以指定的用户身份运行 memcached 进程;

-m <num>:用于缓存数据的最大内存空间,单位为 MB,默认为 64MB;

-c <num>:最大支持的并发连接数,默认为 1024;

-p <num>: 指定监听的 TCP 端口,默认为 11211;

-U <num>:指定监听的 UDP 端口,默认为 11211,0 表示关闭 UDP 端口;

-t <threads>:用于处理入站请求的最大线程数,仅在 memcached 编译时开启了支持线程才有效;

-f <num>:设定 Slab Allocator 定义预先分配内存空间大小固定的块时使用的增长因子;

-M:当内存空间不够使用时返回错误信息,而不是按 LRU 算法利用空间;

-n: 指定最小的 slab chunk 大小;单位是字节;

-S: 启用 sasl 进行用户认证;

建立一个内存空间大小 128M,slab chunk 大小从 20 字节开始、增长因子为 1.25、以 nobody 身份运行的 memcache 缓存空间,且显示详细过程

[root@node1 init.d]# /usr/local/memcached/bin/memcached -m 128 -n 20 -f 1.25 -vv -u nobody

slab class  1: chunk size        72 perslab  14563

slab class  2: chunk size        96 perslab  10922

slab class  3: chunk size      120 perslab    8738

slab class  4: chunk size      152 perslab    6898

slab class  5: chunk size      192 perslab    5461

slab class  6: chunk size      240 perslab    4369

slab class  7: chunk size      304 perslab    3449

slab class  8: chunk size      384 perslab    2730

slab class  9: chunk size      480 perslab    2184

slab class  10: chunk size      600 perslab    1747

slab class  11: chunk size      752 perslab    1394

slab class  12: chunk size      944 perslab    1110

slab class  13: chunk size      1184 perslab    885

slab class  14: chunk size      1480 perslab    708

slab class  15: chunk size      1856 perslab    564

slab class  16: chunk size      2320 perslab    451

slab class  17: chunk size      2904 perslab    361

slab class  18: chunk size      3632 perslab    288

slab class  19: chunk size      4544 perslab    230

slab class  20: chunk size      5680 perslab    184

slab class  21: chunk size      7104 perslab    147

slab class  22: chunk size      8880 perslab    118

slab class  23: chunk size    11104 perslab      94

slab class  24: chunk size    13880 perslab      75

slab class  25: chunk size    17352 perslab      60

slab class  26: chunk size    21696 perslab      48

slab class  27: chunk size    27120 perslab      38

slab class  28: chunk size    33904 perslab      30

slab class  29: chunk size    42384 perslab      24

slab class  30: chunk size    52984 perslab      19

slab class  31: chunk size    66232 perslab      15

slab class  32: chunk size    82792 perslab      12

slab class  33: chunk size    103496 perslab      10

slab class  34: chunk size    129376 perslab      8

slab class  35: chunk size    161720 perslab      6

slab class  36: chunk size    202152 perslab      5

slab class  37: chunk size    252696 perslab      4

slab class  38: chunk size    315872 perslab      3

slab class  39: chunk size    394840 perslab      2

slab class  40: chunk size    493552 perslab      2

slab class  41: chunk size    616944 perslab      1

slab class  42: chunk size    771184 perslab      1

slab class  43: chunk size  1048576 perslab      1

从显示的信息可以看到 slab chunk 的最小值系统默认为 72 个字节,按 1.25 倍增长到了 1048576 大小

[root@node1 init.d]# netstat -tunlp |grep memcached

tcp    0      0 0.0.0.0:11211    0.0.0.0:*      LISTEN      9268/memcached     

tcp    0      0 :::11211        :::*        LISTEN      9268/memcached     

udp    0      0 0.0.0.0:11211    0.0.0.0:*                  9268/memcached     

udp    0      0 :::11211        :::*                    9268/memcached     

可以看到监听在 tcp 和 udp 的 11211 端口

[root@node1 xinetd.d]# telnet localhost 11211

Trying ::1…

Connected to localhost.

Escape character is ‘^]’.

stats

STAT pid 9268

STAT uptime 1483

STAT time 1482739946

STAT version 1.4.33

STAT libevent 1.4.13-stable

STAT pointer_size 64

STAT rusage_user 0.209968

STAT rusage_system 1.007846

STAT curr_connections 10

STAT total_connections 12

STAT connection_structures 11

STAT reserved_fds 20

STAT cmd_get 0

STAT crawler_reclaimed 0

STAT crawler_items_checked 0

STAT lrutail_reflocked 0

END

add mykey 0 30 5 ## 添加一个键,键名为 mykey,flag 为 0,键的有效期为 30 秒,大小为 5 个字符

hello  ## 键值为 hello

STORED  ## 显示已近 %STORED

get mykey ## 获取保存的键

VALUE mykey 0 5

hello  ## 键值为 hello

END

get mykey 

END

    ##30 秒过去后,键值失效(虽然 memcached 为 lazy 模型,但过期后就不返回查询值)

quit

Connection closed by foreign host.

此外 memcached 还有以下常用命令:

replace: 仅当键已经存在时,replace 命令才会替换缓存中的键。如果缓存中不存在键,那么您将从        memcached 服务器接受到一条 NOT_STORED 响应。

append:将数据追加到当前缓存数据的之后,当缓存数据存在时才存储。

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

incr:  让已近存在的键自动加一

derc:  让已近存在的键自动减一

get :  key 可以一个或多个,用空格格开

gets:与 get 一样,但会返回多一个数字,这个数字用来检查数据是否被修改过,如修改过,这个      数字回改变。

flash_all: 清除所有键

flash_all 900: 在 900 秒内清空所有键

delete:删除缓存数据,数据存在返回 DELETED,数据不存在返回 NOT_FOUND

stats 查看 memcached 运行状态

pid                    Memcached 进程 ID   

uptime                  Memcached 运行时间,单位:秒   

time                    Memcached 当前的 UNIX 时间   

version                Memcached 的版本号   

rusage_user            该进程累计的用户时间,单位:秒   

rusage_system          该进程累计的系统时间,单位:秒   

curr_items            Memcached 当前存储的内容数量   

total_items          Memcached 启动以来存储过的内容总数   

bytes              Memcached 当前存储内容所占用的字节数 (*/1024/1024=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 在存储时被允许使用的字节总数

更详细的 memcached 命令请参考下面网友写的文章

http://www.linuxidc.com/Linux/2012-06/63586.htm

http://www.linuxidc.com/Linux/2017-02/140680.htm

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2017-02/140679p2.htm

如何让 PHP 使用 memcached?(装 memcached 的客户端)

PHP 要结合 memcached 必须依赖 memcached 的客户端库(也称为扩展),对于 PHP 来说其客户端库有两种,memcache 和 memcached,其中 memcached 功能更强大。而对 Perl 来说其所依赖的客户端库为 cache:memcached 模块。

简单来说 memcached 为 memcached 的服务器端,要让 php 在 memcached 服务器端缓存数据,就必须在在 php 所在 server 上装一个 memcached 的客户端 (扩展),而这客户端有两种,一个叫 memcache, 另一个叫 memcached(比较高级)

对于 C /C++ 来说其必须依赖 libmemcached

下面将演示 PHP 扩展 memcached 扩展(要先安装 libmemcached),如果安装 memcache 扩展则不用装 libmemcached

如果你要用 memcache 扩展下载可以点这个链接 http://pecl.php.net/package/memcache

这个链接可以下载 memcached http://pecl.php.net/package/memcached

  [root@node1 tool]#wget  https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz

  [root@node1 tool]# tar -xf libmemcached-1.0.18.tar.gz

  [root@node1 tool]# cd libmemcached-1.0.18

  [root@node1 libmemcached-1.0.18]# ./configure –prefix=/usr/local/libmemcached –with-memcached

  [root@node1 libmemcached-1.0.18]#make && make install

   
  [root@node1 tool]#tar -xf memcached-2.2.0.tgz

  [root@node1 tool]#cd memcached-2.2.0

  [root@node1 memcached-2.2.0]#/usr/local/php/bin/phpize

  [root@node1 memcached-2.2.0]#./configure –with-php-config=/usr/local/php/bin/php-config –enable-memcached –with-libmemcached-dir=/usr/local/libmemcached

  [root@node1 memcached-2.2.0]#make && make install

  [root@node1 memcached-2.2.0]#vim /etc/php.d/memcache.ini

    extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcached.so

  [root@node1 memcached-2.2.0]#service php-fpm restart

    启用 Nginx 转发 php 功能

      [root@node1 ~]# vi /etc/nginx/nginx.conf

    location ~ \.php$ {

            root          /web/read;

            fastcgi_pass  127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

            include        fastcgi_params;

          }

      [root@node1 ~]# service nginx reload

Memcached 的安装配置及将 PHP 的 session 保存在 Memcached 中

可以看到 memcached 扩展已近完成

Nginx 结合 memcached

[root@node1 ~]# vim /etc/nginx/nginx.conf

server {

        listen      80;

        server_name  www.linuxidc.com;

    location / {

              set $memcached_key $uri;#set 键名 $memcached_key 键 $uri;

              memcached_pass  127.0.0.1:11211; #memcached 服务器 IP:port

              default_type    text/html; #默认缓存纯文本的内容

              error_page    404 @fallback; #如果返回 404 错误(即 memcached 中没有相                                    应的缓存),则转发给 fallback

        }

        location @fallback {

                proxy_pass http://172.16.0.1; #反向代理到后端 172.16.0.1 处理请求

        }

}

配置 php 将它的会话(session)保存至 memcached 中

前提:

1、配置各 php 支持使用 memcache;

2、安装配置好 memcached 服务器,这里假设其地址为 172.16.200.11,端口为 11211;

编辑 php.ini 文件,确保如下两个参数的值分别如下所示:

  [root@node1 ~]# vim /etc/php.ini

session.save_handler = memcache

session.save_path = “tcp://192.168.139.2:11211?persistent=1&weight=1&timeout=1&retry_interval=15”

tcp://172.16.200.11:11211? 是你的 memcached 服务器端的 IP:port

?persistent=1?传递参数,persistent 表示持久连接

timeout=1 超时时间为 1 秒

retry_interval=15 重视时间为 15 秒

新建 php 页面 setsess.php,为客户端设置启用 session:

[root@node1 ~]# vim /web/read/setsess.php

<?php

session_start();

if (!isset($_SESSION[‘www.zxl.com’])) {

  $_SESSION[‘www.zxl.com’] = time();

}

print $_SESSION[‘www.zxl.com’];

print “<br><br>”;

print “Session ID: ” . session_id();

?>

新建 php 页面 showsess.php,获取当前用户的会话 ID:

[root@node1 ~]# vim /web/read/showsess.php

<?php

session_start();

$memcache_obj = new Memcache;

$memcache_obj->connect(‘192.168.139.2’, 11211);

$mysess=session_id();

var_dump($memcache_obj->get($mysess));

$memcache_obj->close();

?>

然后用浏览器分别访问 setsess.php 和 showsess.php

会看到 session 信息已近保存在了 memcached 中

安装 memcached 的 web 界面管理工具 memadmin

[root@node1 tool]#tar -xf memadmin-1.0.12.tar.gz

[root@node1 tool]#mv memadmin /web/read/

[root@node1 tool]#cd /web/read/

  配置文件如下,可以修改用户和密码

[root@node1 read]# vim memadmin/config.php

<?php

if (!defined(‘IN_MADM’)) exit();

$config[‘user’] = “admin”; // your username

$config[‘passwd’] = “admin”; // your password

然后你用浏览器就行 web 界面访问 http://192.18.139.2/memadmin

 Memcached 的安装配置及将 PHP 的 session 保存在 Memcached 中

Memcached 的安装配置及将 PHP 的 session 保存在 Memcached 中

Memcached 的安装配置及将 PHP 的 session 保存在 Memcached 中

Memcached 的安装配置及将 PHP 的 session 保存在 Memcached 中

可以看到 memadmin 已近安装完成

为编译安装的 Memcached 配置启动脚本,Memcached SysV 的 startup 脚本代码如下所示,将其建立为 /etc/init.d/memcached 文件:

[root@node1 ~]# vim /etc/init.d/memcached

#!/bin/bash

#

# Init file for memcached

#

# chkconfig: – 86 14

# description: Distributed memory caching daemon

#

# processname: memcached

# config: /etc/sysconfig/memcached

. /etc/rc.d/init.d/functions

## Default variables

PORT=”11211″

USER=”nobody”

MAXCONN=”1024″

CACHESIZE=”64″

OPTIONS=””

RETVAL=0

prog=”/usr/local/memcached/bin/memcached”

desc=”Distributed memory caching”

lockfile=”/var/lock/subsys/memcached”

start() {

        echo -n $”Starting $desc (memcached): “

        daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE -o “$OPTIONS”

        RETVAL=$?

        echo

        [$RETVAL -eq 0] && touch $lockfile

        return $RETVAL

}

stop() {

        echo -n $”Shutting down $desc (memcached): “

        killproc $prog

        RETVAL=$?

        echo

        [$RETVAL -eq 0] && rm -f $lockfile

        return $RETVAL

}

restart() {

        stop

        start

}

reload() {

        echo -n $”Reloading $desc ($prog): “

        killproc $prog -HUP

        RETVAL=$?

        echo

        return $RETVAL

}

case “$1” in

  start)

        start

        ;;

  stop)

        stop

        ;;

  restart)

        restart

        ;;

  condrestart)

        [-e $lockfile] && restart

        RETVAL=$?

        ;;     

  reload)

        reload

        ;;

  status)

        status $prog

        RETVAL=$?

        ;;

  *)

        echo $”Usage: $0 {start|stop|restart|condrestart|status}”

        RETVAL=1

esac

exit $RETVAL

使用如下命令配置 memcached 成为系统服务:

[root@node1 ~]# chmod +x /etc/init.d/memcached

[root@node1 ~]# chkconfig –add memcached

[root@node1 ~]# service memcached start

Starting Distributed memory caching (memcached):          [OK]

本次实验完成!

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-02/140679.htm

Memcached 是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对 Database 的访问来加速 web 应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API 调用或页面引用结果的直接数据,如字符串、对象等。

Memcached 现已成为 mixi、hatena、Facebook、Vox、LiveJournal 等众多服务中提高 Web 应用扩展性的重要因素。

Memcached 有以特点

1. 简单 key/value 存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成;

2. 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期;

3. 各服务器间彼此无视:不在服务器间进行数据同步;

4. O(1) 的执行效率

5. 清理超期数据:默认情况下,Memcached 工作在 Lazy 模式下,是一个 LRU(最近最少使用)缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached 不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached 也不会真正按期限清理缓存,而仅是当 get 命令到达时检查其时长;但是键一旦过期,则再次查询不会返回结果

Memcached 虽然是一个键值存储 server, 但是它本身无法决定缓存那些数据,而是由客户端决定的键名,键值,缓存时长,标志位等

Memcached 可以基于文本或者二进制上传和下载数据

Memcached 将所有数据缓存再自己的内存中,并不会进行持久存储,且它认为自己也仅仅是一个缓存 server, 其上的数据丢失并不影响原数据,仅仅对服务有所影响

不同的 memcached 服务器之间不能进行通信,也不监控对方心跳信息,client 端可以根据调度器如 Nginx、haproxy、lvs 等基于持久连接将数据缓存在多台 memcached 上(为了能够保证始终能够在同一个 memcached 找到同一个键,就需要对键做哈希运算,如将键做一定运算后 /memcached 的个数,再取余,根据余数将其存储在固定 memcached 服务器上,这样只要知道键一计算,就可以知道它在哪个 server 上存着;但这个取余法有个致命缺陷就是,万一挂掉或多了一个 memcached 服务器,其同一个键取余结果就会改变,就再也不能根据原来计算方法找到其对应的键值,即所有 memcached 上的缓存都失效)

这时就可以使用一致性哈希运算:1 到 2^32 之间取几个对应区间对应每台服务器,然后对键 /2^32 取余,然后根据余数顺时针找最近服务器进行缓存,这样一旦挂了或加了一个 memcached 其结果也只让一台服务器上的缓存失效

Memcached 有两个很重要组件:

1:buddy system(伙伴系统)为了保证内存中的空间连续可用 buddy system 会将临近的空间碎片合并为一个大的连续空间,避免了内存碎片的产生

2:slab allocator:当要存储小于内存页面大小(4K)数据时如存储一个 128 字节的数据,为了节省空间,slab allocator 会将一个 4K 的内存页提前划分为许多 128 字节的块,将其存在里面,然后标记此块已近使用,而数据释放后也不会销毁这个 128 字节的块,会提供给以后的数据存储使用。并且 slab allocator slab 为不同大小的数据结构提前准备各种不同大小的内存块,存储时选择与它大小最近,且比它大的块进行存储,这样就提高了内存的利用效率

memcached 依赖于 libevent API,因此要事先安装之,项目主页:http://libevent.org/,且 memcached 是基于 Event_Driven(事件驱动)的 I / O 机制,而 event_driven 是由 libevent 这个库提供的

[root@node1 libevent-2.0.22-stable]# ./configure –prefix=/usr/local/libevent

[root@node1 libevent-2.0.22-stable]# make && make install

[root@node1 local]# echo “/usr/local/libevent/lib/” > /etc/ld.so.conf.d/libevent.conf

[root@node1 local]# ldconfig -v

[root@node1 ~]# yum install -y cyrus-sasl-devel

装 memcached 的服务端 memcached memcached 官网 www.memcached,org

[root@node1 tool]# tar memcached-1.4.33.tar.gz

[root@node1 tool]# cd memcached-1.4.33

[root@node1 memcached-1.4.33]# ./configure –enable-sasl –prefix=/usr/local/memcached –with-libevent=/usr/local/libevent

[root@node1 memcached-1.4.33]# make && make install

-l <ip_addr>:指定进程监听的地址;

-d: 以服务模式运行;

-u <username>:以指定的用户身份运行 memcached 进程;

-m <num>:用于缓存数据的最大内存空间,单位为 MB,默认为 64MB;

-c <num>:最大支持的并发连接数,默认为 1024;

-p <num>: 指定监听的 TCP 端口,默认为 11211;

-U <num>:指定监听的 UDP 端口,默认为 11211,0 表示关闭 UDP 端口;

-t <threads>:用于处理入站请求的最大线程数,仅在 memcached 编译时开启了支持线程才有效;

-f <num>:设定 Slab Allocator 定义预先分配内存空间大小固定的块时使用的增长因子;

-M:当内存空间不够使用时返回错误信息,而不是按 LRU 算法利用空间;

-n: 指定最小的 slab chunk 大小;单位是字节;

-S: 启用 sasl 进行用户认证;

建立一个内存空间大小 128M,slab chunk 大小从 20 字节开始、增长因子为 1.25、以 nobody 身份运行的 memcache 缓存空间,且显示详细过程

[root@node1 init.d]# /usr/local/memcached/bin/memcached -m 128 -n 20 -f 1.25 -vv -u nobody

slab class  1: chunk size        72 perslab  14563

slab class  2: chunk size        96 perslab  10922

slab class  3: chunk size      120 perslab    8738

slab class  4: chunk size      152 perslab    6898

slab class  5: chunk size      192 perslab    5461

slab class  6: chunk size      240 perslab    4369

slab class  7: chunk size      304 perslab    3449

slab class  8: chunk size      384 perslab    2730

slab class  9: chunk size      480 perslab    2184

slab class  10: chunk size      600 perslab    1747

slab class  11: chunk size      752 perslab    1394

slab class  12: chunk size      944 perslab    1110

slab class  13: chunk size      1184 perslab    885

slab class  14: chunk size      1480 perslab    708

slab class  15: chunk size      1856 perslab    564

slab class  16: chunk size      2320 perslab    451

slab class  17: chunk size      2904 perslab    361

slab class  18: chunk size      3632 perslab    288

slab class  19: chunk size      4544 perslab    230

slab class  20: chunk size      5680 perslab    184

slab class  21: chunk size      7104 perslab    147

slab class  22: chunk size      8880 perslab    118

slab class  23: chunk size    11104 perslab      94

slab class  24: chunk size    13880 perslab      75

slab class  25: chunk size    17352 perslab      60

slab class  26: chunk size    21696 perslab      48

slab class  27: chunk size    27120 perslab      38

slab class  28: chunk size    33904 perslab      30

slab class  29: chunk size    42384 perslab      24

slab class  30: chunk size    52984 perslab      19

slab class  31: chunk size    66232 perslab      15

slab class  32: chunk size    82792 perslab      12

slab class  33: chunk size    103496 perslab      10

slab class  34: chunk size    129376 perslab      8

slab class  35: chunk size    161720 perslab      6

slab class  36: chunk size    202152 perslab      5

slab class  37: chunk size    252696 perslab      4

slab class  38: chunk size    315872 perslab      3

slab class  39: chunk size    394840 perslab      2

slab class  40: chunk size    493552 perslab      2

slab class  41: chunk size    616944 perslab      1

slab class  42: chunk size    771184 perslab      1

slab class  43: chunk size  1048576 perslab      1

从显示的信息可以看到 slab chunk 的最小值系统默认为 72 个字节,按 1.25 倍增长到了 1048576 大小

[root@node1 init.d]# netstat -tunlp |grep memcached

tcp    0      0 0.0.0.0:11211    0.0.0.0:*      LISTEN      9268/memcached     

tcp    0      0 :::11211        :::*        LISTEN      9268/memcached     

udp    0      0 0.0.0.0:11211    0.0.0.0:*                  9268/memcached     

udp    0      0 :::11211        :::*                    9268/memcached     

可以看到监听在 tcp 和 udp 的 11211 端口

[root@node1 xinetd.d]# telnet localhost 11211

Trying ::1…

Connected to localhost.

Escape character is ‘^]’.

stats

STAT pid 9268

STAT uptime 1483

STAT time 1482739946

STAT version 1.4.33

STAT libevent 1.4.13-stable

STAT pointer_size 64

STAT rusage_user 0.209968

STAT rusage_system 1.007846

STAT curr_connections 10

STAT total_connections 12

STAT connection_structures 11

STAT reserved_fds 20

STAT cmd_get 0

STAT crawler_reclaimed 0

STAT crawler_items_checked 0

STAT lrutail_reflocked 0

END

add mykey 0 30 5 ## 添加一个键,键名为 mykey,flag 为 0,键的有效期为 30 秒,大小为 5 个字符

hello  ## 键值为 hello

STORED  ## 显示已近 %STORED

get mykey ## 获取保存的键

VALUE mykey 0 5

hello  ## 键值为 hello

END

get mykey 

END

    ##30 秒过去后,键值失效(虽然 memcached 为 lazy 模型,但过期后就不返回查询值)

quit

Connection closed by foreign host.

此外 memcached 还有以下常用命令:

replace: 仅当键已经存在时,replace 命令才会替换缓存中的键。如果缓存中不存在键,那么您将从        memcached 服务器接受到一条 NOT_STORED 响应。

append:将数据追加到当前缓存数据的之后,当缓存数据存在时才存储。

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

incr:  让已近存在的键自动加一

derc:  让已近存在的键自动减一

get :  key 可以一个或多个,用空格格开

gets:与 get 一样,但会返回多一个数字,这个数字用来检查数据是否被修改过,如修改过,这个      数字回改变。

flash_all: 清除所有键

flash_all 900: 在 900 秒内清空所有键

delete:删除缓存数据,数据存在返回 DELETED,数据不存在返回 NOT_FOUND

stats 查看 memcached 运行状态

pid                    Memcached 进程 ID   

uptime                  Memcached 运行时间,单位:秒   

time                    Memcached 当前的 UNIX 时间   

version                Memcached 的版本号   

rusage_user            该进程累计的用户时间,单位:秒   

rusage_system          该进程累计的系统时间,单位:秒   

curr_items            Memcached 当前存储的内容数量   

total_items          Memcached 启动以来存储过的内容总数   

bytes              Memcached 当前存储内容所占用的字节数 (*/1024/1024=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 在存储时被允许使用的字节总数

更详细的 memcached 命令请参考下面网友写的文章

http://www.linuxidc.com/Linux/2012-06/63586.htm

http://www.linuxidc.com/Linux/2017-02/140680.htm

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2017-02/140679p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计18450字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中