當前位置:首頁 » 硬碟大全 » redis緩存過期時間設置多少合適
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

redis緩存過期時間設置多少合適

發布時間: 2022-12-28 05:42:25

⑴ java設置 redis 失效時間多久

EXPIRE命令返回1表示成功,返回0表示鍵值不存在或設置失敗。
同時這里還有一個比較常用的命令是ttl,用於查看一個鍵還有多久時間會被刪除。返回的是剩餘時間(秒數)。
這里就不貼代碼了,有一點需要說明的是,ttl命令在鍵不存在或被刪除之後,會返回-2,在沒有為鍵設置生存時間(即永久存在,建一個鍵之後的默認情況)時返回的是-1。大家可以親自操作一把。
如果想要把一個設置過過期時間的鍵取消過期時間設置,則需要使用persist命令。
redis > SET session:27e7a id1234
OK
redis > EXPIRE session:27e7a 1200
(integer) 1
redis > TTL session:27e7a
(integer) 1092
redis > PERSIST session:27e7a
(integer) 1
redis > TTL session:27e7a
(integer) -1

這里需要說明一點的是,除了使用persist命令外,使用set、getset命令為鍵賦值,也會同時消除鍵的生存時間,如果需要可以重新使用expire命令為鍵設置生存時間。而其他對鍵的操作命令(如incr、lpush、hset、zrem)都不會影響鍵的生存時間。
expire命令的單位是秒,而且這個參數必須為整數,如果需要更精準的時間的話,需要使用pexpire命令設置,其單位為毫秒,同理也需要用pttl命令來看鍵的剩餘毫秒數。當然使用expire命令設置的過期時間也是可以用pttl看鍵的剩餘毫秒數的。
訪問限制
有時候我們會有一個需求是需要限制一個用戶對一個資源的訪問頻率,我們假定一個用戶(用IP作為判斷)每分鍾對一個資源訪問次數不能超過10次。
我們可以使用一個鍵,每次用戶訪問則把值加1,當值加到10的時候,我們設定鍵的過期時間為60秒,並且禁止訪問。這時候下次訪問發現值為10,則不讓訪問了,然後60秒後鍵被刪除,這時候再次創建鍵。這樣就可以解決,但是其實這樣時間並不精準,問題還是挺大的。
我們還有一個方案:使用隊列。前面的章節也說到了,使用列表類型可以用作隊列。
我們設定一個隊列rate.limiting.192.168.1.1(假定是這個IP),我們把每次的訪問時間都添加到隊列中,當隊列長度達到10以後,判斷當前時間與隊列第一個值的時間差是否小於60,如果小於60則說明60秒內訪問次數超過10次,不允許訪問;否則說明可以訪問,則把隊列頭的值刪除,隊列尾增加當前訪問時間。
這種方法可以比較精準的實現訪問限制,但是當限制的次數比較大時,這種方法佔用的存儲空間也會比較大。
緩存
有時候會把一些對CPU或IO資源消耗比較大的操作結果緩存起來,並設置一定時間的自動過期。比如我們設定一個微博外鏈的最熱站點緩存放於新浪微博的首頁,這樣我們不可能每次訪問都重新計算最熱的外鏈站點,所以我們可以設定兩小時更新一次。每次訪問是判斷這個鍵有沒有,如果存在則直接返回,如果沒有則通過計算把內容存入鍵中,並設定兩小時的過期時間。
然而在很多場合這種方法會很恐怖,當伺服器內存有限的時候,大量使用緩存切設置生存時間過長就會導致redis佔用太多內存,而redis有時候會把系統內存都吃掉,導致系統崩潰。但是設置時間過短又會導致緩存的命中太低。
所以我們最好的辦法是設定緩存的淘汰規則。這種方式比較適用於將redis用作緩存系統的時候比較好。
具體就是:修改配置文件中的maxmemory參數,限制redis的最大內存,當超出後會按照maxmemory-policy參數指定的策略刪除不需要的鍵,直到redis佔用的內存小於設定值。

⑵ redis緩存有多久

