Memcache缓存设置时间

Memcache缓存设置的缓存时间最久是多少呢?有说30天的,有说永久的。

查一下手冊
image

通俗的话来讲就是说,如果设置为0,则永不过期,但是它可能会因为为了给其他项分配空间而被删除;如果用秒来设置过期时间,则最久设置的时间是30天,即使你设置了25920001秒,它只是给你保留259200秒;如果用时间戳设置的话,那就随意了,没有限制。

Memcache源代码中计算过期时间,realtime 函数

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 */


    
//如果想保存30天以上则需要传递绝对时间戳,如果不传递绝对

时间戳而是30天的秒数则会导致马上过期

    
//如果不保存30天以上则直接传递过期秒数即可


    
/** #define REALTIME_MAXDELTA 60*60*24*30 */

    
if
 
(
exptime 
>
 REALTIME_MAXDELTA
)
 
{

        
//如果小于服务器启动时间戳则马上过期

        
if
 
(
exptime 
<=
 process_started
)
 

            
return
 
(
rel_time_t
)
1
;


        
//客户端传递的绝对时间戳减去服务器的启动时间戳计算出过期时间

        
return
 
(
rel_time_t
)(
exptime 
-
 process_started
);

    
}
 
else
 
{

        
//客户端传递的过期秒数加上服务器的相对时间秒数计算出过期时间

        
return
 
(
rel_time_t
)(
exptime 
+
 current_time
);

    
}


    
//举个例子:

    
// process_started : 服务器启动时间戳 1477929600

    
// current_time :服务器相对时间,就是相对于启动到现在共过了多少秒,每秒+1.


    
//(1) 保存30天以下的过期时间计算:

    
//current_time = 10000  服务器当前相对时间

    
//exptime = 3600        客户端要求3600秒之后过期   
//过期时间 = current_time + exptime = 13600     
//(2) 保存30天以上的过期时间计算:   
//current_time = 10000  服务器当前相对时间   
//process_started = 1477929600 服务器启动时间  
//当前服务器的绝对时间 = process_started + current_time  
//启动时间 + 相对时间   
//当前客户端的绝对时间 === 当前服务器的绝对时间    
//exptime = time() + 2678400 = 1480618000
//客户端按当前的绝对时间向后加上30天   
//过期时间 = exptime - process_started = 2688400   
//= (process_started + current_time + 2678400) - process_started   
//= current_time + 2678400       
//可以看出来实际上还是相对于 current_time 加上了 2678400 秒,
//所以就是通过绝对时间计算出相对时间   
//但是这种情况要保证客户端的时间和服务器的时间一致,不然的话会导致计算错误情况。    
//一般采用相对时间比较准,因为永远都是相对于服务器当前时间往后加sec
}

发布了9 篇原创文章 · 获赞 3 · 访问量 1317

猜你喜欢

转载自blog.csdn.net/qq_34051908/article/details/91441337