如何改变memcached清理缓存默认的缓存时间

如何正确配置CDN高速缓存,避免越用越慢的尴尬 | 张戈博客
博客宗旨 把最实用的经验,分享给最需要的读者,希望每一位来访的朋友都能有所收获!
<span class="tipso_style" id="tip-w" data-tipso=''>
浏览 7753742 次
留言 17420 条
随便挑了些,看你喜欢嘛
关于博客 张戈博客是关注互联网以及分享IT运维工作经验的个人博客,主要涵盖了操作系统运维、实用脚本编程以及博客网站建设等经验教程。我的博客宗旨:把最实用的经验,分享给最需要的读者,希望每一位来访的朋友都能有所收获!我们在使用php的memcached的扩展来对memcached进行数据添加时,数据的有效时间有两种方式。如下图。
至于设置一个UNIX时间戳或 & & &以秒为单位的整数(从当前算起的时间差)来说明此数据的过期时间,但是在后一种设置方式中,不能超过 & & & 2592000秒(30天)的问题我们该怎么办呢?我们不想设置为永久有效,但是也不想再限制在30天内。那么方法来了,这里就以官方文档的代码为示例代码,如下。
&?php$memcache_obj&=&memcache_connect("localhost",&11211);/*&面向过程编程&API&*/memcache_add($memcache_obj,&'var_key',&'test&variable',&false,&0);//&永久有效/*&面向对象编程&API&*/$memcache_obj-&add('var_key',&'test&variable',&false,&time()+24*60*60*30);//&超过30天?&
更对文章请关注
阅读(...) 评论()博客分类:
如果你清楚知道这一点,那就跳过吧!如果你不太清楚原因,那就往下看吧
我们都在用MemCached,缓存有其过期时间,我们经常在配置中设置,如果有业务场景需要动态设置过期时间的时候,就可以通过接口直接设置过期时间
client.set(key, value, new Date(expireTime));
但这个时间如何设置,还是有一点区别,比如设置10分钟后过期,是应该设置date为System.currentTimeInMillis()+10*60*1000
还是10*60*1000
刚经过测试,两种竟然都是可以的,这是咋回事,那就看源码呗,网络上介绍的一些文档有时候需要鉴别,更可靠的还是自己下源码看,别被误导了.
/** Store the key, value, and an expiration time are specified.
The server will automatically delete the value when the expiration time has been reached.
If the value is not a String or numeric type, or if {@link #set_serial(boolean) set_serial(true)}
* the data will be Serialized prior to storage.
If compression is enabled, and the data is longer than the compression threshold,
and compresses by at least the compression savings, the data will be stored in
compressed form.
* @param key key to store data under
* @param value value to store
* @param expiry when to expire the record
* @return true, if the data was successfully stored
public boolean set(String key, Object value, Date expiry) {
return set("set",key,value,expiry,null);
这里过期时间只是简单的说when,没明确说明,在具体实现里面
String cmd = cmdname + " " + key + " " + flags + " " +
expiry.getTime() / 1000 + " " + val.length + "\r\n";
sock.out().writeBytes(cmd);
sock.out().write(val);
sock.out().writeBytes("\r\n");
sock.out().flush();
String tmp = sock.in().readLine();
if (tmp.equals("STORED")) {
if (debug) {
System.out.println("MemCache: " + cmdname + " " + key + " = " + val);
System.out.println("MemCache:" + cmd + tmp);
实现中也是expiry.getTime() / 1000 传入到服务端
在客户端看不出到底怎么回事了,那就看服务端了,(网络上介绍的东西是copy来copy去的,有些都掉东西了,还是自己下代码来看)
#define REALTIME_MAXDELTA 60*60*24*30
* 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) {
/* 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)
return (rel_time_t)1;
return (rel_time_t)(exptime - process_started);
return (rel_time_t)(exptime + current_time);
看了这段c的代码,就明白服务端是两种方式都兼容的,一个是多少秒后过期,一个是什么时候过期,
但后者因为设置时间是在客户端,存储在服务端,假如两台服务器时间差别很大,就会导致数据的过期时间和我要求的时间点不符合。
个人觉得使用前者比较好!
浏览 25671
浏览: 168021 次
来自: 杭州
顶!但是感觉10*60*1000,比较好,可以避免时间差问题。 ...
顶!但是感觉10*60*1000,比较好,可以避免时间差问题。 ...
顶!但是感觉10*60*1000,比较好,可以避免时间差问题。 ...
完全看不出哪里异步新特性了 新开一个线程 servlet3以下 ...
D:\install\tomcat-7.0.29\webapp ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'【图文】memcached缓存教程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
memcached缓存教程
&&memcached是一套分布式的快取系统,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。这是一套开放源代码软件,以BSD license授权协议发布。
大小:725.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢20被浏览11157分享邀请回答21 条评论分享收藏感谢收起12 条评论分享收藏感谢收起

我要回帖

更多关于 memcached 刷新缓存 的文章

 

随机推荐