在Redis中的數據一般在內存中進行存取,在沒有進行持久化之前這些數據都有過期時間,對於Redis的過期時間需要通過對key設置過期時間,一般時間的設置需要根據項目改變,可以設置一段時間後或者永久不失效。
redis過期時間
redis過期時間介紹有時候我們並不希望redis的key一直存在。例如緩存,驗證碼等數據,我們希望它們能在一定時間內自動的被銷毀。redis提供了一些命令,能夠讓我們對key設置過期時間,並且讓key過期之後被自動刪除。

5.SETEXSETEX介面定義:SETEX key "seconds" "value"介面描述:SETEX在邏輯上等價於SET和EXPIRE合並的操作,區別之處在於SETEX是一條命令,而命令的執行是原子性的,所以不會出現並發問題。

⑶ Redis緩存過期機制

一、針對與設置了過期時間的key值

    1.(主動)定期刪除:定時隨機的檢查過期的key,如果過期則清理刪除

        redis.conf(每秒檢查的次數1-500)配置:   hz 10

    2.(被動)惰性刪除:當客戶端請求到一個已經過期的key時,redis會檢查是否過期並刪除

所以,雖然key過期了,但是沒被清理的話,還是會占內存的。

二、內存淘汰管理機制Memory Management

    當內存占滿之後,redis提供緩存淘汰機制。

    redis.conf: maxmemory <bytes>

* noeviction:舊緩存永不過期,新緩存設置不了,返回錯誤 

* allkeys-lru:清除最少用的舊緩存,然後保存新的緩存(推薦使用)

* allkeys-random:在所有的緩存中隨機刪除(不推薦)

* volatile-lru:在那些設置了expire過期時間的緩存中,清除最少用的舊緩存,然後保存新的緩存

* volatile-random:在那些設置了expire過期時間的緩存中,隨機刪除緩存

* volatile-ttl:在那些設置了expire過期時間的緩存中,刪除即將過期的

⑷ redis 怎麼設置過期時間為每天24:00

PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP
設置成功返回 1 。 當 key 不存在或者不能為 key 設置過期時間時(比如在低於 2.1.3 版本的 Redis 中你嘗試更新 key 的過期時間)返回 0 。
例子:
pexpireat redisKey ovar_time
redisKey :是redis 的key值 over_time 是當天的24點
var over_time = (Timer.getDayHour(Timer.now(), 0, 0, 0) * Timer._M_SEC) + Timer.OneDay;
Timer._M_SEC = 1000 這里設置的 ms數
Timer.OneDay = 24*60*60*1000; //86400000
Timer.now():當前時間 可以根據不同的語言更換對應的取值方式
/**
* @Brief: 獲取指定時間( 秒數)當天某時候的秒數
*
* @param {Number} timeStampe 時間毫秒數
* @param {Number} hour 小時
* @param {Number} min 分鍾
* @param {Number} sec 秒
* */
Timer.getDayHour = function (timeStampe, hour, min, sec) {
var nowDate = new Date(timeStampe);
nowDate.setHours(hour);
nowDate.setMinutes(min);
nowDate.setSeconds(sec);
return Math.floor(nowDate.getTime() / _M_SEC);
};

⑸ 2022-03-12 SpringBoot 使用redis做緩存,設置失效時間以及序列化

SpringBoot的cache緩存,是針對返回值的一種操作
springboot使用redis做緩存時,默認只需要導入redis依賴,即可實現使用redis做緩存

不需要導入cache依賴
在啟動類上加上 @EnableCaching 即可開啟緩存功能
關於各個註解的使用,這里不再細說,網上詳細的教程很多,這里主要講一下如何指定過期時間

默認是永不過期,如果需要指定過期時間,則需要增加配置類

⑹ redis設置過期時間等

//向redis里存入數據和設置緩存時間

//val做-1操作 

//根據key獲取緩存中的val 

//val +1 

//根據key獲取過期時間 

//根據key獲取過期時間並換算成指定單位 

//根據key刪除緩存 

//檢查key是否存在,返回boolean值 

//向指定key中存放set集合 

//設置過期時間 

//根據key查看集合中是否存在指定數據 

//根據key獲取set集合 

//驗證有效時間

⑺ redis一般過期時間設置為多少合適

