Memcached介绍

一、Memcached简介

  Memcached是一款开源的、高性能的纯内存缓存服务软件

  Mem是内存的意思,cache是缓存的意思,d是daemon的意思

 优点:

1. 对于用户来讲,用户访问网站更快了,体验更好了。

2. 对网站来说,数据库压力降低了。只有当内存没有数据时才会去请求数据库。第一次写入的数据也会请求数据库。一般公司没有预热,只有当用户读取过数据库才会放到Memcached中。

3. 提升了网站的并发访问,减少服务器数量。

二. 缓存数据库的选择

• MySQL:磁盘上的数据库,数据写入读取相对较慢

• Memcached:内存中的数据库,数据读写都快,但是数据易丢失

• 数据存储,数据仓库选择MySQL这种磁盘的数据库;

• 高并发,业务大的应用选择Memcached或Redis内存数据库

• 实际工作中,MySQL+Memcached/Redis搭配使用

三、企业使用场景

  Memcached介绍

 对于用户来讲,用户访问网站更快了,体验更好了
 对网站来说,数据库压力降低了。提升了网站的并发访问,减少服务器数量

Memcached介绍

四、 Cookie和Session
最开始:
本地浏览器 cookies cookies名字:内容(用户名,登录信息)

改进后:
本地浏览器: cookies cookies名字:内容(session id 编号)

服务器: session session id:内容(用户名,登录信息)

主流使用场景:cookies + session

五、部署与使用Memcached(注服务端外网ip:10.0.0.61.内网ip:172.16.1.61)

第一个里程:安装memcached服务端

[root@cache01 ~]# yum -y install memcached

[root@cache01 ~]# rpm -qa |grep memcached

memcached-1.4.15-10.el7_3.1.x86_64

第二个里程:修改配置文件,并启动服务

# vim /etc/sysconfig/memcached

PORT="11211" ---> 端口11211

USER="memcached"     ---> 用户memcached

MAXCONN="1024"        ---> 最大连接数

CACHESIZE="64"          ---> 内存空间大小MB

OPTIONS=""                  ---> 选项(这里可以填写-l对监听网段做限制)

-----------------------------------------------------------
# memcached -h

-d 启动一个守护进程

-m 分配给Memcache使用的内存数量,单位是MB

-u 运行Memcache的用户

-l 监听的服务器IP地址,可以有多个地址

-p 设置Memcache监听的端口,,最好是1024以上的端口

-c 最大运行的并发连接数,默认是1024

-P 设置保存Memcache的pid文件
-----------------------------------------------------------
# vim /usr/lib/systemd/system/memcached.service

[Unit]

Description=Memcached <---描述

Before=httpd.service <---运行程序前置程序

After=network.target <---运行程序后置程序

[Service]

Type=simple

EnvironmentFile=-/etc/sysconfig/memcached <---Memcached启动文件

ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS

[Install]

WantedBy=multi-user.target <---安装在哪个用户模式下边

第三个里程:启动memcached服务

[root@cache01 ~]# systemctl start memcached

[root@cache01 ~]# systemctl status memcached

● memcached.service - Memcached
Loaded: loaded (/usr/lib/systemd/system/memcached.service; disabled; vendor preset: disabled)

Active: active (running) since Wed 2020-06-17 21:51:42 CST; 5s ago

Main PID: 10170 (memcached)

Group: /system.slice/memcached.service

└─10170 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024

Jun 17 21:51:42 cache01 systemd[1]: Started Memcached.

第四个里程:利用nc或telnet进行memcache测试

Memcached介绍

#写入数据

[root@cache01 ~]# printf "set oldboy 0 0 10\r\noldboy1231\r\n"|nc 172.16.1.61 11211
STORED

# 读取数据

[root@cache01 ~]# printf "get oldboy\r\n" |nc 172.16.1.61 11211
VALUE oldboy 0 10
oldboy1231
END

#删除数据

[root@cache01 ~]# printf "delete oldboy\r\n"|nc 172.16.1.61 11211
DELETED

#改数据

[root@cache01 ~]# printf "get oldboy\r\n" |nc 172.16.1.61 11211
END

[root@cache01 ~]# printf "set oldboy 0 0 2\r\n12\r\n" | nc 172.16.1.61 11211
STORED

[root@cache01 ~]# printf "get oldboy\r\n" | nc 172.16.1.61 11211
VALUE oldboy 0 2
12
END
[root@cache01 ~]# printf "replace oldboy 0 0 2\r\n15\r\n" | nc 172.16.1.61 11211
STORED
[root@cache01 ~]# printf "get oldboy\r\n" | nc 172.16.1.61 11211
VALUE oldboy 0 2
15
END

命令语法格式说明

         set                     key       0             0               10 \r\n   oldboy0987 \r\n

<command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n

- <flags> 是在取回内容时,与数据和发送块一同保存服务器上的任意16位无符号整型(用十进制来书写)。客户端可以用它作为“位域”来存储一些特定的信息;它对服务器是不透明的。

- <exptime> 是终止时间。如果为0,该项永不过期(虽然它可能被删除,以便为其他缓存项目腾出位置)。如果非0(Unix时间戳或当前时刻的秒偏移),到达终止时间后,客户端无法再获得这项内容。

- <bytes> 是随后的数据区块的字节长度,不包括用于分页的“\r\n”。它可以是0(这时后面跟随一个空的数据区块)。

- <data block> 是大段的8位数据,其长度由前面的命令行中的<bytes>指定。

\n 换行且光标移至行首

\r 光标移至行首,但不换行

#其他

