zoukankan      html  css  js  c++  java
  • Memcached十问十答

    1、Memcached是什么,有什么作用?

      Memcached是一种纯内存的,key-value,CS架构的数据库服务软件,主要用于数据库,web服务器的缓存,以减小数据库,web服务器的访问压力,尤其是对数据库,可以将经常被访问的数据缓存到memcache中,这是通过前端的 程序试实现的。对于常用的数据在写入的时候,不仅要往数据库中写入,还要往memcached内存中写入。

    2、Memcached服务在企业集群架构中应用场景

      完整缓存

      热点缓存

      会话保持

    3、Memcached服务在不同企业业务应用场景中的工作流程

      当程序对数据库中的数据更新的时候,会先处理数据库中的数据,然后再通知memcached中的数据对缓存的旧数据做更新(可以通过程序实现,也可以同属mysql的memca插件实现触发更新),总之,保持数据的一致性很重要。当memcad的缓存空降用完之后会根据LRU(less recently use)算法删除数据,当然在启动memcached的时候可以指定参数不适用LRU算法删除数据,而是报错。对于高并发的场景,或者服务重启的时候要做预热,将数据通过程序加载到缓存中。

    4、Memcached服务分布式集群如何实现?

      1.通过程序实现,让不同的用户去请求相应的memcached服务器,当然要事先做好标记工作,哪一个用户的数据缓存在哪一个服务器上,这种方法比较笨,不智能。

      2.使用负载均衡器(nginx,tengien,haproxy)调度用户的请求分配给不同的memcached服务器

        问题:不同的服务器缓存的内容是不一样的,那么如何保证命中率呢?

        答:负载均衡器有多种调度算法可以使用ip_hash算法可以保证会话的一致性,该算法是通过取模运算实现的,hash值1/服务器数=hash值2,该算法会维护一个hash表当请求来的时候会查找该hash表,找到该请求和memcached服务器的对应关系,实现回话的一致性,保证缓存的命中率。但是该算法有一个缺陷,当memcached主机的数目发生变化的时候会使得之前的hash数据不准确,还要重新计算hash值。所以这个还不是最优的方式

      3.最优的方式是采用一致性hash调度算法,tengien,haproxy,nginx(编译的时候要加上一致性hash的模块)

        ./configure --add-module=./3thparty/ngx_http_consistent_hash-master

    5、Memcached服务特点及工作原理是什么?

      CS架构模式

      协议简单

      支持epoll/kqueue 异步IO模型,使用libevent作为事件通知机制

      键值对数据类型

      纯内存,效率高

      支持分布式

    6、简述Memcached内存管理机制原理?

      最早使用malloc内存分配机制,但是malloc机制会造成内存碎片,现在采用的是slab内存管理机制

      memcached将内存区分成若干个slab区(大小为1M)

      slab区分为若干的chunk内存块(不同的slab中的chunks的大小是不一样的)

      memcached维护了一内存分配的信息表,当需要写入数据的时候,会将数据写入所拥有的chunk的大小和数据大小最相符的slab分区中区,这样可以减少内存的浪费

     提示:和磁盘的inode,block比较类似

    7、Memcached的删除原理与删除机制?

      memcached是惰性检测机制,不会主动检测数据是否过期,只有当get该数据的时候才会检测该数据是否过期,并且当该数据过期的时候memcached只会删除该数据的索引,并不会释放内存空间,只有当memcached调用LRU算法的嘶时候,或者当空间已满的时候才会释放内存空间

    8、Memcached服务端与客户端的安装部署与使用测试

    9、如何实现集群中的session共享存储?

    10、如何获取MEMCACHED服务的状态信息,例如:命中率

      可以通过telnet方式登录到memcached中,使用stats命令查看memcached的信息

      通过memadmin

      nagios,cati,zabbix监控工具
    11、通过Nagios监控Memcached需要监控哪些指标

      命中率

    12、redis是什么,有什么作用?

    13、memcached与redis的区别?

      memcached是纯内存的软件,不支持持久化缓存,服务器重启之后缓存数据就会消失

      redis可以将内存中的数据缓存到磁盘,可以实现持久化存储

  • 相关阅读:
    hdu1087Super Jumping! Jumping! Jumping!
    hdu1159Common Subsequence(最长公共子序列)
    hdu1069Monkey and Banana(最长递增子序列)
    poj2533(最长递增子序列)
    hdu1029Ignatius and the Princess IV
    uva10622(唯一分解定理)
    myeclipse设置技巧
    myeclipse2014新感悟
    小错误汇总
    字符串反转
  • 原文地址:https://www.cnblogs.com/along1226/p/5064954.html
Copyright © 2011-2022 走看看