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可以将内存中的数据缓存到磁盘,可以实现持久化存储

  • 相关阅读:
    es5预览本地文件、es6练习代码演示案例
    Java实现 LeetCode 838 推多米诺(暴力模拟)
    Java实现 LeetCode 838 推多米诺(暴力模拟)
    Java实现 LeetCode 838 推多米诺(暴力模拟)
    Java实现 LeetCode 837 新21点(DP)
    Java实现 LeetCode 837 新21点(DP)
    Java实现 LeetCode 837 新21点(DP)
    Java实现 LeetCode 836 矩形重叠(暴力)
    Subversion under Linux [Reprint]
    Subversion how[Reprint]
  • 原文地址:https://www.cnblogs.com/along1226/p/5064954.html
Copyright © 2011-2022 走看看