前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >memcache缓存应用(LNMP+memcache)

memcache缓存应用(LNMP+memcache)

作者头像
星哥玩云
发布2022-07-24 13:42:34
1.1K0
发布2022-07-24 13:42:34
举报
文章被收录于专栏:开源部署开源部署

环境:

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的数据)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档