1. 在小於2.1.3的redis版本里,只能對key設置一次expire。redis2.1.3和之後的版本里,可以多次對key使用expire命令,更新key的expire time。
2. redis術語裡面,把設置了expire time的key 叫做:volatile keys。 意思就是不穩定的key。
3. 如果對key使用set或del命令,那麼也會移除expire time。尤其是set命令,這個在編寫程序的時候需要注意一下。
4. redis2.1.3之前的老版本里,如果對volatile keys 做相關寫入操作(LPUSH,LSET),和其他一些觸發修改value的操作時,redis會刪除該key。

⑻ redis里怎樣設置過期時間

通過EXPIRE 命令或者PEXPIRE 命令,客戶端可以以秒或者毫秒精度為資料庫中的某個鍵設置生存時間( Time To Live , TTL) ,在經過指定的秒數或者毫秒數之後,伺服器就會自動刪除生存時間為0的鍵:

redis> SET key value
OK
redis> EXP 工RE key 5
(integer) 1
redis> GET key // 5 秒之內"value"
redis> GET key // 5 秒之後
(nil)

注意
SETEX 命令可以在設直一個字元串鍵的同時為鍵設直過期時間,因為這個命令是一個類型限定的命令(只能用於字元串鍵),但SETEX 命令設置過期時間的原理和EXPIRE命令設置過期時間的原理是完全一樣的。
與EXPlRE 命令和PEXPIRE 命令類似,客戶端可以通過EXPlREAT 命令或PEXPlREAT命令,以秒或者毫秒精度給資料庫中的某個鍵設置過期時間(expire time)。
過期時間是一個UNIX時間戳,當鍵的過期時間來臨時,伺服器就會自動從資料庫中刪除這個鍵:

redis> SET key value
OK
redis> EXPIREAT key 1377257300
(integer) 1
redis> TIME

1)"1377257296"2)"296543"
redis> GET key // 1377257300 之前"value"
redis> TIME
1)"1377257303"2)"230656 "
redis> GET key // 1377257300 之後
(nil)

TTL 命令和PTTL 命令接受一個帶有生存時間或者過期時間的鍵,返回這個鍵的剩餘生存時間,也就是,返回距離這個鍵被伺服器自動刪除還有多長時間:

redis> SET key va1ue
OK
redis> EXPlRE key 1000
(integer) 1
redis> TTL key
(integer) 997
redis> SET another_key another_value
OK

⑼ redis需要設置過期時間嗎

通過expire
命令或者pexpire
命令,客戶端可以以秒或者毫秒精度為資料庫中的某個鍵設置生存時間(
time
to
live
,
ttl)
,在經過指定的秒數或者毫秒數之後,伺服器就會自動刪除生存時間為0的鍵:
redis>
set
key
value
ok
redis>
exp
工re
key
5
(integer)
1
redis>
get
key
//
5
秒之內"value"
redis>
get
key
//
5
秒之後
(nil)
注意
setex
命令可以在設直一個字元串鍵的同時為鍵設直過期時間,因為這個命令是一個類型限定的命令(只能用於字元串鍵),但setex
命令設置過期時間的原理和expire命令設置過期時間的原理是完全一樣的。
與explre
命令和pexpire
命令類似,客戶端可以通過explreat
命令或pexplreat命令,以秒或者毫秒精度給資料庫中的某個鍵設置過期時間(expire
time)。
過期時間是一個unix時間戳,當鍵的過期時間來臨時,伺服器就會自動從資料庫中刪除這個鍵:
redis>
set
key
value
ok
redis>
expireat
key
1377257300
(integer)
1
redis>
time
1)"1377257296"2)"296543"
redis>
get
key
//
1377257300
之前"value"
redis>
time
1)"1377257303"2)"230656
"
redis>
get
key
//
1377257300
之後
(nil)
ttl
命令和pttl
命令接受一個帶有生存時間或者過期時間的鍵,返回這個鍵的剩餘生存時間,也就是,返回距離這個鍵被伺服器自動刪除還有多長時間:
redis>
set
key
va1ue
ok
redis>
explre
key
1000
(integer)
1
redis>
ttl
key
(integer)
997
redis>
set
another_key
another_value
ok

⑽ redis需要設置過期時間嗎

看需求吧,如果你緩存的數據是靜態的,隨著時間不會變化或者變化比較小,以後一直會用到,那就不用設置。但是如果緩存的數據具有時效新,或者是動態的,不停追加,那麼最好設置或者自己定時刪除,不然內存會撐爆的