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

Memcached十问十答的更多相关文章

  1. 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore

    1. 介绍 EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 Git ...

  2. Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

    一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...

  3. ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存

    ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年 正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完 ...

  4. 缓存、队列(Memcached、redis、RabbitMQ)

    本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 redis 简介.安装.使用.实例 Python 操作 Redis String.Hash.Li ...

  5. 企业做数据缓存是使用Memcached还是选Redis?

    企业是使用Memcached还是选Redis? 在构建一款现代且由数据库驱动的Web应用程序并希望使其拥有更为出色的性能表现时,这个问题总会时不时出现.并给每一位开发人员带来困扰.在考虑对应用程序的性 ...

  6. NoSql1 在Linux(CentOS)上安装memcached及使用

    前言:       今天是初五,生活基本要从过年的节奏中回归到正常的生活了,所以想想也该想想与工作有关的事情了.我之前在工作中会经常使用memcached和redis,但是自己一直没有时间系统的好好看 ...

  7. Memcached简介

    在Web服务开发中,服务端缓存是服务实现中所常常采用的一种提高服务性能的方法.其通过记录某部分计算结果来尝试避免再次执行得到该结果所需要的复杂计算,从而提高了服务的运行效率. 除了能够提高服务的运行效 ...

  8. Linux 服务器 安装 memcached

    linux centos 一.memcached的安装 1.下载 memcached-1.4.33.tar.gz.libevent-2.0.22-stable.tar.gz 安装 memcached ...

  9. Memcached和Redis比较

    一.存储 Memcached基本只支持简单的key-value存储方式.Redis除key-value之外,还支持list,set,sorted set,hash等数据结构:Redis支持数据的备份, ...

随机推荐

  1. GIS制图人员的自我修养(1)--制图误区

    GIS制图人员的自我修养 by 李远祥 最近一直坚持写GIS制图的技术专题,并不是为了要介绍有什么好的技术和方法去制图,而是要告诉所有从事这一方向的人员一个铁铮铮的实现--要做好GIS制图,必须加强自 ...

  2. JAVA--可变长参数

    可变长参数: 可变长参数可以接受任意个数的实参,形参实际上是一个数组. 语法形式: 方法名称(类型 参数1,类型 参数2,类型...可变长参数) *可变长参数一定是方法的最后一个参数 public v ...

  3. Odoo安装

    打开终端机0. sudo passwd root #设定超级使用者密码1. sudo apt-get update #更新软件源2. sudo apt-get dist-upgrade #更新软件包, ...

  4. bootstrap 字体图标

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. UE4 RHI与Render模块简解

    UE4中的RHI指的是Render hardware interface,作用像Ogre里的RenderSystem,针对Dx11,Dx12,Opengl等等平台抽象出相同的接口,我们能方便能使用相同 ...

  6. ReactJS的开发日常

    在用React框架开发的日子里,踩的坑真不少!今天就来说说这个关于组件的周期,说的可能不是很清楚,但是也给自己留下一个踩坑的纪念,如有不妥 还望大家指点一二 Warning: setState(... ...

  7. NSIndexSet 浅析

    Cocoa 中提供了两个用于维护区间集合的类型:NSIndexSet和NSMutableIndexSet . 这两个类型容易其名字一样,其区别就在于是否可以修改.这个区别和NSArray的一样,NSI ...

  8. MJRefresh在UITableView中的使用

    前言 MJRefresh是一个好用的上下拉刷新的控件,github地址如下:https://github.com/CoderMJLee/MJRefresh 很多app都使用这个控件,我们也来了解一下它 ...

  9. angular 1.26 版本 window.history.back() 自动去顶部

    在1.26版本,在url ("www.example.com#xx"),接着按back,会自动调到顶部,这是因为angular的默认设置 只要在config注入$AnchorScr ...

  10. 通过HttpClient 调用ASP.NET Web API

    在前面两篇文章中我们介绍了ASP.NET Web API的基本知识和原理,并且通过简单的实例了解了它的基本(CRUD)操作.我们是通过JQuery和Ajax对Web API进行数据操作.这一篇我们来介 ...