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

memcache缓存应用(LNMP+memcache)

467次阅读
没有评论

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

环境:

memcache:192.168.154.131
nginx:192.168.154.132
php:192.168.154.133
mysql:192.168.154.134

软件:

memcache 上:libevent-2.0.22-stable.tar.gz、memcached-1.4.33.tar.gz
下载地址:http://libevent.org/
下载地址:http://memcached.org/downloads
nginx 上:nginx-1.14.0.tar.gz
下载地址:http://nginx.org/en/download.html
php 上:libmcrypt-2.5.7.tar.gz、php-5.6.27.tar.gz、memcache-3.0.8.tgz
下载地址:https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/
下载地址:http://php.net/downloads.php
mysql 上:mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz(二进制包)
下载地址:https://dev.mysql.com/downloads/mysql/

步骤

nginx 部分

groupadd -r www

useradd -r -g www -s /sbin/nologin www

tar zxf nginx-1.14.0.tar.gz

cd nginx-1.14.0

./configure –prefix=/usr/local/nginx \
–with-http_dav_module –with-http_stub_status_module \
–with-http_addition_module –with-http_sub_module \
–with-http_flv_module –with-http_mp4_module \
–with-pcre=/root/pcre-8.39 –with-zlib=/root/zlib-1.2.8 \
–with-http_ssl_module –with-http_gzip_static_module –user=www –group=www

make && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin

nginx

firewall-cmd –permanent –add-port=80/tcp

firewall-cmd –reload

nginx 配置文件 /usr/local/nginx/conf/nginx.conf

user www www;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;pid logs/nginx.pid;
events {
 use epoll;
 worker_connections 65535;
 multi_accept on;
}
http {
 include mime.types;
 default_type application/octet-stream;
 #log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
 # ‘$status $body_bytes_sent “$http_referer” ‘
 # ‘”$http_user_agent” “$http_x_forwarded_for”‘;
 #access_log logs/access.log main;
 sendfile on;
 tcp_nopush on;
 keepalive_timeout 65;
 tcp_nodelay on;
 client_header_buffer_size 4k;
 open_file_cache max=102400 inactive=20s;
 open_file_cache_valid 30s;
 open_file_cache_min_uses 1;
 client_header_timeout 15;
 client_body_timeout 15;
 reset_timedout_connection on;
 send_timeout 15;
 server_tokens off;
 client_max_body_size 10m;
 fastcgi_connect_timeout 600;
 fastcgi_send_timeout 600;
 fastcgi_read_timeout 600;
 fastcgi_buffer_size 64k;
 fastcgi_buffers 4 64k;
 fastcgi_busy_buffers_size 128k;
 fastcgi_temp_file_write_size 128k;
 fastcgi_temp_path /usr/local/nginx/nginx_tmp;
 fastcgi_intercept_errors on;
 fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:128m inactive=1d max_size=10g;
 gzip on;
 gzip_min_length 2k;
 gzip_buffers 4 32k;
 gzip_http_version 1.1;
 gzip_comp_level 6;
 gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
 gzip_vary on;
 gzip_proxied any;
 server {
  listen 80;
  server_name localhost;
  #charset koi8-r;
  #access_log logs/host.access.log main;
  location ~* ^.+\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
   valid_referers none blocked 192.168.154.132;
    if ($invalid_referer) {
    return 404;
    break;
   }
   access_log off;
  }
  location / {
   root html;
   index index.php index.html index.htm;
  }
  location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ {
   expires 30d;
   #log_not_found off;
   access_log off;
  }
  location ~* \.(js|css)$ {
   expires 7d;
   log_not_found off;
   access_log off;
  }
  location = /(favicon.ico|roboots.txt) {
   access_log off;
  log_not_found off;
  }
  location /status {
   stub_status on;
  }
  location ~ .*\.(php|php5)?$ {
   root html;
   fastcgi_pass 192.168.154.133:9000;
   fastcgi_index index.php;
   include fastcgi.conf;
# 关闭 fastcgi 的缓存   fastcgi_cache cache_fastcgi;
   fastcgi_cache_valid 200 302 1h;
   fastcgi_cache_valid 301 1d;
   fastcgi_cache_valid any 1m;
   fastcgi_cache_min_uses 1;
   fastcgi_cache_use_stale error timeout invalid_header http_500;
   fastcgi_cache_key http://$host$request_uri;
  }
  #error_page 404 /404.html;
  # redirect server error pages to the static page /50x.html
  #
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
   root html;
  }
 }
}

