月挂夜中央

懒惰程序员

常用链接

统计

最新评论

2011年1月21日 #

网易微博的OAUTH认证开发(java版)

     摘要:     网易微博最近也开放了它的开发平台http://open.t.163.com,其中java版的oauth认证和新浪微博的很类似(貌似都是从twitter那边copy过来的)。但说句实话,网易java版的sdk和新浪微博的比起来,的确上手比较麻烦,里面提供的example都是把access token写死,作为参数,具体的代码如下: public&nb...  阅读全文

posted @ 2011-02-16 21:31 月挂夜中央 阅读(6291) | 评论 (6)编辑 收藏

springside3.*中log4j和java.util.concurrent的结合使用

     摘要:         在springside3.*中的showcase案例中,有一个把log4j的日志存入数据库的演示,下面是我对这个案例的学习笔记。 1、我们首先来看下log4j相关日志的配置: #Async Database Appender (Store business&n...  阅读全文

posted @ 2011-02-13 21:20 月挂夜中央 阅读(2204) | 评论 (0)编辑 收藏

使用XmemcachedClient设置缓存对象过期时间的问题

前几天在做一个涉及到memcache的项目,使用XmemcachedClient来操作memcache,由于是一个季度的数据,保存数据时这样的
 memcachedClient.set(key, expiredTime, value)
其中设置了过期时间为90天
int cacheExpireTime = 60*60*24*90;
结果就杯具了,保存后用get方法取时都是null;后来无意中把过期时间改成小于30天,就完全没有问题,经过谷歌大神的帮忙,终于发现了原因。
服务端的处理
时间处理源代码【memcached.c】如下:
#define REALTIME_MAXDELTA 
60*60*24*30                     // 定义30天的秒数
static rel_time_t realtime(const time_t exptime) {
       
if (exptime == 0return 0;
       
if (exptime > REALTIME_MAXDELTA) {                       // 超过30天,是绝对时间
              if (exptime <= process_started)                         // 小于进程启动日期
                      return (rel_time_t)1;                                  //
              return (rel_time_t)(exptime - process_started);   // 返回进程启动之后的时间差
       }
 else {                                                                   // 不超过30天,是相对时间
              return (rel_time_t)(exptime + current_time);       // exptime + (tvsec - process_started)
       }

}
原来超过30天就自动转换成绝对时间,和进程启动时间比较,显然60*60*24*90小于启动日期的绝对数,所以对象一存入就过期了,肯定取不到数据。
具体的问题请围观这篇文章:http://blog.sina.com.cn/s/blog_539d361e0100nc9h.html

posted @ 2011-01-21 16:18 月挂夜中央 阅读(4903) | 评论 (0)编辑 收藏