MemCached缓存技术

一、什么是MemCached

Memcache是一套开源高性能的分布式的内存对象缓存系统,目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著 。

Memcache将所有数据存储在内存中,并在内存里维护一个统一的巨大的Hash表,它能存储任意类型的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

二、为什么要用MemCached?

先看一个问题,这个问题在大并发,高负载的网站中必须考虑!大家思考如何让速度更快。

解决方案:
传统的RDBMS
页面静态化
MemCached缓存技术

在这里插入图片描述

三、MemCached的基本原理和体系结构

简单的说: memcached就是在内存中维护一张巨大的hash表,通过自己的一套路由算法来维护数据的操作。
在这里插入图片描述

四、MemCached数据的存储方式和过期

4.1 数据存储方式:Slab Allocation即:按组分配内存

(1)每次先分配一个Slab,相当于一个page,大小1M。

(2)然后在1M的空间里根据内容再划分相同大小的chunk。

(3)优点是:最大限度的利用内存,避免产生内存碎片 。

(4)缺点是:会造成内存的浪费。

在这里插入图片描述

4.2 数据过期方式

(1)懒过期方式(Lazy Expiration):

memcached内部不监视数据是否过期,而是get时查看记录时间,检查是否已经过期,这叫惰性过期。

(2)LRU算法:采用最近最少使用算法淘汰内存中的数据

五、MemCached安装与部署

实验环境:

OracleLinux-R6-U6-Server-i386-dvd.iso
memcached-1.4.25.tar.gz
memcached-1.2.8-repcached-2.2.tar.gz
libevent-2.0.21-stable.tar.gz
spymemcached-2.10.3.jar

(1)安装gcc编译器

yum install gcc

(2)安装Libevent

确认是否已经安装?并删除旧版本

rpm -qa | grep libevent
rpm -e libevent-1.4.13-4.el6.i686 --nodeps

解压:

tar -zxvf libevent-2.0.21-stable.tar.gz

安装到/root/training/libevent目录

./configure --prefix=/root/training/libevent

make

make install

(3)安装MemCached
在这里插入图片描述
(4)启动MemCached:memcached -h 帮助信息

启动命令:./memcached -u root -d -m 128

-p:指定端口 默认:11211
-u:指定用户名(root用户必须使用该选项)
-m:分配的内存,默认:64M
-c:最大并发连接,默认1024
-d:启动一个守护进程

在这里插入图片描述

六、操作MemCached

6.1 Telnet方式(命令行方式)

在这里插入图片描述
在这里插入图片描述
统计信息的命令:

stats 
stats items
stats slabs

6.2 Java客户端方式

需要添加memcached相关jar包:
链接:http://www.java2s.com/Code/Jar/s/Downloadspymemcached290jar.htm

(1)插入数据:
在这里插入图片描述
(2)查询数据:
在这里插入图片描述
(3)基于客户端的分布式插入数据:
在这里插入图片描述

七、MemCached的路由算法

7.1 求余数hash算法

用key做hash运算得到一个整数,根据余数路由

例如:服务器端有三台MemCached服务器
根据key,做hash运算
7%3=1,那么就路由到第2台服务器。
6%3=0,那么路由到第1台服务器
5%3=2,那么路由到第3台服务器

优点:数据分布均衡在多台服务器中,适合大多数据需求。
缺点:如果需要扩容或者有宕机的情况,会造成数据的丢失。

7.2 一致性hash算法

(1)基本原理:
在这里插入图片描述
(2)一致性hash算法下扩容:
在这里插入图片描述
(3)一致性hash算法下DOWN机:
在这里插入图片描述

八、MemCached的主主复制和HA

8.1 Memcached主主复制

在这里插入图片描述
(1)安装具有复制功能的memcached版本

tar zxvf memcached-1.2.8-repcached-2.2.tar.gz

cd memcached-1.2.8-repcached-2.2

./configure --prefix=/root/training/memcached_replication 
--with-libevent=/root/training/libevent/ --enable-replication

make

make install

make时会出现以下错误:
在这里插入图片描述
解决办法,编辑memcached.c文件如下:
在这里插入图片描述
修改成如下形式:
在这里插入图片描述
(2)启动第一台MemCached,使用-x指定对端服务器的地址

./memcached -d -u root -m 128 -x 192.168.137.12

(3)启动第二台MemCached,使用-x指定对端服务器的地址

./memcached -d -u root -m 128 -x 192.168.137.11

出现以下错误:
在这里插入图片描述
解决办法:

查找 libevent-2.0.so.5

whereis libevent-2.0.so.5

使用ldd命令查看memcached命令,发现找不到
在这里插入图片描述
建立软链接

ln -s /root/training/libevent/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5

8.2 Memcached的HA(High Availablity)

在这里插入图片描述
Keepalived是一个交换机制的软件。Keepalived的作用是检测服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

利用Keepalived实现MemCached的主主复制高可用架构:

Keepalived在memcached主服务器产生一个虚拟IP(VIP)
Keepalived可以通过不断的检测memcached主服务器的11211端口是否正常工作,
如果发现 memcached Down机,虚拟IP就从主服务器移到从服务器

(1)配置Keepalived(每台机器都要配置):

rpm -ivh keepalived-1.2.13-4.el6.i686.rpm

配置:主从节点都要配置,配置文件:

vi /etc/keepalived/keepalived.conf

//主节点配置信息
! Configuration File for keepalived

	global_defs {
	notification_email {
	collen_training@126.com
    }
	notification_email_from collen_training@126.com
	smtp_server 127.0.0.1
	smtp_connect_timeout 30
	router_id LVS_DEVEL
}

vrrp_instance VI_1 {
	state MASTER
	interface eth0
	virtual_router_id 51
	    priority 101
	advert_int 1
	authentication {
	auth_type PASS
	auth_pass 1111
    }

virtual_ipaddress {
	192.168.137.88
    }
}



//从节点配置信息
! Configuration File for keepalived

global_defs {
	notification_email {
	collen_training@126.com
    }
	notification_email_from collen_training@126.com
	smtp_server 127.0.0.1
	smtp_connect_timeout 30
	router_id LVS_DEVEL
}

vrrp_instance VI_1 {
	state MASTER
	interface eth0
	virtual_router_id 51
	    priority 100
	advert_int 1
	authentication {
	auth_type PASS
	auth_pass 1111
    }
    
virtual_ipaddress {
	192.168.137.88
    }
}

(2)验证Keepalived:

//查看虚拟ip地址
ip ad sh 

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43520450/article/details/106244708