Memcached简介

Memcached是什么?

Memcached是一套高性能的、分布式存储对象缓存系统。

许多 Web 应用将数据保存到关系型数据库( RDBMS,如 MySQL )中,服务器从中读取数据并显示在浏览器中。 随着数据量的增大、访问的集中,就会出现 RDBMS 负担加重、数据库响应恶化、 网站显示延迟等不良问题。这样就出现了 Memcached,设计用于加速动态应用程序(比如 Web),减轻数据库负载。
而memcached是一种缓存技术,存储在内存中(高性能分布式内存缓存服务器)。目的就是“提速”。(传统的都是把数据保存在关系型数据库管理系统即RDBMS,客户端请求时会从RDBMS中读取数据并在浏览器中显示,这样当访问量过大时或集中时,导致RDBMS负担过重,数据库响应恶化,浏览器中显示延迟等严重问题,使用memcached减少数据库查询和访问次数以提高访问速度,提高扩展性)

Memcached具体能做什么?

做缓存系统,具体可以缓存哪些数据呢?Memcached 可以存储各种格式的数据,包括图像、视频、文件等。要知道各种数据在存储设备(如磁盘)上都长一样,都是 0 和 1 组成的二进制数序列。

memcached适合做的场景:

访问频繁的字典数据
大量的hot数据(热门数据缓存)
页面缓存(web站常用)
搜索的查询条件和结果(热门搜索的内容缓存起来)
临时处理数据(不需要入库,排重)

不适用的场景:

缓存对象的大小大于 1 MB, Memcached 本身就不是为了处理庞大的多媒体和巨大的二进制块而设计的,如果你任性,要存这么大的数据,可以自己修改源代码,它是开源的,不过请慎改;
key 的长度大于 250 字符(硬性要求);
环境不允许运行 memcached 服务;
应用运行在不安全的环境中,Memcached 未提供任何安全策略,仅仅通过 telnet 就可以访问到 memcached。数据安全越来越重要了,so,请把它放在防火墙后;
业务需要的是持久化数据时请使用数据库。
Memcached简介

memcache工作原理:

memcache 的工作就是在专门的机器的内存里维护一张巨大的 hash 表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率。采用的是C/S模式,在 server 端启动服务进程,在启动时可以指定监听的 ip,自己的端口号,所使用的内存大小等几个关键参数。采用了单进程,单线程,异步I/O,基于事件 (event_based) 的服务方式.使用 libevent 作为事件通知实现。每个 Server 只是对自己的数据进行管理。Client 端通过指定 Server 端的 ip 地址(通过域名应该也可以)。以key->value形式,key 的值通过 hash 进行转换,然后确定对那台sever存储/获取数据。
Memcached简介

memcached分布式算法:

当向memcached集群存入/取出key/value时,memcached客户端会根据一定算法计算存入那台服务器。(第一步:选择服务器,第二步:存取数据)
**余数算法:**先求得键的整数散列值,再除以服务器数量,根据余数觉得存储那台服务器。(特点:简单、高效。但是扩展性差,服务器数量变更时,几乎所有的缓存都会失效)
**散列算法:**先计算memcached的散列值,并将其分布在0—232的圆上,然后用同样的方法算出存储数据键的散列值并映射至圆上,最后从数据映射到的位置开始顺顺时针查找,将数据保存在查找到的第一台服务器,如果超过232还是找不到,则将数据保存在第一台memcached服务器上。如果添加一台memcached服务器,则只在圆上添加的逆时针方向的第一台服务器上的键会受到影响。