听说Memcache你很豪横?-------------深入剖析Memcache 安装及管理数据库操作

2020-09-15 09:54:52 浏览数 (1)

文章目录

  • 一、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

0 人点赞