memcache是一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。这是一套开放源代码软件,以BSD license授权发布。
memcache 是一套分布式的高速缓存系统,由 LiveJournal 的 Brad Fitzpatrick 开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。这是一套开放源代码软件,以 BSD license 授权发布。
解析
MemCache 的工作流程如下:先检查客户端的请求数据是否在 memcached 中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在 memcached 中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到 memcached 中(memcached 客户端不负责,需要程序明确实现);每次更新数据库的同时更新 memcached 中的数据,保证一致性;当分配给 memcached 内存空间用完之后,会使用 LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。
Memcache 是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的 hash 表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
Memcache 是 danga 的一个项目,最早是 LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。
Memcached 是以守护程序(监听)方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。
特性和限制
在 Memcached 中可以保存的 item 数据量是没有限制的,只要内存足够 。 Memcached 单进程在 32 位系统中最大使用内存为 2G,若在 64 位系统则没有限制,这是由于 32 位系统限制单进程最多可使用 2G 内存,要使用更多内存,可以分多个端口开启多个 Memcached 进程 , 最大 30 天的数据过期时间,设置为永久的也会在这个时间过期,常量 REALTIME_MAXDELTA 60*60*24*30 控制 最大键长为 250 字节,大于该长度无法存储,常量 KEY_MAX_LENGTH 250 控制 单个 item 最大数据是 1MB,超过 1MB 数据不予存储,常量 POWER_BLOCK 1048576 进行控制, 它是默认的 slab 大小 最大同时连接数是 200,通过 conn_init()中的 freetotal 进行控制,最大软连接数是 1024,通过 settings.maxconns=1024 进行控制 跟空间占用相关的参数:settings.factor=1.25, settings.chunk_size=48, 影响 slab 的数据占用和步进方式
memcached 是一种无阻塞的 socket 通信方式服务,基于 libevent 库,由于无阻塞通信,对内存读写速度非常之快。 memcached 分服务器端和客户端,可以配置多个服务器端和客户端,应用于分布式的服务非常广泛。 memcached 作为小规模的数据分布式平台是十分有效果的。
memcached 是键值一一对应,key 默认最大不能超过 128 个字 节,value 默认大小是 1M,也就是一个 slabs,如果要存 2M 的值(连续的),不能用两个 slabs,因为两个 slabs 不是连续的,无法在内存中 存储,故需要修改 slabs 的大小,多个 key 和 value 进行存储时,即使这个 slabs 没有利用完,那么也不会存放别的数据。
memcached 已经可以支持 C/C++、Perl、PHP、Python、Ruby、Java、C#、Postgres、Chicken Scheme、Lua、MySQL 和 Protocol 等语言客户端。
接口介绍
Memcache 客户端包含两组接口,一组是面向过程的接口,一组是面向对象的接口,具体可以参考 PHP 手册
MemCache“LXXV. Memcache Functions” 这章。
Memcache 面向对象的常用接口包括:
Memcache::connect — 打开一个到 Memcache 的连接
Memcache::pconnect — 打开一个到 Memcache 的长连接
Memcache::close — 关闭一个 Memcache 的连接
Memcache::set — 保存数据到 Memcache 服务器上
Memcache::get –提取一个保存在 Memcache 服务器上的数据
Memcache::replace –替换一个已经存在 Memcache 服务器上的项目(功能类似 Memcache::set)
Memcache::delete — 从 Memcache 服务器上删除一个保存的项目
Memcache::flush — 刷新所有 Memcache 服务器上保存的项目(类似于删除所有的保存的项目)
Memcache::getStats — 获取当前 Memcache 服务器运行的状态