Memcached概述、基本操作指令以及部署

一:memcached的概述

1.1:memcached的定义

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

  • 以下是memcache官网(http://memcached.org/)

在这里插入图片描述

1.2:memcached的工作流程

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

1.3: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内存管理组件库,持久化和复杂数据结构并不是它的初衷

1.4:memcached的使用场景

  • 数据查询缓存:将数据库的数据加载到memcached,提供程序的访问速度

  • 计数器的场景:通过incr/decr命令实现评论数量、点击数统计、操作次数等场景

  • 乐观锁实现:例如计划任务多实例部署的场景,通过CAS实现不重复执行

  • 防重复处理命令:CAS命令

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

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

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

二:部署memcached

2.1:实验环境

  • 两台centos 7.6

    • memcached服务器:20.0.0.51,安装服务:libevent-2.1.8-stable.tar.gz

      memcached-1.5.6.tar.gz

    • lamp服务器:20.0.0.52,安装服务: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

2.2:实验原理图

在这里插入图片描述

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

2.3:配置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服务'
memcached -d -m 32m -p 11211 -u root
'-d守护进程;-m指定缓存大小;-p指定端口;-u指定用户'

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

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

'使用telnet连接memcached数据库'
'查看是否存在telnet功能,安装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 清除所有内容

2.4:配置LAMP和memcache

  • 修改主机名
hostnamectl set-hostname lamp
  • 配置LAMP架构(手工编译),具体配置可以看我之前的博客

链接: https://blog.csdn.net/m0_47219942/article/details/107779877.

  • 配置memcache
yum install autoconf -y
'解压memcache软件包'
[root@localhost ~]# tar xf memcache-2.2.7.tgz -C /opt/
手工编译安装
[root@localhost ~]# cd /opt/memcache-2.2.7/
[root@localhost memcache-2.2.7]# /usr/local/php5/bin/phpize
'配置,开启memeche,增加PHP模块'
[root@localhost memcache-2.2.7]# ./configure --enable-memcache --with-php-config=/usr/local/php5/bin/php-config
[root@localhost memcache-2.2.7]# vim /usr/local/php5/php.ini
'添加'
extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/"
extension = memcache.so			'指向memcache模块'
[root@localhost memcache-2.2.7]# cd /usr/local/httpd/htdocs/
'编辑php测试页面'
[root@localhost htdocs]# vim index.php 
<?php
$memcache = new Memcache();
$memcache->connect('20.0.0.52',11211);
$memcache->set('key','Memcache test Successfull!',0,60);
$result = $memcache->get('key');
unset($memcache);
echo $result;
?>
[root@localhost htdocs]# service httpd restart

2.5:验证配置

  • 出现如下画面则,说明部署成功
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_47219942/article/details/108537888
今日推荐