MemCache

memcache是一套分布式的高速缓存系统。目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著,是一套开放源代码软件。

工作流程

MemCache的工作流程如下:先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请 求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端 不负责,需要程序明确实现);每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用 LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图 像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。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服务器运行的状态

应用

使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,让Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能够迅速的进行存取。那么一般的焦点就是集中在如何分担数据库压力和进行分布式,毕竟单台Memcache的内存容量的有限的。

最新文章

  1. Javascript之旅——第五站:说说那些所谓的包装类型
  2. Android中Intent组件详解
  3. HDU 2665 && POJ 2104(主席树)
  4. Redhat修改主机名及网络配置
  5. Console.WriteLine()与MessageBox.Show()的区别
  6. 高效使用Bitmaps(三) 神奇的Cache
  7. JQ实现3D拖拽效果
  8. 转:trie树--详解
  9. QT自绘标题和边框
  10. 第七十六节,css颜色和透明度,盒子阴影和轮廓,光标样式
  11. iOS开发 missing iOS distribution signing identity for 。。。
  12. org.apache.jasper.JasperException: - Page directive must not have multiple occurrences of pageencoding
  13. poj 3067 Japan 【树状数组】
  14. Ubuntu 16.10 server 相关
  15. 2.11 alert\confirm\prompt
  16. exec函数
  17. SQL Server 2008 表分区的含义
  18. php的变量引用与销毁机制
  19. Java线程池关闭1-shutdown和isTerminated<转>
  20. 关于 error C2001: 常量中有换行符

热门文章

  1. UWP中实现大爆炸效果(二)
  2. 神奇的Scala Macro之旅(二)- 一个实例
  3. java游戏开发杂谈 - 界面刷新、坐标系
  4. 神经网络——反向传播BP算法公式推导
  5. 【Python3爬虫】用Python中的队列来写爬虫
  6. Electron学习笔记(一)
  7. Firemonkey 原生二维码扫描优化
  8. 来聊一聊不low的Linux命令——find、grep、awk、sed
  9. 第11章 创建请求URLs - IdentityModel 中文文档(v1.0.0)
  10. 驰骋工作流引擎 -Webservice接口说明文档