Memcached

  许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加剧、数据库响应恶化、网站显示延迟等重大影响。git

  Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它经过在内存中缓存数据和对象来减小读取数据库的次数,从而提升动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,可是客户端能够用任何语言来编写,并经过memcached协议与守护进程通讯。github

  memcached缺少认证以及安全管制,这表明应该将memcached服务器放置在防火墙后。
 
  memcached的API使用32位元的 循环冗余校验(CRC-32)计算键值后,将资料分散在不一样的机器上。当表格满了之后,接下来新增的资料会以LRU机制替换掉。因为memcached一般只是看成快取系统使用,因此使用memcached的应用程式在写回较慢的系统时(像是后端的数据库)须要额外的程式码更新memcached内的资料。
 
  为了提升性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。因为数据仅存在于内存中,所以重启memcached、重启操做系统会致使所有数据消失。另外,内容容量达到指定值以后,就基于LRU(Least Recently Used)算法自动删除不使用的 缓存。memcached自己是为缓存而设计的服务器,所以并无过多考虑数据的永久性问题。

(百度百科)算法

 

incr/decr是memcached 1.2.4加入的原子性整数操做(changelog:2006-10-03)。这个功能经常使用于分布式项目中的计数。数据库

1. incr/decr在memcached中的保存方式是:字符串(十进制)表示的无符号64bit整数。后端

Increment and Decrement. If an item stored is the string representation of a 64bit integer, you may run incr or decr commands to modify that number. You may only incr by positive values, or decr by positive values. They does not accept negative values.浏览器

2. incr/decr操做没法刷新过时时间。缓存

   memcached的协议能够看这里。incr/decr操做没法刷新过时时间,因此过时时间以初始化的时间为准。安全

    最开始觉得spy的memcacheClient的incr(String key, int by, long def, int exp)能够刷新过时时间,后来才发现,此方法是封装了incr/decr和add的组合操做。这个exp指的是,若incr失败,则将def值add到此key,并使用这个过时时间exp,若是成功,过时时间不变!服务器

   所以,若是使用memcached做为长期的计数器,必须用额外的机制定时刷新item。memcached协议提供了touch方法,只刷新时间,不对值做修改,最新的spymemcached 客户端中提供了这个功能。分布式

3. 若是对应值不存在,incr/decr会失败,而不会从0开始计数。

   telnet下输入:

1
2
incr b 1
NOT_FOUND

   返回NOT_FOUND,没有incr成功。memcachedClient.incr(key,delta)调用以后,若key不存在,则返回-1。

相关文章
相关标签/搜索