memcached 的失效时间策略和注意点

标签: memcached 时间 策略 | 发表时间:2016-10-26 21:15 | 作者:windows9834
出处:http://windows9834.blog.163.com

memcached是作为一个cache服务器而设计的。内存失效判断规则是:服务器当前时间>=对象最后更新时间+失效时间。
memcache的有效时间计算有两种方式:

1)相对时间:多长时间,给出过期的时间长度,如60秒;
2)绝对时间:到期时间,给出过期的最后期限,如2016-10-10 00:00:00,当然代码中是new Date()这种方式;

对应的方法是:

   

memcache.set(key,value,new Date(50)) 设置为服务器端当前时间后50秒过期

memcache.set(key,value,new Date(System.currentTimeMillis()+5000)) 设置为客户端当前时间后50秒过期



   

摘抄部分代码->memcached.c

    
     

#define REALTIME_MAXDELTA 60*60*24*30 //定义有效期最大30天,单位秒

time_t process_started; /* when the process was started */


/*
* given time value that's either unix time or delta from current unix time, return
* unix time. Use the fact that delta can't exceed one month (and real time value can't
* be that low).
*/
static rel_time_t realtime(const time_t exptime) {
/* no. of seconds in 30 days - largest possible delta exptime */

if (exptime == 0) return 0; /* 0 means never expire */

if (exptime > REALTIME_MAXDELTA) {//如果大于30天
/* if item expiration is at/before the server started, give it an
expiration time of 1 second after the server started.
(because 0 means don't expire). without this, we'd
underflow and wrap around to some large value way in the
future, effectively making items expiring in the past
really expiring never */
if (exptime <= process_started) //如果早于memcached进程启动时间,1秒也就直接过期了
return (rel_time_t)1;
return (rel_time_t)(exptime - process_started);
} else {//当前时间+设置有效时间长度
return (rel_time_t)(exptime + current_time);
}
}

相对时间时,返回的值是:服务器当前时间之后的exptime - process_started秒

绝对时间时,返回的值是:服务器当前时间之后的(exptime -服务器当前时间) - process_started秒
 
可以看到,如果Client和Server时间不一致,使用绝对时间很容易导致缓存过期。
所以使用相对时间是比较安全的做法。


相关 [memcached 时间 策略] 推荐:

memcached 的失效时间策略和注意点

- - 寒江
memcached是作为一个cache服务器而设计的. 内存失效判断规则是:服务器当前时间>=对象最后更新时间+失效时间. memcache的有效时间计算有两种方式:. 1)相对时间:多长时间,给出过期的时间长度,如60秒;. 2)绝对时间:到期时间,给出过期的最后期限,如2016-10-10 00:00:00,当然代码中是new Date()这种方式;.

memcached+magent实现memcached集群

- - 编程语言 - ITeye博客
首先说明下memcached存在如下问题.   本身没有内置分布式功能,无法实现使用多台Memcache服务器来存储不同的数据,最大程度的使用相同的资源;无法同步数据,容易造成单点故障. (memagent代理实现集群).       在 Memcached中可以保存的item数据量是没有限制的,只要内存足够.

MemCached详解

- - CSDN博客推荐文章
首先,我们来了解一下MemCached与MemCache之间的区别:. Memcache是一个自由和开放源代码、高性能、分配的内存对象缓存系统. 用于加速动态web应用程序,减轻数据库负载. 它可以应对任意多个连接,使用非阻塞的网络IO. 由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这 些HashTable.

Memcached调优

- - 四火的唠叨
文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》. 项目中有一个对实时响应性比较高的服务,引入了Memcached以减少延迟和减少数据库压力. 但是期间遇到了一些问题,这里记录一些调优细节. 最开始我使用的是 Memcached Java Client,但是最后放弃了,放弃原因包括:.

memcached协议

- - 开源软件 - ITeye博客
旧版: http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt. 新版: https://github.com/memcached/memcached/blob/master/doc/protocol.txt.

Java使用memcached

- - 互联网 - ITeye博客
首先到 http://danga.com/memcached下载memcached的windows版本和java客户端jar包,目前最新版本是memcached-1.2.1-win32.zip和java_memcached-release_1.6.zip,分别解压后即可. 然后是安装运行memcached服务器,我们将memcached-1.2.1-win32.zip解压后,进入其目录,然后运行如下命令:c:>;memcached.exe -d install
c:>memcached.exe -l 127.0.0.1 -m 32 -d start.

Spring+memcached整合

- - 行业应用 - ITeye博客
1)  下载memcached服务端memcached-1.2.6-win32-bin.zip,地址:http:. 2)  下载java版客户端 java_memcached-release_2.6.1.zip. 3)  解压缩memcached-1.2.6-win32-bin.zip到指定目录,例如:D:\memcached-1.2.6-win32 ,.

转 redis vs memcached

- - 数据库 - ITeye博客
传统MySQL+ Memcached架构遇到的问题.   实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:.   1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间.

Memcached安全性

- - xiaobaoqiu Blog
1.Memcached -l参数. 1.Memcached -l参数. 最近整理了组内使用的Memcached. 发现很多问题,其中一个问题就是开发机器测试机器可以直连线上的Memcached. 这也是memcached公认的问题:memcached 是一种很简单、有效的协议,但也有其缺点,就是 memcached 自身没有 ACL 控制(或者相当弱).

时间利用4个有效策略

- - 七零后CFO
前几天,在介绍《 利用"四象限"原则管理好时间》时,朋友留言说:如何区分重要和紧急,非常困难,其实之前贵祥在《 教你10招挤时间》和《 8步实现有效时间管理》两篇博文中,已经作了些说明,想进一步管理好自己生活的朋友们可以前往阅读了解. 曾在阮一峰的博客中看到的:" 人生只有900个月. "的确是让人震惊的事,生命是有限的,我们每个人都没有多少时间可以使用.