精选文章 MemCache详细解读

MemCache详细解读

作者:香香默默 时间: 2021-02-05 09:43:12
香香默默 2021-02-05 09:43:12
【摘要】本节内容主要关于mencache的工作原理,memcache的应用场景及其应用实例配置,memcache安装部署。 
 一、Memcached工作原理 
1.服务端缓存实现 
(1)memcached特性 
 
分布式: 实例和缓存在逻辑上是分离的 
 普通缓存Memcached缓存特 性缓存与特定的应用实例绑定,每个应用实例只能访问特定的缓存实例独立于各个应用服务器实例运行,每应用实例可以...

本节内容主要关于mencache的工作原理,memcache的应用场景及其应用实例配置,memcache安装部署。

 一、Memcached工作原理

1.服务端缓存实现

(1)memcached特性

MemCache详细解读1

分布式: 实例和缓存在逻辑上是分离的

 普通缓存Memcached缓存

缓存与特定的应用实例绑定,每个应用实例只能访问特定的缓存实例独立于各个应用服务器实例运行,每应用实例可以访问任意缓存

整个应用所能访问的缓存容量变小;缓存中存在数据冗余;缓存系统整体效率降低。整个应用所能访问的缓存容量变大;缓存中无数据冗余;缓存系统整体效率较高。

(2)缓存服务器结构的组织

MemCache详细解读2

(3)数据的存取过程

数据的存储与获取: 键值的哈希运算获得一个哈希值,通过配置文件的设置将键值对应的数据保存到相应服务器上;

通过键值的哈希运算值去找相应服务器获取数据。

(4)记录的组成及内容特性

在Memcached中,每条记录都由四部分组成:记录的键,有效期,一系列可选的标记以及表示记录内容的数据。由于记录内容的数据中并不包含任何数据结构,因此我们在Memcached中所记录的数据需要是经过序列化之后的表示。

2.内存管理机制

(1) 为了解决数据频繁读写而导致的内存碎片化问题,引入了slab的概念。

(2) 存储过程,通过数据的大小来找slab,对应的slab类型中有空闲块则存储,没有创建一个新的slab。

MemCache详细解读3

(3) 这样的存储方式弊端是浪费资源,因此需要根据实际业务优化,设定初始数据的块大小和递增倍数。

MemCache详细解读4

(4) 内存的清理机制,"延迟过期",在没有内存空间的情况下存储数据,

检查有没有过期数据,有覆盖过期数据,没有启动LRU算法,清理最近一次调运时间最长的数据。

(5) 高可用的实现----》一致性hash

二、memcache安装部署

1.安装libevent(依赖)

wget http://monkey.org/~provos/libevent-1.4.14b-stable.tar.gz

tar zxvf libevent-1.4.14b-stable.tar.gz
yum install make gcc gcc-c++
cd libevent-1.4.14b-stable
./configure --prefix=/usr/local/libevent/
make
make install

2.安装memcache

wget https://memcached.org/files/memcached-1.5.16.tar.gz

tar -zxvf memcached-1.4.5.tar.gz
cd memcached-1.4.5
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/
make
make install

启动:

[root@localhost init.d]# /usr/local/memcached/bin/memcached -d -l 127.0.0.1 -p   11211 -u root -m 64 -c 1024 -P /var/run/memcached.pid
[root@localhost init.d]# ps -ef |grep memcached

root   16227   1 0 00:56 ? 00:00:00
/usr/local/memcached/bin/memcached -d -l 127.0.0.1 -p 11211 -u root -m 64 -c
1024 -P /var/run/memcached.pid
root   16238  1201 0 00:57 pts/0  00:00:00 grep --color=auto memcached

链接测试:

[root@localhost init.d]# telnet 127.0.0.1 11211

查看当前memcache的状态:stats

退出:quit

安装MySQL:https://blog.csdn.net/xiangmomo1/article/details/107307192

三、memcached应用场景及应用实例配置

1.场景:Web缓存 数据库缓存

在使用 memcached做法:

MemCache详细解读5

(当MySQL数据变化后,memcache缓存机制也会出发,在缓存一份新的数据;第一次访问,访问数据库,访问数据库时缓存机制会缓存一份数据,下次直接缓存memcache,当memcache的数据过期后,继续缓存MySQL。)

2.应用实例配置

MemCache详细解读6

环境规划:

192.168.253.150 : memcache

192.168.253.149: web

