原文:http://www.tuicool.com/articles/baaUJ3
過期時間:
redis > SET session:27e7a id1234 OK redis > EXPIRE session:27e7a 1200 (integer) 1
EXPIRE命令返回1表示成功,返回0表示鍵值不存在或設置失敗。
#查看剩余時間
ttl session:27e7a
ttl命令在鍵不存在或被刪除之后,會返回-2,在沒有為鍵設置生存時間(即永久存在,建一個鍵之后的默認情況)時返回的是-1
#取消過期時間
persist session:27e7a
除了使用persist命令外,使用set、getset命令為鍵賦值,也會同時消除鍵的過期時間
訪問限制:
需求:限制一個用戶對一個資源的訪問頻率,我們假定一個用戶(用IP作為判斷)每分鍾對一個資源訪問次數不能超過10次。
方案:設定一個隊列rate.limiting.192.168.1.1(假定是這個IP),把每次的訪問時間都添加到隊列中,當隊列長度達到10以后,判斷當前時間與隊列第一個值的時間差是否小於60,如果小於60則說明60秒內訪問次數超過10次,不允許訪問;否則說明可以訪問,則把隊列頭的值刪除,隊列尾增加當前訪問時間。
缺點:當限制的次數比較大時,這種方法占用的存儲空間也會比較大。
緩存:
有時候會把一些對CPU或IO資源消耗比較大的操作結果緩存起來,並設置一定時間的自動過期。比如我們設定一個微博外鏈的最熱站點緩存放於新浪微博的首頁,這樣我們不可能每次訪問都重新計算最熱的外鏈站點,所以我們可以設定兩小時更新一次。每次訪問是判斷這個鍵有沒有,如果存在則直接返回,如果沒有則通過計算把內容存入鍵中,並設定兩小時的過期時間。
所以我們最好的辦法是設定緩存的淘汰規則。這種方式比較適用於將redis用作緩存系統的時候比較好。
具體就是:修改配置文件中的maxmemory參數,限制redis的最大內存,當超出后會按照maxmemory-policy參數指定的策略刪除不需要的鍵,直到redis占用的內存小於設定值。
規則 |
說明 |
volatile-lru |
使用LRU 算法 刪除一個鍵(只對設置了生存時間的鍵) |
allkeys-lru |
使用LRU算法刪除一個鍵 |
volatile-random |
隨機刪除一個鍵(只對設置了生存時間的鍵) |
allkeys- random |
隨機刪除一個鍵 |
volatile-ttl |
刪除生存時間最近的一個鍵 |
noeviction |
不刪除鍵,只返回錯誤 |
LRU算法即是【最近最少使用】