xx0cw 2019-12-24
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
1、协议简单;
2、基于libevent的事件处理;
3、内置内存存储方式;
4、memcached不互相通信的分布式。
为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
[ ~]# mkdir /mnt/tools [ ~]# mount.cifs //192.168.100.100/tools /mnt/tools/ ##挂载 Password for //192.168.100.100/tools: [ ~]# cd /mnt/tools/memcached/ [ memcached]# ls LAMP-php5.6 magent-0.5.tar.gz memcached-1.5.6.tar.gz libevent-2.1.8-stable.tar.gz memcache-2.2.7.tgz [ memcached]# [ memcached]# tar xf libevent-2.1.8-stable.tar.gz -C /opt/ ##解压 [ memcached]# tar xf memcached-1.5.6.tar.gz -C /opt/ ##解压 [ memcached]# cd /opt/ [ opt]# ls libevent-2.1.8-stable memcached-1.5.6 rh [ opt]#
[ opt]# yum install gcc gcc-c++ make -y ##安装依赖环境包 .............//省略过程 [ libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent ##配置libevent .............//省略过程 [ libevent-2.1.8-stable]# make && make install ##编译安装libevent .............//省略过程 [ libevent-2.1.8-stable]# cd ../memcached-1.5.6/ [ memcached-1.5.6]# ./configure \ ##配置memcached > --prefix=/usr/local/memcached > --with-libevent=/usr/local/libevent/ .............//省略过程 [ memcached-1.5.6]# make && make install ##编译安装memcached .............//省略过程 [ memcached-1.5.6]# ln -s /usr/local/memcached/bin/* /usr/local/bin ##便于系统识别 [ memcached-1.5.6]#
[ memcached-1.5.6]# memcached -d -m 32m -p 11211 -u root ##开启数据库服务,-d守护进程 ;-m缓存大小32M ;-p端口11211 [ memcached-1.5.6]# [ memcached-1.5.6]# netstat -ntap | grep memcached ##查看端口 tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 22448/memcached tcp6 0 0 :::11211 :::* LISTEN 22448/memcached [ memcached-1.5.6]# [ memcached-1.5.6]# systemctl stop firewalld.service ##关闭防火墙 [ memcached-1.5.6]# setenforce 0 ##关闭增强型安全功能 [ memcached-1.5.6]#
[ memcached-1.5.6]# yum install -y telnet ##安装Telnet服务 .............//省略过程 [ memcached-1.5.6]# telnet 127.0.0.1 11211 ##连接memcached数据库 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is ‘^]‘. add username 0 0 7 添加数据(两个0表示:不进行压缩和序列化标识,数据过期时间为永不过期;标识号是7就需要输入7位数。) 1234567 ##输入7位的值 STORED ##添加成功 add users 0 0 7 123 ##输入错误的值 ERROR ##添加失败 get username VALUE username 0 7 1234567 END gets username ##查询数据 VALUE username 0 7 1 1234567 END set username 0 0 8 ##更新信息,若键名不存在,则自行添加 12345678 STORED gets username ##查询数据 VALUE username 0 8 3 12345678 END replace school 0 0 2 ##更新信息,若键名不存在,则报错 un NOT_STORED get shcool ##查询数据 END replace username 0 0 9 ##更新信息,若键名不存在,则报错 123456789 STORED gets username ##查询数据 VALUE username 0 9 4 123456789 END set school 0 0 4 ##更新信息,若键名不存在,则自行添加 1234 STORED gets school ##查询数据 VALUE school 0 4 5 1234 END cas school 0 0 7 5 ##修改键的存储位数 logging STORED gets school VALUE school 0 7 6 logging END cas school 0 0 8 2 loggings EXISTS append school 0 0 4 ##键值后追加数据 book STORED gets school VALUE school 0 11 7 loggingbook END prepend school 0 0 2 ##键值前追加数据 un STORED gets school VALUE school 0 13 8 unloggingbook END delete school ##清除指定的键值数据,清除所有缓存数据为flush_all DELETED get school END quit ##退出 Connection closed by foreign host. [ memcached-1.5.6]# ##查看命令: stats ##显示状态信息 stats items ##返回所有键值对的统计信息 stats cachedump 1 0 ##返回指定存储空间的键值对 stats slabs ##显示各个slab的信息 stats sizes ##输出所有item的大小和个数 stats reset ##清空统计数据
三、客户端配置(部署LAMP架构)
LAMP架构之前的博客写过,想看详细解释的可以,看一下。下面就不做解释了。
LNMP架构
1、部署LAMP架构
[ ~]# mkdir /mnt/tools [ ~]# mount.cifs //192.168.100.100/tools /mnt/tools/ Password for //192.168.100.100/tools: [ ~]# cd /mnt/tools/memcached/ [ memcached]# ls LAMP-php5.6 libevent-2.1.8-stable.tar.gz magent-0.5.tar.gz memcache-2.2.7.tgz memcached-1.5.6.tar.gz [ LAMP-php5.6]# ls apr-1.6.2.tar.gz httpd-2.4.29.tar.bz2 mysql-5.6.26.tar.gz apr-util-1.6.0.tar.gz LAMP-php5.6.txt php-5.6.11.tar.bz2 [ LAMP-php5.6]# [ LAMP-php5.6]# tar xf apr-1.6.2.tar.gz -C /opt/ [ LAMP-php5.6]# tar xf apr-util-1.6.0.tar.gz -C /opt/ [ LAMP-php5.6]# tar xf httpd-2.4.29.tar.bz2 -C /opt/ [ LAMP-php5.6]# [ LAMP-php5.6]# cd /opt/ [ opt]# ls apr-1.6.2 apr-util-1.6.0 httpd-2.4.29 rh [ opt]# mv apr-1.6.2/ httpd-2.4.29/srclib/apr [ opt]# mv apr-util-1.6.0/ httpd-2.4.29/srclib/apr-util [ opt]# ls httpd-2.4.29 rh [ opt]# [ opt]# cd httpd-2.4.29/ [ httpd-2.4.29]# yum -y install > gcc > gcc-c++ > make > pcre-devel > expat-devel > perl > zlib-devel [ httpd-2.4.29]# ./configure > --prefix=/usr/local/httpd > --enable-so > --enable-rewrite > --enable-charset-lite > --enable-cgi [ httpd-2.4.29]# make && make install [ httpd-2.4.29]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd [ httpd-2.4.29]# vim /etc/init.d/httpd # chkconfig: 35 85 21 //35级别自动运行 第85个启动 第21个关闭 # description: Apache is a World Wide Web server [ httpd-2.4.29]# chkconfig --add httpd [ httpd-2.4.29]# [ httpd-2.4.29]# vim /usr/local/httpd/conf/httpd.conf ServerName www.yun.com:80 Listen 192.168.52.132:80 #Listen 80 [ httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/ [ httpd-2.4.29]# ln -s /usr/local/httpd/bin/* /usr/local/bin/ [ httpd-2.4.29]# apachectl -t Syntax OK [ httpd-2.4.29]# [ httpd-2.4.29]# service httpd start [ httpd-2.4.29]# netstat -ntap | grep 80 tcp 0 0 192.168.52.132:80 0.0.0.0:* LISTEN 88064/httpd [ httpd-2.4.29]# [ httpd-2.4.29]# cd /mnt/tools/memcached/LAMP-php5.6/ [ LAMP-php5.6]# ls apr-1.6.2.tar.gz httpd-2.4.29.tar.bz2 mysql-5.6.26.tar.gz apr-util-1.6.0.tar.gz LAMP-php5.6.txt php-5.6.11.tar.bz2 [ LAMP-php5.6]# tar xf mysql-5.6.26.tar.gz -C /opt/ [ LAMP-php5.6]# cd /opt/ [ opt]# ls httpd-2.4.29 mysql-5.6.26 rh [ opt]# cd mysql-5.6.26/ [ mysql-5.6.26]# yum install -y ncurses-devel autoconf cmake [ mysql-5.6.26]# cmake > -DCMAKE_INSTALL_PREFIX=/usr/local/mysql > -DDEFAULT_CHARSET=utf8 > -DDEFAULT_COLLATION=utf8_general_ci > -DEXTRA_CHARSETS=all > -DSYSCONFIDIR=/etc > -DMYSQL_DATADIR=/home/mysql/ > -DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock [ mysql-5.6.26]# make && make install [ mysql-5.6.26]# cp support-files/my-default.cnf /etc/my.cnf cp:是否覆盖"/etc/my.cnf"? yes [ mysql-5.6.26]# cp support-files/mysql.server /etc/init.d/mysqld [ mysql-5.6.26]# chmod 755 /etc/init.d/mysqld [ mysql-5.6.26]# chkconfig --add /etc/init.d/mysqld [ mysql-5.6.26]# chkconfig mysqld --level 235 on [ mysql-5.6.26]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile [ mysql-5.6.26]# source /etc/profile [ mysql-5.6.26]# useradd -s /sbin/nologin mysql [ mysql-5.6.26]# chown -R mysql:mysql /usr/local/mysql/ [ mysql-5.6.26]# [ mysql-5.6.26]# /usr/local/mysql/scripts/mysql_install_db > --user=mysql > --ldata=/var/lib/mysql > --basedir=/usr/local/mysql > --datadir=/home/mysql [ mysql-5.6.26]# ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock [ mysql-5.6.26]# vim /etc/init.d/mysqld basedir=/usr/local/mysql datadir=/home/mysql [ mysql-5.6.26]# service mysqld start Starting MySQL. SUCCESS! [ mysql-5.6.26]# netstat -ntap | grep 3306 tcp6 0 0 :::3306 :::* LISTEN 103429/mysqld [ mysql-5.6.26]# [ mysql-5.6.26]# service mysqld start Starting MySQL. SUCCESS! [ mysql-5.6.26]# netstat -ntap | grep 3306 tcp6 0 0 :::3306 :::* LISTEN 103429/mysqld [ mysql-5.6.26]# [ mysql-5.6.26]# mysqladmin -u root -p password "abc123" Enter password: Warning: Using a password on the command line interface can be insecure. [ mysql-5.6.26]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.6.26 Source distribution Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. mysql> \q Bye [ mysql-5.6.26]# [ mysql-5.6.26]# cd /mnt/tools/memcached/LAMP-php5.6/ [ LAMP-php5.6]# ls apr-1.6.2.tar.gz httpd-2.4.29.tar.bz2 mysql-5.6.26.tar.gz apr-util-1.6.0.tar.gz LAMP-php5.6.txt php-5.6.11.tar.bz2 [ LAMP-php5.6]# tar xf php-5.6.11.tar.bz2 -C /opt/ [ LAMP-php5.6]# cd /opt/ [ opt]# ls httpd-2.4.29 mysql-5.6.26 php-5.6.11 rh [ opt]# cd php-5.6.11/ [ php-5.6.11]# yum -y install > gd > libpng > libpng-devel > pcre > pcre-devel > libxml2-devel > libjpeg-devel [ php-5.6.11]# ./configure > --prefix=/usr/local/php5 > --with-gd > --with-zlib > --with-apxs2=/usr/local/httpd/bin/apxs > --with-mysql=/usr/local/mysql > --with-config-file-path=/usr/local/php5 > --enable-mbstring [ php-5.6.11]# make && make install [ php-5.6.11]# cp php.ini-development /usr/local/php5/php.ini [ php-5.6.11]# ln -s /usr/local/php5/bin/* /usr/local/bin/ [ php-5.6.11]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/ [ php-5.6.11]# [ php-5.6.11]# vim /etc/httpd.conf AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps <IfModule dir_module> DirectoryIndex index.html index.php </IfModule> [ php-5.6.11]# vim /usr/local/httpd/htdocs/index.php <?php phpinfo(); ?> [ php-5.6.11]# service httpd stop [ php-5.6.11]# service httpd start [ php-5.6.11]# systemctl stop firewalld.service [ php-5.6.11]# setenforce 0 [ php-5.6.11]#
[ php-5.6.11]# vim /usr/local/httpd/htdocs/index.php <?php $link=mysql_connect(‘192.168.52.132‘,‘skyuser‘,‘admin123‘); if($link) echo "<h1>Success!!</h1>"; else echo "Fail!!"; mysql_close(); ?>
[ php-5.6.11]# mysql -u root -pabc123 ##进入数据库 Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.6.26 Source distribution Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. mysql> create database sky; ##创建一个数据库为 sky Query OK, 1 row affected (0.00 sec) mysql> grant all on sky.* to ‘skyuser‘@‘%‘ identified by ‘admin123‘; ##提权 Query OK, 0 rows affected (0.01 sec) mysql> flush privileges; ##刷新权限 Query OK, 0 rows affected (0.01 sec) mysql>
[ php-5.6.11]# cd /mnt/tools/memcached/ [ memcached]# ls LAMP-php5.6 libevent-2.1.8-stable.tar.gz magent-0.5.tar.gz memcache-2.2.7.tgz memcached-1.5.6.tar.gz [ memcached]# tar xf memcache-2.2.7.tgz -C /opt/ ##解压 [ memcached]# cd /opt/ [ opt]# ls httpd-2.4.29 memcache-2.2.7 mysql-5.6.26 package.xml php-5.6.11 rh [ opt]# [ opt]# cd memcache-2.2.7/ [ memcache-2.2.7]# /usr/local/php5/bin/phpize Configuring for: PHP Api Version: 20131106 Zend Module Api No: 20131226 Zend Extension Api No: 220131226 [ memcache-2.2.7]# [ memcache-2.2.7]# ./configure \ ##配置 > --enable-memcache > --with-php-config=/usr/local/php5/bin/php-config [ memcache-2.2.7]# make && make install ##编译安装
[ memcache-2.2.7]# vim /usr/local/php5/php.ini extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/" extension=memcache.so
[ memcache-2.2.7]# vim /usr/local/httpd/htdocs/index.php <?php $memcache = new Memcache(); $memcache->connect(‘192.168.52.149‘,11211); $memcache->set(‘key‘,‘Memcache test Successfull!‘,0,60); $result = $memcache->get(‘key‘); unset($memcache); echo $result; ?> [ memcache-2.2.7]# service httpd stop [ memcache-2.2.7]# service httpd start [ memcache-2.2.7]#