开发者社区> 问答> 正文

memcached 默认最大缓存时间问题

server版本:memcached-1.4.5
驱动:Memcached-Java-Client
如平常使用
client.set(key, value, expire)
,如果expire设置为0则为永不过期,但是如果不设时间
client.set(key, value)
是否默认是永不过期呢,还是说有默认的过期时间呢。
我查看了server里源码里的memcached.c,然后网上也查到大概在123~148直接定义了最大的过期时间
screenshot
如示,最大时间是30天,网上查了下有人验证过好像不设过期时间,即set(key, value)的过期时间是30天,而不是永不过期,为此,我更改了源码,更改时间为60秒然后重新用源码编译安装
define REALTIME_MAXDELTA 60
然后用驱动(客户端)写了个程序验证,看看是否默认是60s,结果好像不对劲啊,过了许久还是可以拿到value,所以就疑惑了,也不知道更改测试的对不对,改全了没,特来此问各位大大,解惑,万分感谢,因为目前项目中就是没设过期时间,然后经常会取不到key(key的value)为空,不知道是什么问题。

展开
收起
蛮大人123 2016-02-22 16:20:01 3253 0
2 条回答
写回答
取消 提交回答
  • 大道至简
    最大30天
    2019-07-17 18:46:49
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    Memcached-Java-Client的源码中set(key, value)expire默认给的new Date(0),发送给服务器的 expiry.getTime() / 1000,即永不失效。
    REALTIME_MAXDELTA是在用来处理超过30天的exptime的。
    值失效的情况还有,设置的内存大小 小于 存入的内容大小,实际内存要小于存入的内容,服务器重启等。

    2019-07-17 18:46:48
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
基于英特尔 SSD 的虚拟机缓存解决SSD 立即下载
用户态高速块缓存方案 立即下载
高性能Web架构之缓存体系 立即下载