最近在項目中使用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);來標識一個小時後過期。