Memcached 简介
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。
Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。
本质上,它是一个简洁的key-value存储系统。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
补充:
MemCache是一个高性能的分布式的内存对象缓存系统,用于各种动态应用以减轻数据库负担。它通过在内存中缓存数据和对象,来减少读取数据库的次数,从而提高动态、数据库驱动应用速度。MemCache会在内存中开辟一块空间,建立一个统一的巨大的hash表,hash表能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
MemCache 和 MemCached:
MemCache是这个项目的名称,而MemCached是服务器端的主程序名称。
MemCached 使用场景
通常,我们会在访问量高的Web网站和应用中使用MemCache,用来缓解数据库的压力,并且提升网站和应用的响应速度。
在应用程序中,我们通常在以下节点来使用MemCached:
- 访问频繁的数据库数据(身份token、首页动态)
- 访问频繁的查询条件和结果
- 作为Session的存储方式(提升Session存取性能)
- 页面缓存
- 更新频繁的非重要数据(访客量、点击次数)
- 大量的hot数据
MemCached工作原理
MemCached采用了C/S架构,在Server端启动后,以守护程序的方式,监听客户端的请求。启动时可以指定监听的IP(服务器的内网ip/外网ip)、端口号(所以做分布式测试时,一台服务器上可以启动多个不同端口号的MemCached进程)、使用的内存大小等关键参数。一旦启动,服务就会一直处于可用状态。 为了提高性能,MemCached缓存的数据全部存储在MemCached管理的内存中,所以重启服务器之后缓存数据会清空,不支持持久化。
MemCached特性与限制
- MemCache中可以保存的item数据量是没有限制的,只要内存足够
- MemCache单进程在32位机中最大使用内存为2G,这个之前的文章提了多次了,64位机则没有限制 Key最大为250个字节,超过该长度无法存储
- 单个item最大数据是1MB,超过1MB的数据不予存储
- MemCache服务端是不安全的,比如已知某个MemCache节点,可以直接telnet过去,并通过flush_all让已经存在的键值对立即失效,所以MemCache服务器最好配置到内网环境,通过防火墙制定可访问客户端
- 不能够遍历MemCache中所有的item,因为这个操作的速度相对缓慢且会阻塞其他的操作
- MemCached的高性能源自于两阶段哈希结构:第一阶段在客户端,通过Hash算法根据Key值算出一个节点;第二阶段在服务端,通过一个内部的Hash算法,查找真正的item并返回给客户端。从实现的角度看,MemCache是一个非阻塞的、基于事件的服务器程序
- MemCache设置添加某一个Key值的时候,传入expiry为0表示这个Key值永久有效,这个Key值也会在30天之后失效,