『壹』 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佔用的內存小於設定值。
『貳』 誰能告訴我C#中緩存的生命周期
緩存這個概念很廣.
在Asp.Net環境下,頁面,控制項都可以設置輸出緩存,並且可以設置過期時間.Asp.Net的HttpContext對象有個Cache屬性,可以設置數據緩存,可以設置過期時間.可能你會用到一些第三方緩存庫(比如微軟的企業庫)或者分布式緩存庫(大名鼎鼎的Memcache),這些都是可以設置過期時間的.
在Windows應用程序下,由於沒有了HttpContext對象,所有緩存機製得靠自己實現.
至於緩存的生命周期,輸出緩存是一個絕對過期時間,超出該時間則緩存失效.數據緩存可以設置絕對過期時間和相對過期時間,在相對過期時間范圍內沒有訪問該緩存,則失效,否則繼續延長緩存期限.第三方緩存一般設計的是絕對過期時間.
在內存吃緊的時候,CLR會自動清理緩存已滿足應用程序需要,這種特殊情況過期時間不一定靠譜.
『叄』 Nginx緩存什麼時候失效
location ~.*\.(js|css|html|png|jpg)$ 這個是設置類型
{
expires 3d;
}
expires 3d;//表示緩存3天
expires 3h;//表示緩存3小時
expires max;//表示緩存10年
expires -1;//表示永遠過期。
如果設置為-1在js、css等靜態文件在沒有修改的情況下返回的是http 304,如果修改返回http 200
http 304:自從上次請求後,請求的網頁未修改過。伺服器返回此響應時,不會返回網頁內容。
http 200:伺服器已成功處理了請求,這表示伺服器提供了請求的內容。
=======
如果不想讓代理或瀏覽器緩存,加no-cache參數
add_header Cache-Control no-cache;
這樣瀏覽器F5刷新時,返回的就是http 200,而不是http 304
『肆』 如何查詢緩存時間
對於WEB地理信息系統來說,一個需要特別強調的是系統的響應速度,有許多方法來提高系統的速度,我們今天要提到的是利用緩存來提高系統的速度。例如在執行查詢時,如果前後多次所查詢的得到結果都相同,我們可以將第一次查詢的結果放到內存中緩存中去,第二或第二次調用時,我們可以直接返回緩存的信息,節省了從地圖伺服器中查詢的時間,從而提高了響應的效率。ASP.NET提供了強大的、便於使用的緩存機制,用於將需要大量伺服器資源來創建的對象存儲在內存中。緩存這些類型的資源會大大改進應用程序的性能。緩存是由Cache類實現的,緩存程序是每個應用程序專用的。緩存生存期依賴於應用程序的生存期,重新啟動應用程序後,將重新創建Cache對象。設計Cache類是為了便於使用。可以將項放置在Cache中,並在以後使用簡單的鍵/值對來檢索這些項。Cache類提供了強大的功能,允許自定義如何緩存項以及將他們緩存多長時間。例如,當缺乏系統內存時,緩存會自動移除很少使用的或優先順序較低的項以釋放內存。該技術也成為清理,這是緩存確保過期數據不使用寶貴的伺服器資源的方式之一。當執行清理時,可以只是Cache給予某些項比其他項更高的優先順序。若要指示項的重要性,可以在使用Add或Insert方法添加項時,指定一個CacheItemPritory枚舉值。當使用Add或Insert方法將項添加到緩存時,您還可以建立項的過期策略。可以通過使用DateTime值指定項的確切過期時間(絕對過期時間),來定義項的生存期。也可以使用TimeSpan值指定一個彈性過期時間,彈性過期時間允許根據項的上次訪問時間來指定該項過期之前的運行時間。一旦項過期,便將它從緩存中移除。試圖檢索它的值的行為將返回null,除非該項被重新添加到緩存中。此為,ASP.NET允許根據外部文件、目錄(文件依賴項)或另一個緩存項(鍵依賴項)來定義緩存項的有效性。如果具有關聯依賴項的項發生更改,緩存項便會失效並從緩存中移除。可以使用該技術在項的數據源更改時從緩存中移除這些項。以下例子代碼如何在查詢時利用ASP.NET提供的緩存機制。首先在GetCallbackResult 方法的最前面加入如下代碼,判斷是否存在某一緩存,如果存在(第二次調用相同的操作),則直接將緩存結果返回,如果不存在(首次調用),則不影響程序的執行:// 判斷是否有相應的緩存信息 string cachedResponse = Cache[callbackArg] as string; if (cachedResponse != null) { return cachedResponse; }然後在GetCallbackResult方法返回response字元串之前,加入如下代碼,用於將查詢結果保存到緩存中:TimeSpan cacheDuration = new TimeSpan(0, 0, 999999); Cache.Add(callbackArg, response, null, DateTime.Now.Add(cacheDuration), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.NotRemovable, null);上述代碼通過Cache的Add方法將查詢結果緩存起來。該方法的第一個參數是用於引用該項的緩存鍵;第二個參數是要添加到緩存的項;第三個參數表示文件依賴項或緩存鍵依賴項,當任何依賴項更改時,該對象即無效,並從緩存中移除。如果沒有依賴項,則此參數為空引用;第四個參數是所添加對象將過期並從緩存中移除的時間。如果使用可調過期,則該參數必須為NoAbsoluteExpiration;第五個參數表示最後一次訪問所添加對象時與該對象過期時之間的時間間隔。如果該值等效於20分鍾,則該對象在最後一次被訪問20分鍾之後將過期並從緩存中移除。若果使用絕對過期,則該參數必須為NoSlidingExpiration;第六個參數是對象的相對的優先順序,由CacheItemPriority枚舉表示。緩存在退出對象時使用該值;具有較低優先順序的對象在具有較高優先順序的對象之前被從緩存移除;最後一個參數表示從緩存中移除對象時所調用的委託(如果提供)。當從緩存中刪除應用程序的對象時,可使用它來通知應用程序。
『伍』 設置頁面在失效前被緩存的時間是什麼意思
你應該是說的頁面緩存失效時間,比如你改了頁面引入的js,刷新的時候並不會生效,因為實際上瀏覽的是緩存的頁面,並沒有載入新寫的JS,緩存失效過了之後會重新讀一遍就會把新寫的js讀進去了,這個一般都是項目和伺服器配置,跟前端無關
『陸』 網頁緩存的生命周期是多少
有很多理由去解釋理解ASP.NET頁面生命周期是非常重要的,主要是要去理解什麼地方放置什麼特定的方法,什麼時候我們應該設置什麼相關的屬性。如果去開發自定義的伺服器控制項,理解生命周期對糾正控制項初始化時候的錯誤,以及使用view-state和後台代碼設置屬性是非常有用的。(控制項事件只與ASP.NET頁面相關)
頁面生命周期要看它是否是第一次請求,還是回發(本身頁面請求),最後決定是否到Web伺服器。當一個網頁被Web伺服器請求時,在回發到web瀏覽器之前,會經過一系列步驟/事件(如初始化,控制項實例化,state的恢復和保存,執行事件處理代碼,渲染)。
如果我們正確地使用和操作頁面生命周期事件,它對web應用程序開發會是一個非常方便和強大的工具。
『柒』 緩存擊穿互斥鎖 設置鎖的失效時間
設置鎖的失效時間是自己設置的,它的過期時間會很短,最長不超過五分鍾
緩存穿透是指查詢一個一定不存在的數據
由於緩存是不命中時被動寫的,
並且出於容錯考慮,如果從存儲層查不到數據則不寫入緩存,
這將導致這個不存在的數據每次請求都要到存儲層去查詢,失去了緩存的意義。
在流量大時,可能DB就掛掉了,
要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。
最常見的則是採用布隆過濾器
將所有可能存在的數據哈希到一個足夠大的bitmap中,
一個一定不存在的數據會被 這個bitmap攔截掉,
從而避免了對底層存儲系統的查詢壓力。
另外也有一個更為簡單粗暴的方法
如果一個查詢返回的數據為空(不管是數 據不存在,還是系統故障),
我們仍然把這個空結果進行緩存,但它的過期時間會很短,最長不超過五分鍾
『捌』 java緩存失效判斷,緩存一般是存放在Hashtable中,並且有個失效時間。怎麼判斷這個時間。
用一個單獨的線程,定時檢查HashTable里的時間,過期就刪除