redis 快取策略

WBOY
發布: 2016-09-06 08:57:08
原創
1234 人瀏覽過

在使用redis快取資料的過程中,設計快取想法如下:
取得資料時,先從快取中取得數據,如果取得到的資料為空,則查詢資料庫,然後先將查詢到的資料快取到redis ,再回數據​​
但現在有兩個問題請教一下大家:

  1. 如果資料庫中查詢的結果為空,那麼不會快取數據,因此也無法從快取中獲取數據,那麼每次獲取數據時都會進行一個資料庫查詢,這個應該怎麼優化?

  2. 資料進行更新時,快取該怎麼處理?

對這兩個問題我有一點不成熟的想法,現提出來懇請大家指點一下是否可行以及是否有更好的處理方式:

對於第一個問題,如果從資料庫查詢沒有取得到數據,那麼快取一個固定的預設值(如字串:'nodata')表示沒有數據,下次從快取中取得資料時,得到這個固定表示沒有資料的值時就直接回傳空,而不用再查詢資料庫

對於第二個問題,當前想法是,如果更新的數據是不是特別重要的話,那麼將數據寫入數據庫後直接更新緩存中對應的數據,下次獲取數據時不用查詢數據庫就能直接獲取到最新的數據,但如果更新的數據是特別重要的(例如:金錢),那麼將數據寫入資料庫後直接清除對應的緩存,下次再獲取數據的時候就需要查詢資料庫獲取最新的數據。

回覆內容:

在使用redis快取資料的過程中,設計快取想法如下:
取得資料時,先從快取中取得數據,如果取得到的資料為空,則查詢資料庫,然後先將查詢到的資料快取到redis ,再回數據​​
但現在有兩個問題請教一下大家:

  1. 如果資料庫中查詢的結果為空,那麼不會快取數據,因此也無法從快取中獲取數據,那麼每次獲取數據時都會進行一個資料庫查詢,這個應該怎麼優化?

  2. 資料進行更新時,快取該怎麼處理?

對這兩個問題我有一點不成熟的想法,現提出來懇請大家指點一下是否可行以及是否有更好的處理方式:

對於第一個問題,如果從資料庫查詢沒有取得到數據,那麼快取一個固定的預設值(如字串:'nodata')表示沒有數據,下次從快取中取得資料時,得到這個固定表示沒有資料的值時就直接回傳空,而不用再查詢資料庫

對於第二個問題,當前想法是,如果更新的數據是不是特別重要的話,那麼將數據寫入數據庫後直接更新緩存中對應的數據,下次獲取數據時不用查詢數據庫就能直接獲取到最新的數據,但如果更新的數據是特別重要的(例如:金錢),那麼將數據寫入資料庫後直接清除對應的緩存,下次再獲取數據的時候就需要查詢資料庫獲取最新的數據。

  1. 你需要一個方式(例如天然可空類型或和類型)來區分這兩種情況。例如有資料的時候裡邊存的是一個 JSON 化的列表 [{...}, {...}],那麼沒資料時自然存 [] 了。總之沒有衝突就行。

  2. 快取更新的套路 | 酷 殼 - CoolShell.cn

樓上說的很有道理。
你可以參考下檔案快取的思路,
thinkphp檔案快取採取的是serialize(valle)去保存資料,檔案名稱當key名稱。清除緩存,直接set(null)來實現。
快取只是為了查詢時候的方便,減少mysql的訪問次數,至於快取更新的問題得靠程式碼去實現。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板