Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
memcached作为高速运行的分布式缓存服务器,具有以下的特点:
1、协议简单;
2、基于libevent的事件处理;
3、内置内存存储方式;
4、memcached不互相通信的分布式。
为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
Memcached 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
Redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有快照和AOF日志两种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就很有可能服务器频繁满载做dump)。
Redis在数据支持上要比Memcached多的多。
新版本的Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
Redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上
Redis 支持复杂的数据结构
Redis 相比 Memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, Redis 会是不错的选择。
在 redis3.x 版本中,便能支持 Cluster 模式,而 Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据。
由于 Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis 在存储小数据时比 Memcached 性能更高。而在 100k 以上的数据中,Memcached 性能要高于 Redis,虽然 Redis 最近也在存储大数据的性能上进行优化,但是比起 Remcached,还是稍有逊色。
key 不能超过 250 个字节;
value 不能超过 1M 字节;
key 的最大失效时间是 30 天;
只支持 K-V 结构,不提供持久化和主从同步功能。
个人总结一下,有持久化需求或者对数据结构和处理有高级要求的应用,选择Redis,其他简单的key/value存储,选择Memcached。
单纯 K-V 缓存的场景可以使用 MC,而需要缓存 list、set 等特殊数据格式,可以使用 Redis;
需要缓存一个用户最近播放视频的列表可以使用 Redis 的 list 来保存、需要计算排行榜数据时,可以使用 Redis 的 zset 结构来保存。
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
(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
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
------------安装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 "Success!!
";
else echo "Fail!!";
mysql_close();
?>
[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 "Success!!
";
else echo "Fail!!";
mysql_close();
?>
(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
yum install telnet -y
telnet 127.0.0.1 11211 //连接本地用 127.0.0.1就可以了,连接其他主机使用对应IP地址即可
add username 0 0 7 //添加数据(两个0表示:不进行压缩和序列化标识,数据过期时间为永不过期;标识号是7就需要输入7位数。)
allways //输入一个7位数
get username //查询数据
gets username
set username 0 0 10 //更新信息,若键名不存在,则自行添加
everything
replace username 0 0 8 //更新信息,若键名不存在,则报错
12345678
gets username //检测更新
VALUE username 0 8 4
12345678
append username 0 0 7 //键值后追加数据
example
prepend username 0 0 2 //键值前追加数据
un
delete username //清除指定的键值数据
flush_all //清除所有缓存数据
OK
stats //显示状态信息
stats items //返回所有键值对的统计信息
stats cachedump 1 0 //返回指定存储空间的键值对
stats slabs //显示各个slab的信息
stats sizes //输出所有item的大小和个数
stats reset //清空统计数据
quit