Linux系统架构-----memcached简介、操作命令与部署

目录

 

一.memcached的详述

memcached的定义

memcached的工作方式

memcached的特点

memcached的使用场景

在分布式/群集redis/memcached/kafka/hadoop/mycat中使用到的一致性Hash算法

二.部署memcached

网络拓扑图

环境配置

扫描二维码关注公众号,回复: 9301535 查看本文章

配置memcached服务器

配置LAMP和memcache

验证配置


一.memcached的详述

memcached的定义

  • memcache是一套分布式的高速缓存系统,由LiveJournal的Bard Fitzpartrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度,提升效果十分显著。memcache是一套开放源代码软件,以BSD license授权发布的
  • 以下是memcache官网(http://memcached.org/

memcached的工作方式

  • 工作流程:先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作,如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份memcached中(memcache客户端不负责,需要程序明确实现);每次更新数据库的同时更新memcached中的数据,保持一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效策略首先被替换,然后再替换掉最近未使用的数据

memcached的特点

  • memcached本质上是一个内存key-value缓存,它通过减轻数据库负载加速动态web应用。
  • memcached不支持数据的持久化,服务器关闭之后数据全部丢失。
  • memcached协议简单,使用的是基于文本行的协议。
  • memcached是多线程工作,redis是单线程工作,各个memcached服务器之间互不通信,各自独立存取数据,不共享任何信息
  • memcached服务器不具有分布式功能,分布式部署取决于memcache客户端
  • memcached用lazy expiration(懒淘汰)实现key过期
  • memcached通过提前分配内存保证运行性能,很少出现内存碎片
  • memcached使用非阻塞IO服用网络模型,目的是提高数据吞吐量
  • memecached使用listen/work的多线程模型,优点是能够充分利用多核,但是会带来一些锁冲突

memcached为什么不支持持久化,不支持复杂数据结构?

业务决定技术方案,memcached以“以服务的方式,而不是库的方式管理KV内存”,为设计目标,它与其他缓存数据库不一样的是KV内存管理组件库,持久化和复杂数据结构并不是它的初衷

memcached的使用场景

  • 数据查询缓存:将数据库的数据加载到memcached,提供程序的访问速度
  • 计数器的场景:通过incr/decr命令实现评论数量、点击数统计、操作次数等场景
  • 乐观锁实现:例如计划任务多实例部署的场景,通过CAS实现不重复执行
  • 防重复处理命令:CAS命令

集群和分布式的区别:集群可以在单机或者多台机子上部署多个相同配置的服务;分布式在多台机子上部署多个不同服务

在分布式/群集redis/memcached/kafka/hadoop/mycat中使用到的一致性Hash算法

  • 在集群增加或者减少机器的时候,如果用hash算法就会出现大面积缓存不足的情况,造成数据库服务器崩溃,所以此时出现了一致性hash算法。将数据存放在hash取模之后的一个节点,但是一致性hash算法无法解决负载均衡的问题,因为数据本身就是不均衡的。所以加强版本是增加虚拟节点,原因是虚拟节点越多,则数据尽可能均匀。但是虚拟节点是需要维护的,数量也有上限(2^32)。一致性hash算法是无法完全达到均匀数据的。

二.部署memcached

网络拓扑图

  • memcached服务器提供缓存数据库,在LAMP架构主机上安装memcache,memcache提供API接口,在LAMP上的php上调用这个接口,把数据缓存在memcached

环境配置

主机名 IP地址 系统 软件包
memcached 192.168.43.101 centos7

libevent-2.1.8-stable.tar.gz 

memcached-1.5.6.tar.gz

lamp 192.168.43.102 centos7

memcached-1.5.6.tar.gz

 httpd-2.4.29.tar.bz2

apr-1.6.2.tar.gz

apr-util-1.6.0.tar.gz 

mysql-5.6.26.tar.gz

 php-5.6.11.tar.bz2 

配置memcached服务器

  • 配置主机名
hostnamectl set-hostname memcached
  • 安装事件通知库,libevent(可在memcached官网上下载)
##解压数据包
tar xzvf libevent-2.1.8-stable.tar.gz -C /opt
cd /opt/libevent-2.1.8
##安装环境包
yum install -y gcc gcc-c++ make 
##编译、安装libevent
./configure --prefix=/usr/local/libevent
make && make install

由于memcached安装依赖于libevent,所以必须先安装libevent

  • 安装memcahed
##解压软件包 
tar xzvf memcached-1.5.6.tar.gz -C /opt
##手工编译安装
cd /opt/memcached-1.5.6/
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make && make install

##优化memcached的执行文件
ln -s /usr/local/memcached/bin/* /usr/local/bin

##开启memcached服务
## -d守护进程;-m指定缓存大小;-p指定端口;-u指定用户
memcached -d -m 32m -p 11211 -u root

##验证进程是否开启
netstat -natp | grep 11211
[root@memcahced ~]# netstat -natp | grep 11211
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      45004/memcached     
tcp6       0      0 :::11211                :::*                    LISTEN      45004/memcached     
[root@memcahced ~]#

##关闭防火墙和SElinux功能
systemctl stop firewalld.service 
setenforce 0

##使用telnet连接memcached数据库
##查看是否存在telnet功能
rpm -q telnet
yum install telnet -y

##连接数据库
[root@memcahced ~]# telnet 192.168.43.101 11211
Trying 192.168.43.101...
Connected to 192.168.43.101.
Escape character is '^]'.

  • memcached缓存数据库的命令操作
分组 命令 描述
存储命令 set 用于将value存储在指定的key中。key已经存在,则更新该key所对应的原来的数据
add 用于将value存储在指定的key中,存在则不更新
replace 替换已存在的key的value,不存在,则替换失败
append 命令用于向已经存在key的value后面追加数据
prepend 向已存在的key的value前面追加数据
cas 比较和替换,对比后,没有被其他用户修改的情况下才能写入
检索命令 get 获取存储在key中的value,不存在,则返回空
gets 获取带有CAS令牌存的value,若key不存在,则返回为空
删除 delete 删除已存在的key
计算 incr/decr 对已经存在的key的数据值进行自增或自减操作
统计 stats 返回统计信息例如PID、版本号、连接数等
stats items 显示各个slab中item的数目和存储时长(最后一次访问距离现在的秒数)
stats sizes 显示所有item的大小和个数
stats slabs

显示各个slab的信息,包括chunk的大小、数目、使用情况等

清除 flush_all 清除所有内容

配置LAMP和memcache

  • 修改主机名
hostnamectl set-hostname lamp

  • 配置memcache
##解压memcache软件包  
tar xzvf memcache-2.2.7.tgz -C /opt

##手工编译安装
cd /optmemcache-2.2.7/
##由于没有执行脚本文件,所以执行下列命令,生成configure
/usr/local/php5/bin/phpize 
##配置,开启memeche,增加PHP模块
 ./configure --enable-memcache --with-php-config=/usr/local/php5/bin/php-config
make && make install

vim /usr/local/php5/php.ini 

##找出一处位置增加
extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/"
##指向memcache模块
extension = memcache.so

##编辑php测试页面
vim /usr/local/httpd/htdocs/index.php 
<?php
$memcache = new Memcache();
$memcache->connect('192.168.43.101',11211);
$memcache->set('key','Memcache test Successful',0,60);
$result = $memcache->get('key');
unset($memcache);
echo $result;
?>
~  

##重启httpd服务
service httpd stop
service httpd start

验证配置

  • 出现如下画面则,说明部署成功

注:在mecache上关闭防火墙、SElinux功能

发布了119 篇原创文章 · 获赞 132 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42761527/article/details/104309886
今日推荐