文章目录
- 一、Memcached 简介:
- 1、介绍:
- 2、特点:
- 3、存储方式:
- 二、关于Redis和Memcached的不同,主要有以下几点
- 1、存储方式:
- 2、数据支持类型:
- 3、使用底层模型不同:
- 4、运行环境不同:
- 5、Redis 原生支持集群模式
- 6、性能对比
- 7、Memcached还有如下缺点
- 8、总结
- 二、案例部署
- 1、实验环境
- 2、拓扑图如下
- 3、具体配置如下
- (1)服务端安装部署memcached
- (2)客户端安装部署LAMP架构
- (3)测试lamp架构
- (4)测试php连接数据库
- (5)客户端安装memcached连接服务端
- (6)测试memcached连接情况
- 三、Memcached 数据库操作与管理
- 1、安装使用 telnet 连接主机IP地址以及11211端口,就可以对数据库进行操作和管理了
- 2、新建数据:
- 3、查询数据
- 4、更新数据:
- 5、检测/查看 更新数据:
- 6、追加数据:
- 7、清除数据:
- 8、查看服务器统计信息:
- 9、退出:
一、Memcached 简介:
1、介绍:
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
2、特点:
memcached作为高速运行的分布式缓存服务器,具有以下的特点:
1、协议简单; 2、基于libevent的事件处理; 3、内置内存存储方式; 4、memcached不互相通信的分布式。
3、存储方式:
为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
二、关于Redis和Memcached的不同,主要有以下几点
1、存储方式:
Memcached 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小 Redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有快照和AOF日志两种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就很有可能服务器频繁满载做dump)。
2、数据支持类型:
Redis在数据支持上要比Memcached多的多。
3、使用底层模型不同:
新版本的Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4、运行环境不同:
Redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上 Redis 支持复杂的数据结构 Redis 相比 Memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, Redis 会是不错的选择。
5、Redis 原生支持集群模式
在 redis3.x 版本中,便能支持 Cluster 模式,而 Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据。
6、性能对比
由于 Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis 在存储小数据时比 Memcached 性能更高。而在 100k 以上的数据中,Memcached 性能要高于 Redis,虽然 Redis 最近也在存储大数据的性能上进行优化,但是比起 Remcached,还是稍有逊色。
7、Memcached还有如下缺点
key 不能超过 250 个字节; value 不能超过 1M 字节; key 的最大失效时间是 30 天; 只支持 K-V 结构,不提供持久化和主从同步功能。
8、总结
个人总结一下,有持久化需求或者对数据结构和处理有高级要求的应用,选择Redis,其他简单的key/value存储,选择Memcached。
单纯 K-V 缓存的场景可以使用 MC,而需要缓存 list、set 等特殊数据格式,可以使用 Redis;
需要缓存一个用户最近播放视频的列表可以使用 Redis 的 list 来保存、需要计算排行榜数据时,可以使用 Redis 的 zset 结构来保存。
二、案例部署
1、实验环境
vmware15.5 centos7.6 memcached-1.5.6.tar.gz libevent-2.1.8-stable.tar.gz php-5.6.11.tar.bz2 mysql-5.6.26.tar.gz apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2
2、拓扑图如下
3、具体配置如下
(1)服务端安装部署memcached
(1)安装依赖环境包: yum install gcc gcc-c make -y
(2)解压软件包: tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/ tar zxvf memcached-1.5.6.tar.gz -C /opt/ //时间库 是memcache的依赖包
(3)编译安装 libevent : cd /opt/libevent-2.1.8-stable ./configure --prefix=/usr/local/libevent make && make install
(4)编译安装 memcached : cd /opt/memcached-1.5.6/
./configure –prefix=/usr/local/memcached –with-libevent=/usr/local/libevent/
make && make install
(5)方便操作可以创建一个软链接: ln -s /usr/local/memcached/bin/* /usr/local/bin
(6)开启 memcached 服务:
memcached -d -m 32m -p 11211 -u root
//-d守护进程 ;-m缓存大小32M ;-p端口11211
(7)查看端口是否正常开发: netstat -natp | grep memcached
(8)关闭防火墙 [root@promote memcached-1.5.6]# systemctl stop firewalld [root@promote memcached-1.5.6]# setenforce 0 (9)测试memcache
代码语言:javascript复制root@promote memcached-1.5.6]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set username 0 0 10 0不设置他的序列号 0 不设置他的过期时间 10 设置字符长度
evereqqqqq
STORED
gets username
VALUE username 0 10 2 更新因子 每次更新都会加一
evereqqqqq
END
(2)客户端安装部署LAMP架构
代码语言:javascript复制------------安装Apache----下面两个插件是httpd2.4以后的版本所需要-----
tar xf apr-1.6.2.tar.gz
tar xf apr-util-1.6.0.tar.gz
tar xf httpd-2.4.29.tar.gz
mv apr-1.6.2 httpd-2.4.29/srclib/apr
mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
yum -y install
gcc
gcc-c
make
pcre-devel
expat-devel
perl
cd httpd-2.4.29
./configure
--prefix=/usr/local/httpd
--enable-so
--enable-rewrite
--enable-charset-lite
--enable-cgi
make && make install
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
vi /etc/init.d/httpd
# chkconfig: 35 85 21 //35级别自动运行 第85个启动 第21个关闭
# description: Apache is a World Wide Web server
chkconfig --add httpd //将httpd加入到SERVICE管理器
vi /usr/local/httpd/conf/httpd.conf
ServerName
ln -s /usr/local/httpd/conf/httpd.conf /etc/
ln -s /usr/local/httpd/bin/* /usr/local/bin/
systemctl stop firewalld.service
setenforce 0
httpd -t
apachectl -t
service httpd start
netstat -anpt | grep 80
--------------以下是安装MYSQL-----http://mirrors.sohu.com/mysql/---
yum install -y ncurses-devel autoconf
tar xzvf mysql-5.6.26.tar.gz
cd 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
make && make install
cp support-files/my-default.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add /etc/init.d/mysqld
chkconfig mysqld --level 235 on
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
echo $PATH
useradd -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql/
/usr/local/mysql/scripts/mysql_install_db
--user=mysql
--ldata=/var/lib/mysql
--basedir=/usr/local/mysql
--datadir=/home/mysql
ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock
vi /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/home/mysql
service mysqld start
netstat -anpt | grep 3306
mysqladmin -u root -p password "abc123" //给root账号设置密码
---------以下安装PHP------------
yum -y install
gd
libpng
libpng-devel
pcre
pcre-devel
libxml2-devel
libjpeg-devel
tar xjvf php-5.6.11.tar.bz2
cd 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
make && make install
cp php.ini-development /usr/local/php5/php.ini
ln -s /usr/local/php5/bin/* /usr/local/bin/
ln -s /usr/local/php5/sbin/* /usr/local/sbin/
vi /etc/httpd.conf //在合适位置新增
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
vi /usr/local/httpd/htdocs/index.php
<?php
phpinfo();
?>
在网页测试“http://192.168.80.182/index.php”
--------下面测试数据库工作是否正常-----
mysql -u root -p
CREATE DATABASE sky;
GRANT all ON sky.* TO 'skyuser'@'%' IDENTIFIED BY 'admin123';
flush privileges;
<?php
$link=mysql_connect('192.168.80.193','skyuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
mysql_close();
?>
(3)测试lamp架构
(4)测试php连接数据库
代码语言:javascript复制[root@localhost apache]# mysql -u root -p
GRANT all ON dog.* TO 'doguser'@'%' IDENTIFIED BY 'adc123';
mysql> flush privileges;
[root@localhost mysql]# vim /usr/local/httpd/htdocs/index.php
<?php
$link=mysql_connect('192.168.110.133','doguser','adc123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
mysql_close();
?>
(5)客户端安装memcached连接服务端
(1)安装依赖包: shell工具 yum install autoconf -y
(2)解压: tar zvxf memcache-2.2.7.tgz -C /opt/
(3)编译(使用PHP的phpize脚本生成配置脚本configure,再进行配置编译): cd /opt/memcache-2.2.7 /usr/local/php5/bin/phpize
./configure –enable-memcache –with-php-config=/usr/local/php5/bin/php-config
(4)安装: make && make install
(5)安装完成后,会出现一行,这是共享文件的位置,后面要用到: /usr/local/php5/lib/php/extensions/no-debug-zts-20131226/
(6)编辑测试页面 vim /usr/local/httpd/htdocs/index.php
<?php $memcache=new Memcache(); $memcache->connect('192.168.220.169',11211); ##连接Memcached服务器地址 $memcache->set('key','Memcache test Successfull!',0,60); $result=$memcache->get('key'); unset($memcache); echo$result; ?>
(6)测试memcached连接情况
三、Memcached 数据库操作与管理
1、安装使用 telnet 连接主机IP地址以及11211端口,就可以对数据库进行操作和管理了
代码语言:javascript复制yum install telnet -y
telnet 127.0.0.1 11211 //连接本地用 127.0.0.1就可以了,连接其他主机使用对应IP地址即可
2、新建数据:
代码语言:javascript复制add username 0 0 7 //添加数据(两个0表示:不进行压缩和序列化标识,数据过期时间为永不过期;标识号是7就需要输入7位数。)
allways //输入一个7位数
3、查询数据
代码语言:javascript复制get username //查询数据
gets username
4、更新数据:
代码语言:javascript复制set username 0 0 10 //更新信息,若键名不存在,则自行添加
everything
replace username 0 0 8 //更新信息,若键名不存在,则报错
12345678
5、检测/查看 更新数据:
gets username //检测更新 VALUE username 0 8 4 12345678
6、追加数据:
append username 0 0 7 //键值后追加数据 example
prepend username 0 0 2 //键值前追加数据 un
7、清除数据:
delete username //清除指定的键值数据 flush_all //清除所有缓存数据 OK
8、查看服务器统计信息:
代码语言:javascript复制stats //显示状态信息
stats items //返回所有键值对的统计信息
stats cachedump 1 0 //返回指定存储空间的键值对
stats slabs //显示各个slab的信息
stats sizes //输出所有item的大小和个数
stats reset //清空统计数据
9、退出:
代码语言:javascript复制quit