192.168.253.135 : mysql

同步时间:

yum -y install ntp ntpdate

 ntpdate cn.pool.ntp.org

hwclock --systohc

关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0

在web服务器上配置:

rpm -e mariadb-libs postfix #卸载自带的数据库mariadb
wget https://downloads.mysql.com/archives/get/file/mysql-community-libs-compat-8.0.16-2.el7.x86_64.rpm  #下载MySQL

yum localinstall   mysql-community-client-8.0.16-2.el7.x86_64.rpm mysql-community-server-8.0.16-2.el7.x86_64.rpm mysql-community-libs-8.0.16-2.el7.x86_64.rpm   mysql-community-common-8.0.16-2.el7.x86_64.rpm mysql-community-libs-compat-8.0.16-2.el7.x86_64.rpm #注意这是一条命令
yum install httpd php php-gd php-mysql php-memcache
systemctl restart httpd
systemctl enable httpd

在mysql服务端创建用户:

mysql> create user 'memcache'@'%' identified by 'Axiang@123';
mysql> alter user 'memcache'@'%' IDENTIFIED WITH mysql_native_password BY
'Axiang@123';
mysql> flush privileges;

(web上)测试

1.测试http功能:

[root@localhost ~]# vim /var/www/html/index.html
[root@localhost ~]# cat /var/www/html/index.html
this is a test form 149..

MemCache详细解读7

2.测试PHP链接功能

vim /var/www/html/index.php

cat /var/www/html/index.php
phpinfo();
?>

MemCache详细解读8

3.测试mysql(web机器上)

vim /var/www/html/mysql.php

$link=mysql_connect('192.168.253.135','superadmin','Axiang@123');
if($link) echo "

Success!!

";
else echo "Fail!!";
mysql_close();
?>

MemCache详细解读9

功能测试:

1.测试web和memcache的连通性:

未改连通性之前:在web服务器上 telnet 192.168.253.150:11211   连接不上

修改客户端监听所有地址(在memcache执行下面这一条命令)   ——》在web服务器上就可以连接上

[root@localhost ~]# /usr/local/memcached/bin/memcached -d -l 0.0.0.0 -p 11211 -u

root -m 64 -c 1024 -P /var/run/memcached.pid

在web服务器上测试

代码测试

vim /var/www/html/mencaceh.php

$memcache = new Memcache;
$memcache->connect('192.168.253.150', 11211) or die ("Could not connect");
$version = $memcache->getVersion();

echo "Server's version: ".$version."
";
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at
the server");
echo "Store data in the cache (data will expire in 10 seconds)
";
$get_result = $memcache->get('key');
echo "Data from the cache:
";
var_dump($get_result);
?>

MemCache详细解读10

配置session(web服务器)

vim /etc/php.ini

session.save_handler = memcache
session.save_path = "tcp://192.168.42.145:11211?
persistent=1&weight=1&timeout=1&retry_interval=15"

测试memcache的可用性(web服务器)

 vim /var/www/htmlmemcached1.php

session_start();
if (!isset($_SESSION['session_time']))
{
$_SESSION['session_time'] = time();
}
echo "session_time:".$_SESSION['session_time']."
";
echo "now_time:".time()."
";
echo "session_id:".session_id()."
";
?>

MemCache详细解读11

在数据库节点上创建测试数据库

create database testab1;
use testab1;
create table test1(id int not null auto_increment,name varchar(20) default
null,primary key(id)) engine=innodb auto_increment=1 default charset=utf8;
insert into test1(name) values ('tom1'),('tom2'),('tom3'),('tom4'),('tom5');
select * from test1;
mysql> grant select on testab1.* to memcache@'%';
Query OK, 0 rows affected (0.00 sec)

测试memcache是否缓存数据库成功

vim /var/www/html/memcached2.php

$memcachehost = '192.168.253.150;
$memcacheport = 11211;
$memcachelife = 60;
$memcache = new Memcache;
$memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");
$query="select * from test1 limit 10";
$key=md5($query);
if(!$memcache->get($key))
{
$conn=mysql_connect("192.168.253.135","memcache","Axiang@123");
mysql_select_db(testab1);
$result=mysql_query($query);
while ($row=mysql_fetch_assoc($result))
{
$arr[]=$row;
}
$f = 'mysql';
$memcache->add($key,serialize($arr),0,30);
$data = $arr ;
}
else{
$f = 'memcache';
$data_mem=$memcache->get($key);
$data = unserialize($data_mem);
}
echo $f;
echo "
";
echo "$key";
echo "
";
//print_r($data);
foreach($data as $a)
{
echo "number is $a[id]";
echo "
";
echo "name is $a[name]";
echo "
";
}
?>

