内容简介:Memcached是一套高性能内存对象缓存系统,用于一些高负载的Web网站,主要作用是通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的响应速度、提高可扩展性。Memcached是典型的C/S架构,因此需要安装服务器端与客户端。服务器端是用C语言编写的,客户端可用任何语言来编写,如PHP、 Python、Perl等。为了提高性能,Memcached中保存的数据都存储在memcached内置的内存存储空间中,读取速度快。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全
简介
Memcached是一套高性能内存对象缓存系统,用于一些高负载的Web网站,主要作用是通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的响应速度、提高可扩展性。Memcached是典型的C/S架构,因此需要安装服务器端与客户端。服务器端是用 C语言 编写的,客户端可用任何语言来编写,如 PHP 、 Python 、 Perl 等。为了提高性能,Memcached中保存的数据都存储在 memcached 内置的内存存储空间中,读取速度快。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,缓存的数据量达到指定值或者过期之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题
工作原理
首先,Web客户端发出获取数据的请求到Web服务器的应用程序,应用程序调用Memcache客户端程序库接口,连接Memcached服务器,分为两种情况:
1.如果此时Web客户端所请求的数据在Memcached中已经缓存,则Memcached将数据返回给Web客户端,步骤为:1->2->5->6->7->8
2.如果Memcached没有缓存Web客户端所请求的数据,则Memcache客户端程序将请求转发给数据库服务器,数据库服务器将数据返回给Memcache客户端程序,然后返回给Web客户端,同时Memcache客户端程序将数据缓存到Memcached服务器,以备下次有客户端请求同样的数据,步骤分别为:1->2->3->4->7->8及4->5
实验环境
主机名称 | 操作系统 | IP地址 | 主要软件 |
---|---|---|---|
memcached | CentOS_7.4_x86_64 | 192.168.100.71 | libevent-2.1.8-stable;memcached-1.5.6 |
client | CentOS_7.4_x86_64 | 192.168.100.73 | LAMP架构相关软件 |
搭建步骤
一、服务器端安装Memcache
1、安装libevent
[root@memcached ~]# tar xvfz libevent-2.1.8-stable.tar.gz
[root@memcached ~]# cd libevent-2.1.8-stable/
[root@memcached libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent
[root@memcached libevent-2.1.8-stable]# make && make install
2、安装Memcache
[root@memcached ~]# tar xvfz memcached-1.5.6.tar.gz
[root@memcached ~]# cd memcached-1.5.6/
[root@memcached memcached-1.5.6]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/
[root@memcached memcached-1.5.6]# make && make install
3、优化路径
[root@memcached ~]# ln -s /usr/local/memcached/bin/* /usr/local/bin/
4、启动服务
[root@memcached ~]# memcached -d -m 32M -p 11211 -u root
#解析: -d: 以守护进程的方式运行memcache -m: 定义memcache分配的存储空间 -p: 指定端口号 -u: 指定运行用户
[root@memcached ~]# netstat -anpt | grep '11211'
5、使用telnet进行本地测试
[root@memcached ~]# yum -y install telnet #安装telnet服务
[root@memcached ~]# telnet localhost 11211 #连接memcache
二、Mencache相关命令
1、Mencache存储命令
1).add命令[ add命令用于将value(数据值)存储在指定的key(键)中 ]
add new_key 0 900 5 #添加值 hello STORED #保存成功,输出STORED ;ERROR,在保存失败后输出。 解析: new_key #键值 key-value 结构中的 key,用于查找缓存值 0 #可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 900 #在缓存中保存键值对的时间长度(以秒为单位,0 表示永远) 5 #在缓存中存储的字节数 hello #存储的值(始终位于第二行)
delete new_key #删除相应的数据 DELETED
2).set命令[ set命令用于将value(数据值)存储在指定的key(键)中。注意如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用 ]
add new_key 0 900 5 #添加数据 hello STORED
set new_key 0 900 5 #更新数据 word! STORED
get new_key #查看键对应的值,数据已经更新 VALUE new_key 0 5 word! END
delete new_key #删除相应的数据 DELETED
3).replace命令[ replace命令用于替换已存在的key(键)的value(数据值)。如果key不存在,则替换失败 ]
replace username 0 900 3 tom NOT_STORED #执行替换失败后输出,原因key不存在
add new_key 0 900 16 some_other_value NOT_STORED #执行替换失败后输出,原因key不存在 STORED
replace new_key 0 900 10 #替换数据 data_value STORED
get new_key #查看键对应的值,数据已经替换,并且存储的字节数也已经更改 VALUE new_key 0 10 data_value END
delete new_key #删除相应的数据 DELETED
4).append命令[ append命令用于向已存在key(键)的value(数据值)后面追加数据 ]
set runoob 0 900 9 #添加一条数据 memcached STORED
append runoob 0 900 6 #对于键"runoob"追加了6个字节格式,并且添加字符串"&redis" &redis STORED
get runoob #查询此数据 memcached&redis END
delete runoob #删除相应的数据 DELETED
5).prepend命令[ prepend命令用于向已存在key(键)的value(数据值)前面追加数据 ]
set runoob 0 900 9 #添加数据 memcached STORED
prepend runoob 0 900 6 #在"runoob "键对应的值前面追加"redis&" redis& STORED
get runoob #查询数据 VALUE runoob 0 15 redis&memcached
delete runoob #删除相应的数据 DELETED
6).CAS命令[ CAS命令用于执行一个"检查并设置"的操作,它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。检查是通过cas_token参数进行的, 这个参数是Memcach指定给已经存在的元素的一个唯一的64位值 ]
cas tp 0 900 9 ERROR #缺少token
cas tp 0 900 9 2 memcached NOT_FOUND #键tp不存在
set tp 0 900 9 #添加数据 memcached STORED
gets tp #获取唯一令×××信息 VALUE tp 0 9 12 #令×××值为12 memcached END
cas tp 0 900 5 12 #检查令×××值为"12",设置值 redis STORED #注意输出信息 STORED: 保存成功后输出 ERROR: 保存出错或语法错误 EXISTS: 在最后一次取值后另外一个用户也在更新该数据 NOT_FOUND:服务上不存在该键值
get tp #再次查询数据 VALUE tp 0 5 redis END
2、Mencache查找命令
1).get命令[ get命令获取存储在key(键)中的value(数据值),如果key不存在,则返回空 ]
set runoob 0 900 9 #添加一条数据 memcached STORED
get runoob #查找键对应的值 VALUE runoob 0 9 memcached END
delete runoob #删除相应的数据 DELETED
2). gets命令[ gets命令获取带有CAS令×××存的value(数据值),如果key不存在,则返回空 ]
set runoob 0 900 9 #添加第一条数据 memcached STORED
set test 0 900 5 #添加第二条数据 redis STORED
gets runoob test #查询数据 VALUE runoob 0 9 15 #"15"代表"runoob"键对应唯一令×××值 memcached VALUE test 0 5 16 #"16"代表"test"键对应唯一令×××值 redis END
delete runoob #删除相应的数据 delete test
3).delete命令[ delete命令用于删除已存在的key(键) ]
之前操作已经演示,略……
4).incr与decr命令[ incr与decr命令用于对已存在的 key(键) 的数字值进行自增或自减操作;incr与decr命令操作的数据必须是十进制的32位无符号整数 ]
set visitors 0 900 2 #添加一条数据 10 STORED
decr visitors 6 #将"visitors"键对应的值减去6 4
get visitors #减去6之后查看,结果为4 VALUE visitors 0 2 4 END
delete visitors #删除相应数据 DELETED
3、Mencache统计命令
1).stats命令[ stats命令用于返回统计信息例如 PID(进程号)、版本号、连接数等 ]
stats STAT pid 17274 #memcache服务器进程ID STAT uptime 17517 #服务器已运行秒数 STAT time 1537471499 #服务器当前时间戳 STAT version 1.5.6 #服务版本 STAT pointer_size 64 #操作系统指针大小 STAT rusage_user 2.775518 #进程累计用户时间 STAT rusage_system 1.189507 #进程累计系统时间 STAT max_connections 1024 #最大连接数 STAT curr_connections 2 #当前连接数量 STAT total_connections 14 #服务运行以来连接总数 STAT connection_structures 4 #服务分配的连接结构数量 STAT cmd_get 26 #get命令请求次数 STAT cmd_set 27 #set命令请求次数 STAT cmd_flush 0 #flush命令请求次数 STAT get_hits 17 #get命令命中次数 STAT get_misses 9 #get命令未命中次数 STAT delete_misses 0 #delete命令未命中次数 STAT delete_hits 8 #delete命令命中次数 STAT incr_misses 0 #incr命令未命中次数 STAT incr_hits 0 #incr命令命中次数 STAT decr_misses 0 #decr命令未命中次数 STAT decr_hits 1 #decr命令命中次数 STAT cas_misses 1 #cas命令未命中次数 STAT cas_hits 0 #cas命令命中次数 STAT cas_badval 6 #使用擦拭次数 STAT auth_cmds 0 #认证命令处理的次数 STAT auth_errors 0 #认证失败数目 STAT bytes_read 1415 #读取总字节数 STAT bytes_written 1110 #发送总字节数 STAT limit_maxbytes 33554432 #分配的内存总大小(字节) STAT accepting_conns 1 #服务器是否达到过最大连接(0/1) STAT listen_disabled_num 0 #失效的监听数 STAT threads 4 #当前线程数 STAT conn_yields 0 #连接操作主动放弃数目 STAT hash_power_level 16 #当前存储占用的字节数 STAT curr_items 0 #当前存储的数据总数 STAT total_items 19 #启动以来存储的数据总数 STAT evictions 0 #LRU释放的对象数目 STAT reclaimed 6 #已过期的数据条目来存储新数据的数目
2).stats items命令[ stats items命令用于显示各个slab中item的数目和存储时长(最后一次访问距离现在的秒数) ]
set runoob 0 900 9 #添加一条数据 memcached STORED
stats items #查看 STAT items:1:number 1 STAT items:1:number_hot 0 STAT items:1:number_warm 0 STAT items:1:number_cold 1 STAT items:1:age_hot 0 STAT items:1:age_warm 0 STAT items:1:age 6 STAT items:1:evicted 0 STAT items:1:evicted_nonzero 0 ……
delete runoob #删除相应数据 DELETED
3).stats slabs命令[ stats slabs命令用于显示各个slab的信息,包括chunk的大小、数目、使用情况等 ]
stats slabs STAT 1:chunk_size 96 STAT 1:chunks_per_page 10922 STAT 1:total_pages 1 STAT 1:total_chunks 10922 STAT 1:used_chunks 1 STAT 1:free_chunks 10921 STAT 1:free_chunks_end 0 STAT 1:mem_requested 74 STAT 1:get_hits 17 STAT 1:cmd_set 28 STAT 1:delete_hits 8 ……
4).stats sizes命令[ stats sizes命令用于显示所有item的大小和个数 ]
stats sizes STAT 96 1 #item大小及个数
5).flush_all命令[ flush_all命令用于清理缓存中的所有键值对。该命令提供了一个可选参数time,用于在制定的时间后执行清理缓存操作 ]
set runoob 0 900 9 #添加一条数据 memcached STORED
get runoob #查询数据 VALUE runoob 0 9 memcached END
flush_all #清除缓存中所有键值对 OK
get runoob #查询为空直接 END
三、客户端安装LAMP架构
1、安装httpd
1).解压相关源码包
[root@client ~]# tar xvfz apr-1.6.2.tar.gz
[root@client ~]# tar xvfz apr-util-1.6.0.tar.gz
[root@client ~]# tar xvfj httpd-2.4.29.tar.bz2
[root@client ~]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[root@client ~]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util/
2).安装相关依赖包
[root@client ~]# yum -y install \
gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl
3).安装httpd服务
[root@client ~]# cd httpd-2.4.29/
[root@client httpd-2.4.29]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
[root@client httpd-2.4.29]# make && make install
4).编辑主配置文件
[root@client ~]# vim /usr/local/httpd/conf/httpd.conf
ServerName www.bt.com:80 #编辑完全主机名 Listen 192.168.100.73:80 #编辑监听地址
5).添加系统服务
[root@client ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd #新建启动脚本
[root@client ~]# vim /etc/init.d/httpd #编辑启动脚本
# 在第2行开始插入以下两行 # chkconfig: 35 85 21 #35级别自动运行 第85个启动 第21个关闭 # description: Apache is a World Wide Web server #描述信息
[root@client ~]# chkconfig --add httpd #添加系统服务
6).优化路径
[root@client ~]# ln -s /usr/local/httpd/conf/httpd.conf /etc/ #优化配置文件路径
[root@client ~]# ln -s /usr/local/httpd/bin/* /usr/local/bin/ #优化执行可执行命令路径
7).启动服务
[root@client ~]# systemctl daemon-reload #当添加新服务使用
[root@client ~]# systemctl start httpd.service
[root@client ~]# netstat -anpt | grep ':80'
2、安装Mysql
1).安装相关 工具 包
[root@client ~]# yum -y install ncurses-devel autoconf cmake
2).安装mysql
[root@client ~]# tar xzvf mysql-5.6.26.tar.gz #解压
[root@client ~]# cd mysql-5.6.26
[root@client 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/
解析: DCMAKE_INSTALL_PREFIX:mysql软件安装位置 DDEFAULT_CHARSET:默认字符集 DDEFAULT_COLLATION:默认字符校验 DWITH_EXTRA_CHARSETS:额外的编码,请使用ALL来编译 DMYSQL_DATADIR:数据目录 DMYSQL_DATADIR:配置文件路径
[root@client mysql-5.6.26]# make && make install #编译及编译安装
3).新建配置文件
[root@client ~]# cd /usr/local/mysql/
[root@client mysql]# cp support-files/my-default.cnf /etc/my.cnf
4).添加系统服务
[root@client mysql]# cp support-files/mysql.server /etc/init.d/mysqld #新建启动脚本
[root@client ~]# chmod 755 /etc/init.d/mysqld #修改文件权限
[root@client ~]# chkconfig --add /etc/init.d/mysqld #添加系统服务
[root@client ~]# chkconfig mysqld on #设置开机自启动
5).编辑系统环境变量
[root@client ~]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile #编辑系统环境变量
[root@client ~]# source /etc/profile #重新读取系统环境变量配置文件
[root@client ~]# echo $PATH
6).添加 mysql 进程用户
[root@client ~]# useradd -s /sbin/nologin mysql
[root@client ~]# chown -R mysql:mysql /usr/local/mysql/
7).初始化服务
[root@client ~]# /usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
解析: user:指定数据库管理员 basedir:指定mysql软件安装位置 datadir:指定mysql数据安装位置
8).编辑启动脚本
[root@client ~]# vim /etc/init.d/mysqld
basedir=/usr/local/mysql #约第46行,指定数据库安装目录 datadir=/home/mysql #约第47行,指定数据存放目录
9).启动服务
[root@client ~]# systemctl daemon-reload
[root@client ~]# systemctl start httpd.service
[root@client ~]# netstat -anpt | grep ':3306'
10).初始化密码
[root@client ~]# mysqladmin -u root password "123"
3、安装php
1).安装相关依赖包
[root@client ~]# yum -y install \
gd \
libpng \
libpng-devel \
pcre \
pcre-devel \
libxml2-devel \
libjpeg-devel
2).安装php
[root@client ~]# tar xjvf php-5.6.11.tar.bz2
[root@client ~]# cd php-5.6.11
[root@client 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
[root@client php-5.6.11]# make && make install
3).新建配置文件
[root@client php-5.6.11]# cp php.ini-development /usr/local/php5/php.ini
4).优化路径
/usr/local/bin/
[root@client ~]# ln -s /usr/local/php5/sbin/
/usr/local/sbin/5).编辑httpd服务配置文件
[root@client ~]# vim /etc/httpd.conf
LoadModule php5_module modules/libphp5.so #约156行,检查此语句是否存在,如果不存在还需要重新安装mysql,如果还没有,直接重装apache <IfModule dir_module> #约255行 DirectoryIndex index.php index.html #添加index.php默认首页识别 </IfModule> <IfModule mime_module> #约370行标签内,添加以下两行,支持PHP后缀 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps ……
6).重启服务
[root@client ~]# systemctl restart httpd.service
4、测试
1).测试PHP网页能否正常显示
[root@client ~]# cd /usr/local/httpd/htdocs/ #进入站点
[root@client htdocs]# vim test1.php
<?php phpinfo(); ?>
2).测试PHP网页能访问MySQL服务器
[root@client ~]# mysql -u root -p123
[root@client ~]# cd /usr/local/httpd/htdocs/
[root@client htdocs]# vim test2.php
<?php $link=mysql_connect('192.168.100.73','root','123'); if($link) echo "<h1>Welcome to MySQL</h1>"; else echo "Fail!!"; mysql_close(); ?>
四、客户端安装Memcached
1、解压Memcache
[root@client ~]# tar xzvf memcache-2.2.7.tgz
2、用phpize命令将Memcache添加为PHP的一个模块
[root@client ~]# yum -y install autoconf #安装依赖包
[root@client ~]# cd memcache-2.2.7/
[root@localhost memcache-2.2.7]# /usr/local/php5/bin/phpize
3、安装Memcached
[root@localhost memcache-2.2.7]# ./configure --enable-memcache --with-php-config=/usr/local/php5/bin/php-config
[root@localhost memcache-2.2.7]# make && make install
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-zts-20131226/ #安装完成之后,会出现共享组件的位置
4、编辑php主配置文件
[root@client ~]# vim /usr/local/php5/php.ini
extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/" #734行,添加共享路径 extension = memcache.so #添加一行,将memcache模块添加进去
5、编写PHP测试代码调用Memcache程序接口来测试Memcached服务器与客户端协同工作是否正常
[root@client ~]# cd /usr/local/httpd/htdocs/ #进入站点
[root@client htdocs]# vim test3.php
<?php $memcache = new Memcache(); #创建memcache实例 $memcache->connect('192.168.100.71',11211); #连接memcache服务器 $memcache->set('name','hello world',0,60); #添加一条键值对数据 $result = $memcache->get('name'); #通过key获取相应的value值 unset($memcahe); #销毁实例 echo $result; ?>
[root@client htdocs]# systemctl restart httpd.service #重启web服务
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- MySQL主从复制搭建及详解
- MongoDB分片群集搭建入门详解
- laravel开发环境homestead搭建详解
- MongoDB 副本集搭建与管理详解
- NFS网络文件存储系统搭建配置详解
- SQL Server搭建网站实例图文详解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深度学习框架PyTorch:入门与实践
陈云 / 电子工业出版社 / 2018-1 / 65
《深度学习框架PyTorch:入门与实践》从多维数组Tensor开始,循序渐进地带领读者了解PyTorch各方面的基础知识。结合基础知识和前沿研究,带领读者从零开始完成几个经典有趣的深度学习小项目,包括GAN生成动漫头像、AI滤镜、AI写诗等。《深度学习框架PyTorch:入门与实践》没有简单机械地介绍各个函数接口的使用,而是尝试分门别类、循序渐进地向读者介绍PyTorch的知识,希望读者对PyT......一起来看看 《深度学习框架PyTorch:入门与实践》 这本书的介绍吧!