最近在项目中使用memcache,用的客户端是memcached for java,参考客户端api得出java客户端有效期的设置方法如下:
add
public 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);来标识一个小时后过期。