1. 程式人生 > >php操作redis和memcache過期時間

php操作redis和memcache過期時間

php-redis 設定過期時間setTimeOut 命令列expire
redis過期時間
redis術語裡面,把設定了expire time的key 叫做:volatile keys。 意思就是不穩定的key。
沒有設定過期時間的也就是永久儲存

set:set('key','value')將值 value 關聯到 key
setTimeOut:setTimeout('x', 3);設定過期時間
setex:setex('key', 3600, 'value')帶生存時間的寫入值

這個命令類似於以下兩個命令:

SET key value
setTimeOut key seconds # 設定生存時間

不同之處是, SETEX 是一個原子性(atomic)操作,關聯值和設定生存時間兩個動作會在同一時間內完成,該命令在 Redis 用作快取時,非常實用。

 

Memcache過期時間
telnet命令格式
<command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n

php命令格式
add ( string $key , mixed $var [, int $flag [, int $expire ]] )
$key :將要儲存的鍵值。
$var :儲存的值,字元型和整型會按原值儲存,其他型別自動序列化以後儲存。
$flag:是否用MEMCACHE_COMPRESSED來壓縮儲存的值,true表示壓縮,false表示不壓縮。
$expire:儲存值的過期時間,如果為0表示永久有效,但也會30後失效,過期時間可以是多少秒後過期,也可以是什麼時候過期

 

memcache是在記憶體中的,所以過了有效期,資料當然是不會再有了。
memcache 的過期資料惰性刪除
當某個值過期後,並沒有從記憶體刪除, 因此,stats 統計時, curr_item 有其資訊。 當某個新值去佔用他的位置時,當成空chunk 來佔用。 當get 值時,判斷是否過期,如果過期,返回空,並且清空,curr_item 就減少了。即這個過期,只是讓使用者看不到這個資料而已,並沒有在過期的瞬間立即從記憶體刪除。這個稱為惰性失效。好處是節省了cpu 時間和檢測的成本。

 

redis 1.有有效期
也是執行在記憶體中的,雖然redis可以做持久化,aof或者快照。
在訪問key的時候判定key是否過期,如果過期,則進行過期處理。其次,每秒對volatile keys 進行抽樣測試,如果有過期鍵,那麼對所有過期key進行處理。
redis過期處理機制見

http://my.oschina.net/u/1466553/blog/332830,寫的很詳細了。
2.永久儲存,但是沒有做持久化時,關閉的時候資料就會丟失或者


memcache與redis LRU刪除機制
原理: 當某個單元被請求時,維護一個計數器,通過計數器來判斷最近誰最少被使用。 
注: 即使某個key 是設定的永久有效期,也一樣會被踢出來! 即–永久資料被踢現象。