nginx -s reload

php 部分

tar zxf libmcrypt-2.5.7.tar.gz

cd libmcrypt-2.5.7

./configure –prefix=/usr/local/libmcrypt && make && make install

yum -y install libxml2-devel libcurl-devel openssl-devel bzip2-devel

tar zxf php-5.6.27.tar.gz

cd php-5.6.27

./configure –prefix=/usr/local/php –with-mysql=mysqlnd \
–with-pdo-mysql=mysqlnd –with-mysqli=mysqlnd –with-openssl –enable-fpm –enable-sockets \
–enable-sysvshm –enable-mbstring –with-freetype-dir –with-jpeg-dir –with-png-dir –with-zlib \
–with-libxml-dir=/usr –enable-xml –with-mhash –with-mcrypt=/usr/local/libmcrypt \
–with-config-file-path=/etc –with-config-file-scan-dir=/etc/php.d –with-bz2 \
–enable-maintainer-zts

make && make install

cp php.ini-production /etc/php.ini

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

chmod +x /etc/init.d/php-fpm

chkconfig –add php-fpm

chkconfig php-fpm on

sed -i ‘s#;pid = run/php-fpm.pid#pid = run/php-fpm.pid#g’ /usr/local/php/etc/php-fpm.conf

sed -i ‘s/listen = 127.0.0.1:9000/listen = 0.0.0.0:9000/g’ /usr/local/php/etc/php-fpm.conf

sed -i ‘s/pm.max_children = 5/pm.max_children = 300/g’ /usr/local/php/etc/php-fpm.conf

sed -i ‘s/pm.start_servers = 2/pm.start_servers = 10/g’ /usr/local/php/etc/php-fpm.conf

sed -i ‘s/pm.min_spare_servers = 1/pm.min_spare_servers = 10/g’ /usr/local/php/etc/php-fpm.conf

sed -i ‘s/pm.max_spare_servers = 3/pm.max_spare_servers = 50/g’ /usr/local/php/etc/php-fpm.conf

service php-fpm start

mysql 部分

rpm -e –nodeps mariadb-libs

groupadd -r mysql

useradd -r -g mysql -s /bin/false -M mysql
 
tar zxf mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz

mv mysql-8.0.11-linux-glibc2.12-x86_64 /usr/local/mysql

mkdir /usr/local/mysql/data

chown -R mysql:mysql /usr/local/mysql/

