最近在项目中利用memcache,用的客户端是memcached for java,参考客户端api得出java客户端有效期的配置要领如下:
add ublic boolean add(java.lang.String key, java.lang.Object value, java.util.Date expiry) Adds data to the server; the key, value, and an expiration time are specified. Parameters: key - key to store data under value - value to store expiry - when to expire the record Returns: true, if the data was successfully stored
api中没有具体先容有效期参数,翻译可得expiry – 记录什么时候到期,故在项目中就直接传了一个当前时间+1小时的一个date范例,功效呢?
功效就是导致取不到值,google一把,说是默认有效期为30天,高出后就不往memcache中放了,由此意料大概是这个date参数不是这么用的,翻看了下客户端源码:
expiry.getTime() / 1000L
String cmd = (new StringBuilder()).append(cmdname).append(" ").append(key).append(" ").append(flags).append(" ").append(expiry.getTime() / 1000L).append(" ").append(val.length).append("\r\n").toString();
按照memcache api 有效期有一个数值型时间长度值,意思就是几多毫秒后逾期。
大白了吧,java中应该用new Date(3600000L);来标识一个小时后逾期。