文章目录
前言:
- memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。
- memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。
- memcached的API使用三十二比特的循环冗余校验(CRC-32)计算键值后,将数据分散在不同的机器上。当表格满了以后,接下来新增的数据会以LRU机制替换掉。由于memcached通常只是当作缓存系统使用,所以使用memcached的应用程序在写回较慢的系统时(像是后端的数据库)需要额外的代码更新memcached内的数据。
- memcached官网:http://memcached.org/
一、Memcached简介
1.1 Memcached 原理
- memcached是一种缓存技术,在存储在内存中(高性能分布式内存缓存服务器).
- 目的 : 提速
- 传统的都是把数据保存在关系型数据库管理系统既RDBMS,客户端请求时会从RDBS中 读取数据并在浏览器中显示,这样当访问量过大时或集中时,导致RSBMS负担过重,数据库响应恶化,浏览器中显示延迟等严重问题,使用memcached减少数据库查询和访问次数以 提供访问速度,提供扩展性)
- memcached为key->value非关系型数据库,key为一般子串,值唯一.value除了php中的资源不能存,其它的数据都能存储(字符串,数值,数组,对象,布尔值 ,null,二进制<图片,视频>)
1.2 Memcached特点
- memcached本质上是一个内存key-value缓存,它通过减轻数据库负载加速动态web应用。
- memcached不支持数据的持久化,服务器关闭之后数据全部丢失。
- memcached协议简单,使用的是基于文本行的协议。
- memcached是多线程工作,redis是单线程工作,各个memcached服务器之间互不通信,各自独立存取数据,不共享任何信息
- memcached服务器不具有分布式功能,分布式部署取决于memcache客户端
- memcached用lazy expiration(懒淘汰)实现key过期
- memcached通过提前分配内存保证运行性能,很少出现内存碎片
- memcached使用非阻塞IO服用网络模型,目的是提高数据吞吐量
- memecached使用listen/work的多线程模型,优点是能够充分利用多核,但是会带来一些锁冲突
- memecached不支持持久化:
- 业务决定技术方案,memcached以“以服务的方式,而不是库的方式管理KV内存”,为设计目标,它与其他缓存数据库不一样的是KV内存管理组件库,持久化和复杂数据结构并不是它的初衷
1.3 memecached作用及应用场景
1.3.1 memecached作用
- 高性能分布式缓存服务器(缓存数据库查询结果,减少数据库访问次数) 缓存读取/写入过程 : 首次访问 : 从RDBMS中取得数据保存到memcached;第二次后 : 从memcached中取得数据显示页面
1.3.2 应用场景
- 数据查询缓存:将数据库的数据加载到memcached,提供程序的访问速度
- 计数器的场景:通过incr/decr命令实现评论数量、点击数统计、操作次数等场景
- 乐观锁实现:例如计划任务多实例部署的场景,通过CAS实现不重复执行
- 防重复处理命令:CAS命令
- 集群和分布式的区别:
- 集群:可以在单机或者多台机子上部署多个相同配置的服务;
- 分布式:在多台机子上部署多个不同服务
- 适用场景示例:
- ① 访问频繁的字典数据
- ② 大量的hot数据(热门数据缓存)
- ③ 页面缓存(web站常用)
- ④ 搜索的查询条件和结果(热门搜索的内存缓存起来)
- ⑤ 临时处理数据(不需要入库,排重)
二、 memecached工作原理
2.1 memecached工作原理