ln -s /usr/local/mysql/bin/* /usr/local/bin

cat >> /etc/my.cnf << EOF
[client]
socket=/usr/local/mysql/data/mysql.sock
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
pid-file=/usr/local/mysql/data/mysql.pid
server_id=1
socket=/usr/local/mysql/data/mysql.sock
log-error=/usr/local/mysql/data/mysql.err
EOF

mysqld –initialize –user=mysql –basedir=/usr/local/mysql/ –datadir=/usr/local/mysql/data

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

chkconfig –add mysqld

chkconfig on mysqld

systemctl daemon-reload

systemctl start mysqld

memcache 部分

tar zxf libevent-2.0.22-stable.tar.gz

cd libevent-2.0.22-stable/

./configure && make&& make install

tar zxf memcached-1.4.33.tar.gz

cd memcached-1.4.33/

./configure –prefix=/usr/local/memcached –with-libevent=/usr/local

make && make install

vi ~/.bash_profile

MEMCACHED_HOME=/usr/local/memcached
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MEMCACHED_HOME/lib

memcached -d -m 2048 -l 192.168.154.131 -p 11211 -u root -c 10240 -P /usr/local/memcached/memcached.pid

firewall-cmd –permanent –add-port=11211/tcp

firewall-cmd –reload

在 php 上

加载 memcache.so(使 php 作为 memcache 的客户端)

tar zxf memcache-3.0.8.tgz

cd memcache-3.0.8/

/usr/local/php/bin/phpize

./configure –enable-memcache –with-php-config=/usr/local/php/bin/php-config

make && make install

注意:安装完后会有类似这样的提示:Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20131226/;记住这个路径,需要加载到 php 的配置文件中。

vim /etc/php.ini

## 查找 extension 并在对应位置添加
extension=/usr/local/php/lib/php/extensions/no-debug-zts-20131226/memcache.so
## 在末尾添加
session.save_handler = memcache
session.save_path = “tcp://192.168.154.131:11211?persistent=1&weight=1&timeout=1&retry_interval=15”

service php-fpm restart

在 nginx 上

编写 php 测试页面。vim /usr/local/nginx/html/index.php

<?php
phpinfo();
?>

访问 http://192.168.154.132,应当可以看到 memcache 和 session 字样。

(成功表示 php 上安装好了 memcache.so)

编写 memcache 测试页面。vim /usr/local/nginx/html/test.php

<?php
$memcache = new Memcache;
$memcache->connect(‘192.168.154.131’, 11211) or die (“Could not connect”);
$version = $memcache->getVersion();
echo “Server’s version: “.$version.”
“;
$tmp_object = new stdClass;
$tmp_object->str_attr = ‘test’;
$tmp_object->int_attr = 123;
$memcache->set(‘key’, $tmp_object, false, 10) or die (“Failed to save data at the server”);
echo “Store data in the cache (data will expire in 10 seconds)
“;
$get_result = $memcache->get(‘key’);
echo “Data from the cache:
“;
var_dump($get_result);
?>

预计会输出四行字符,有 memcache 版本信息等

(成功表示连接到了 memcache 服务器)

编写测试 memcache 的 session 共享脚本,vim /usr/local/nginx/html/session.php

<?php
session_start();
if (!isset($_SESSION[‘session_time’]))
{
  $_SESSION[‘session_time’] = time();
}
echo “now_time:”.time().”
“;
echo “session_id:”.session_id().”
“;
?>

预计输出 session_time、now_time、session_id

使用 telnet 连接 memcache

telnet 192.168.154.131 11211

然后 get session_id 的值,如果得到的 session_time 和网页上的一样表示 session 共享成功。

在 mysql 上

mysql> create database testdb1;

mysql> use testdb1;

mysql> create table test1(id int not null auto_increment,name varchar(20) default null,primary key (id)) engine=innodb auto_increment=1 default charset=utf8;

mysql> insert into test1(name) values (‘tom1’),(‘tom2’),(‘tom3’),(‘tom4’),(‘tom5’);

mysql> select * from test1;
+—-+——+
| id | name |
+—-+——+
| 1 | tom1 |
| 2 | tom2 |
| 3 | tom3 |
| 4 | tom4 |
| 5 | tom5 |
+—-+——+
5 rows in set (0.00 sec)

mysql> grant select on testdb1.* to user@’%’ identified by ‘123456’;

在 nginx 上

编辑 memcache 缓存 mysql 测试页面,vim /usr/local/nginx/html/test_db.php

<?php
$memcachehost = ‘192.168.154.131’;
$memcacheport = 11211;
$memcachelife = 60;
$memcache = new Memcache;
$memcache->connect($memcachehost,$memcacheport) or die (“Could not connect”);
$query=”select * from test1 limit 10″;
$key=md5($query);
if(!$memcache->get($key))
{
    $conn=mysql_connect(“192.168.154.134″,”user”,”123456″);
    mysql_select_db(testdb1);
    $result=mysql_query($query);
while ($row=mysql_fetch_assoc($result))
    {
        $arr[]=$row;
    }
    $f = ‘mysql’;
    $memcache->add($key,serialize($arr),0,30);
    $data = $arr ;
}
else{
    $f = ‘memcache’;
    $data_mem=$memcache->get($key);
    $data = unserialize($data_mem);
}
echo $f;
echo “<br>”
echo “$key”;
echo “<br>”
//print_r($data);
foreach($data as $a)
{
echo “number is <b><font color=#FF0000>$a[id]</font></b>”;
echo “<br>”;
echo “name is <b><font color=#FF0000>$a[name]</font></b>”;
echo “<br>”;
}
?>

预计会输出 memcache 的 key,和我们在 mysql 创建的数据表的数据

(成功即表示 memcache 缓存到 mysql 的数据)

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

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7985758
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...