[root@cache01 ~]# printf "stats\r\n" | nc 172.16.1.61 11211
STAT pid 10170
STAT uptime 634
STAT time 1592402534
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.014448
STAT rusage_system 0.068629
STAT curr_connections 10
STAT total_connections 21
STAT connection_structures 11
STAT reserved_fds 20
STAT cmd_get 6
STAT cmd_set 4
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 4
STAT get_misses 2
STAT delete_misses 0
STAT delete_hits 2
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 215
STAT bytes_written 184
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT bytes 73
STAT curr_items 1
STAT total_items 4
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
END

其中:

pid: memcached运行的进程号

uptime:运行时间

time:当前的时间戳

version:当前版本

total_items:历史存储的键数

curr_items:当前存储的键数

cmd_get:总共向memcached服务器请求的次数

get_hits:响应成功的次数

get_misses:失败的次数

第五个里程:在web服务器上部署memcache客户端

[root@web01 ~]# cd /server/tools/

[root@web01 tools]# wget http://pecl.php.net/get/memcache-2.2.5.tgz

[root@web01 tools]# tar xf memcache-2.2.5.tgz

[root@web01 tools]# cd memcache-2.2.5/

[root@web01 memcache-2.2.5]# /application/php/bin/phpize

[root@web01 memcache-2.2.5]# ./configure --enable-memcache --with-php-config=/application/php/bin/php-config --with-zlib-dir

[root@web01 memcache-2.2.5]# echo $?
0
[root@web01 memcache-2.2.5]# make && make install

[root@web01 memcache-2.2.5]# echo $?
0

第六个里程:修改php配置文件,并重启php服务

[root@web01 memcache-2.2.5]# sed -i ‘$a extension=memcache.so‘ /application/php/lib/php.ini

Memcached介绍

[root@web01 memcache-2.2.5]# /application/php/sbin/php-fpm -t

[17-Jun-2020 22:21:08] NOTICE: configuration file /application/php-5.3.27/etc/php-fpm.conf test is successful

[root@web01 memcache-2.2.5]# /application/php/sbin/php-fpm

#memcached模块安装是否成功

[root@web01 memcache-2.2.5]# /application/php/bin/php -m|grep memcache

memcache

[root@web01 memcache-2.2.5]# ps -ef |grep php

root 9011 1 0 22:21 ? 00:00:00 php-fpm: master process (/application/php-5.3.27/etc/php-fpm.conf)

www 9012 9011 0 22:21 ? 00:00:00 php-fpm: pool www

www 9013 9011 0 22:21 ? 00:00:00 php-fpm: pool www

root 9017 6609 0 22:22 pts/0 00:00:00 grep --color=auto php

第六个里程:编写测试页面,进行测试
cat >/application/nginx/html/blog/mc.php<<‘EOF‘

<?php

$memcache = new Memcache;

$memcache->connect(‘10.0.0.61‘, 11211) or die ("Could not connect");

$memcache->set(‘key_test‘, ‘hello,test is success‘);

$get_value = $memcache->get(‘key_test‘);

echo $get_value;

?>

EOF

[root@web01 ~]# /application/php/bin/php /application/nginx/html/blog/mc.php

hello,test is success[root@web01 ~]#

在服务端测试

[root@cache01 ~]# printf "get key_test\r\n" | nc 10.0.0.61 11211
VALUE key_test 0 21
hello,test is success
END

在浏览器上测试

Memcached介绍

六、利用web界面管理memcached服务

官网地址:http://www.junopen.com/memadmin/ 

下载memadmin包:memadmin-1.0.12.tar.gz

tar xf memadmin-1.0.12.tar.gz -C /application/nginx/html/blog/

在web页面使用

Memcached介绍

Memcached介绍

Memcached介绍

Memcached介绍

Memcached介绍

在cache01主机上执行读取数据和写入数据,查看监控页面,数据发生变化

[root@cache01 ~]# printf "set data01 0 0 10\r\noldgirls01\r\n" | nc 172.16.1.61 11211
STORED
[root@cache01 ~]# printf "get data01\r\n" |nc 172.16.1.61 11211
VALUE data01 0 10
oldgirls01
END
[root@cache01 ~]# printf "get data01\r\n" |nc 172.16.1.61 11211
VALUE data01 0 10
oldgirls01
END

Memcached介绍

Memcached介绍

Memcached介绍

Memcached介绍

 七、利用Memcached缓存wordpress数据库

Memcached介绍

第一步:下载memcached缓存配置文件

wordpress缓存数据缓存到memcached中:https://cn.wordpress.org/plugins/memcached/

下载:memcached.3.2.2.zip

wordpress缓存数据缓存到redis中:https://cn.wordpress.org/plugins/redis-cache/

第二步:将下载好的配置文件放到wordprss下的wp-content中

[root@web01 tools]# unzip memcached.3.2.2.zip 

[root@web01 tools]# cd memcached/

[root@web01 memcached]# mv object-cache.php /application/nginx/html/blog/wp-content/

[root@web01 memcached]# ll /application/nginx/html/blog/wp-content/object-cache.php

-rw-r--r-- 1 root root 22881 Jun 3 12:30 /application/nginx/html/blog/wp-content/object-cache.php

使用memcached缓存wordpress博文数据

第三步:修改object-cache.php配置文件,将array(‘127.0.0.1‘,‘‘);为memcached服务器ip地址

Memcached介绍

[root@web01 memcached]# grep -n "172" /application/nginx/html/blog/wp-content/object-cache.php

745: $buckets = array( ‘172.16.1.61:11211‘ );

第四步:进行测试

Memcached介绍

上一篇:centos7修改文件描述符和最大进程数


下一篇:【C语言学习】《C Primer Plus》第13章 文件输入/输出