飞道的博客

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

323人阅读  评论(0)

目录

 

一.memcached的详述

memcached的定义

memcached的工作方式

memcached的特点

memcached的使用场景

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

二.部署memcached

网络拓扑图

环境配置

配置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官网上下载)

  
  1. ##解压数据包
  2. tar xzvf libevent-2.1.8-stable.tar.gz -C /opt
  3. cd /opt/libevent-2.1.8
  4. ##安装环境包
  5. yum install -y gcc gcc-c++ make
  6. ##编译、安装libevent
  7. ./configure --prefix=/usr/ local/libevent
  8. make && make install

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

  • 安装memcahed

  
  1. ##解压软件包
  2. tar xzvf memcached-1.5.6.tar.gz -C /opt
  3. ##手工编译安装
  4. cd /opt/memcached-1.5.6/
  5. ./configure --prefix=/usr/ local/memcached --with-libevent=/usr/ local/libevent
  6. make && make install
  7. ##优化memcached的执行文件
  8. ln -s /usr/ local/memcached/bin/* /usr/ local/bin
  9. ##开启memcached服务
  10. ## -d守护进程;-m指定缓存大小;-p指定端口;-u指定用户
  11. memcached -d -m 32m -p 11211 -u root
  12. ##验证进程是否开启
  13. netstat -natp | grep 11211
  14. [root@memcahced ~] # netstat -natp | grep 11211
  15. tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 45004/memcached
  16. tcp6 0 0 :::11211 :::* LISTEN 45004/memcached
  17. [root@memcahced ~] #
  18. ##关闭防火墙和SElinux功能
  19. systemctl stop firewalld.service
  20. setenforce 0
  21. ##使用telnet连接memcached数据库
  22. ##查看是否存在telnet功能
  23. rpm -q telnet
  24. yum install telnet -y
  25. ##连接数据库
  26. [root@memcahced ~] # telnet 192.168.43.101 11211
  27. Trying 192.168.43.101...
  28. Connected to 192.168.43.101.
  29. 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

  
  1. ##解压memcache软件包
  2. tar xzvf memcache-2.2.7.tgz -C /opt
  3. ##手工编译安装
  4. cd /optmemcache-2.2.7/
  5. ##由于没有执行脚本文件,所以执行下列命令,生成configure
  6. /usr/ local/php5/bin/phpize
  7. ##配置,开启memeche,增加PHP模块
  8. ./configure -- enable-memcache --with-php-config=/usr/ local/php5/bin/php-config
  9. make && make install
  10. vim /usr/ local/php5/php.ini
  11. ##找出一处位置增加
  12. extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/"
  13. ##指向memcache模块
  14. extension = memcache.so
  15. ##编辑php测试页面
  16. vim /usr/ local/httpd/htdocs/index.php
  17. <?php
  18. $memcache = new Memcache();
  19. $memcache->connect( '192.168.43.101',11211);
  20. $memcache-> set( 'key', 'Memcache test Successful',0,60);
  21. $result = $memcache->get( 'key');
  22. unset( $memcache);
  23. echo $result;
  24. ?>
  25. ~
  26. ##重启httpd服务
  27. service httpd stop
  28. service httpd start

验证配置

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

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

 

 


转载:https://blog.csdn.net/qq_42761527/article/details/104309886
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场