memcached自身有幾個(gè)比較重要的限制,尤其是其中的過(guò)期時(shí)間限制,得小心,否則很容易踩到地雷:
1)單個(gè)緩存值大小限制:
memcached單個(gè)緩存值限制為1M(1000000bytes),超過(guò)這個(gè)限制的時(shí)候會(huì)出如下錯(cuò)誤:
ValueError: Values may not be more than 1000000 bytes in length; received 2000000 bytes
2)key長(zhǎng)度限制:
memcache的keys限制為250 bytes,超過(guò)這個(gè)長(zhǎng)度會(huì)報(bào)錯(cuò):
ValueError: Keys may not be more than 250 bytes in length, received 14670 bytes
3)expire過(guò)期時(shí)間限制:
過(guò)期時(shí)間設(shè)置有兩種方式:
1、可使用 unix 時(shí)間戳格式,即距離1970.01.01 00:00:00的時(shí)間偏移量(單位為秒)
2、距離當(dāng)前時(shí)間的時(shí)間間隔 (單位也為秒)
設(shè)為 距離當(dāng)前時(shí)間的時(shí)間間隔 時(shí)不能大于 2592000(30天),如果時(shí)間值大于2592000 ,那么memcached會(huì)把時(shí)間理解為unix時(shí)間戳格式也就是距離1970.01.01的秒數(shù)偏移量。0 為永不過(guò)期。
這個(gè)問(wèn)題要特別注意,當(dāng)我們?cè)O(shè)置的時(shí)間間隔大于 2592000 ,例如2592010,寫進(jìn)去的數(shù)據(jù)會(huì)被認(rèn)為是unix時(shí)間戳格式,數(shù)據(jù)剛寫進(jìn)去已經(jīng)過(guò)期,相當(dāng)于導(dǎo)致數(shù)據(jù)寫不進(jìn)去,而更糟糕的是對(duì)于這種情況memcached服務(wù)端和客戶端驅(qū)動(dòng)都不會(huì)拋出exception或者打印任何警告信息,因?yàn)閷?duì)memcached來(lái)說(shuō)這樣的時(shí)間值也是合理的。
P.S. 該expire的限制某似是從memcached 1.2.6以后才有體現(xiàn),之前的版本如1.2.1中沒(méi)有觀察到這種現(xiàn)象。