如果出现mysql表示memcached中没有内容,需要memcached从数据库中取得:(第一次在数据库上找数据,第二次在memcache,默认memcache的缓存时间为一分钟。一分钟后又在MySQL中找数据。)

MemCache详细解读12

刷新页面,如果有memcache标志表示这次的数据是从memcached中取得的。

MemCache详细解读13

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:纯干货 | UI界面中按钮设计CTA按钮\订阅按钮

下一篇:零基础学习HTML5前端提升攻略!

您可能感兴趣

  • 地域为何消失——解读《消失的地域:电子媒介对社会行为的影响》

    地域为何消失 ——解读《消失的地域:电子媒介对社会行为的影响》[1] 正名 对于《消失的地域》这本书的标题,有两处可能造成混淆,需要预先澄清。首先,“消失的地域”原文为“no sense of place”,意指“地域差异之社会意义的减弱乃至消亡”;其次,“电子媒介”最主要的意义是指电视,而非21世纪最常指代的网络。 现在,读者可以从这个标题洞察到全书的核心内容:这本成书于1985年的传播学...

  • 全面解读WM_NOTIFY

    摘要:控件通知消息有很多种,但是有一种是很常用,但是又不是很容易掌握的,那就是WM_NOTIFY,我试着对此做一下比较全面的论述,有不对的地方,还希望各路大虾批评指正。     控件通知消息    在《深度解析VC中的消息(上)》中,我们提到了消息的分类有3种:窗口消息、命令消息和控件通知消息,我们这里要谈的是最后一种:控件通知消息。    控件通知消息,是指这样一种消息,一个窗口内的子控件...

  • 取得ie详细版本信息.及其它版本信息的两种方法.

    第一种方法: //通过读取注册表的信息的方法.//HKEY_LOCAL_MACHINE/Software/Microsoft/Internet Explorer/Version//内有Internet Explorer的详细的版本号. //你可以通过注册表读取众多的信息//.缺点:有安全提示. ie 的版本详细信息. 发散.....

  • Vml+Js算法:完成5个小球在网页运动(碰壁返回)的游戏,详细注释

    物极必反

  • CppUnit源码解读(4)

    【声明】如需复制、传播,请附上本声明,谢谢。原文出处:http://morningspace.51.net/,moyingzz@etang.com 错误处理 [TestFailure] 相关文件:TestFailure.h,TestFailure.cpp CppUnit中有两种类型的错误,它们分别是:failure和error。一个failure是可预期的,并可以为断言(assert...

  • CppUnit源码解读(5)

    【声明】如需复制、传播,请附上本声明,谢谢。原文出处:http://morningspace.51.net/,moyingzz@etang.com 断言 从这里开始,将要讲述core中,与断言相关的部分。 [Asserter] 相关文件:Asserter.h,Asserter.cpp Asserter并非类名,而是一个name space,它内嵌于CppUnit name spac...

  • [转贴]全面解读IPV6

    [原文:http://www.donews.com/donews/article/6/61101.html]     2004年3月19日,几乎所有报纸都刊登了这一新闻:采用IPV6协议的中国第一个下一代互联网主干网——CERNET2试验网在京正式开通并提供服务,标志着中国下一代互联网建设的全面启动,也标志着中国在世界下一代互联网研究与建设上占据了一席之地。    从此以后,IPV6这个名字...

  • DGF的详细解说[Sumtec]

    实际上在很早之前,我曾经发表了好几个Post,来解说我这个计划的总体思想以及一些详细的解说,也许是比较零散吧,可能有部分朋友没有能够全面的了解。先给大家收集一下这些文章的连接,不过也许我那些都说得太详细了,如果您嫌麻烦,可以跳过这些链接,我会尝试用简洁的语言,从另外一个角度描述整个的计划。当然,如果您能够耐心的看完所有的这些东西,自然最好,毕竟详细的解释比起简单的解释不容易引起歧义。下面是连...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
MemCache详细解读介绍:华为云为您免费提供MemCache详细解读在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多MemCache详细解读的相关内容。| 移动地址: MemCache详细解读 | 写博客