線上redis有一些歷史遺留的未設定過期時間的key,導致redis空間占用較多,dba告警後要我們自己清除,於是我寫了乙個指令碼在不影響線上服務的情況下清除(使用keys命令會導致請求hang住)
import sys
import redis
import os
pool = redis.connectionpool(host = "host_name",password = "pass_word",port = 6379)
r = redis.strictredis(connection_pool = pool)
match = sys.ar**[1]+"*"
print(match)
count = 10000
for key in r.scan_iter(match = match,count = count):
time = r.ttl(key)
if time==-1:
r.expire(key,1000)
print("set expire key:",key)
print(time)
這裡host_name和pass_word打個碼
sys.ar**[1]指傳入的第乙個引數,執行的時候就用python3 ***.py hello 就會自動掃瞄hello開頭的key,步進10000個,然後將其過期時間設為1000秒,過一會就自動過期了。
在業務低峰期的話步進可以設大點,這樣清的會比較快,我們為了清幾十萬個key花了半個多小時。
Redis 設定過期時間
redis 中有個設定時間過期的功能,即對儲存在 redis 資料庫中的值可以設定乙個過期時間。作為乙個快取資料庫,這是非常實用的。比如,一般專案中的 token 或是 cookie 資訊,尤其是簡訊驗證碼,都是有時間限制的,按照傳統的資料庫處理方式,一般都是自己判斷過期,這樣無疑會嚴重影響專案效能...
redis定時過期,清除
我這裡用的是redistemplate控制的redis 可以發現他的put方法 除了key和value 還會放乙個引數進去,就是他的失效時間 redistemplate.opsforvalue set key,value,seconds,timeunit.seconds 只要往redis存值的時候,...
redis的過期時間設定和過期刪除機制
redis的過期時間設定和過期刪除機制 expire 將鍵的生存時間設為 ttl 秒 pexpire 將鍵的生存時間設為 ttl 毫秒 expireat 將鍵的過期時間設為 timestamp 所指定的秒數時間戳 pexpireat 將鍵的過期時間設為 timestamp 所指定的毫秒數時間戳.二 ...