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

memcache缓存应用(LNMP+memcache)

157次阅读
没有评论

共计 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、短信等云产品特惠热卖中