6 回答

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊
為啥要用sql作為key....還每次flushdb,你可以換個(gè)思路,假如有個(gè)表是商品,主鍵是id,你可以建一個(gè)key是detail:商品id的緩存,把這行記錄作為value,數(shù)據(jù)類型hash或string都行。有些時(shí)候你的業(yè)務(wù)要根據(jù)主鍵查某條商品信息的時(shí)候,先去redis看看有沒有detail:主鍵的緩存,有的時(shí)候就直接取緩存,沒有命中緩存然后查數(shù)據(jù)庫(kù),并把查詢結(jié)果存入緩存。還有就是當(dāng)有該條記錄變更的時(shí)候,可以直接刪掉緩存,也可以u(píng)pdate緩存。
這只是一個(gè)很簡(jiǎn)單的例子,redis數(shù)據(jù)類型很豐富的,合理使用可以用得很爽。還有,上面例子,可以設(shè)置每個(gè)緩存后給這條緩存設(shè)置一個(gè)有效期,好比一周,看你業(yè)務(wù)了。一般來說老的東西用戶看得比較少,那么到期后沒人瀏覽就不重建了,保證你redis一直是熱數(shù)據(jù)。不至于一堆陳年數(shù)據(jù),手機(jī)打字好累,有用請(qǐng)給贊

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊
緩存的意義就是存儲(chǔ)熱門的數(shù)據(jù),比如說在redis中存儲(chǔ)數(shù)據(jù)庫(kù)經(jīng)常要用到的數(shù)據(jù),這樣就不必每次查詢數(shù)據(jù)庫(kù)了。
樓主遇到的問題是緩存里的數(shù)據(jù)如何跟數(shù)據(jù)庫(kù)的數(shù)據(jù)保持一致的問題。
像上面說到的表如果有數(shù)據(jù)修改添加刪除,flushDB()
,是不可取的。
對(duì)緩存數(shù)據(jù)的操作實(shí)際上簡(jiǎn)化下來就是讀和寫
當(dāng)你的應(yīng)用查詢r(jià)edis時(shí),如果發(fā)現(xiàn)查不到,這個(gè)時(shí)候就要去查數(shù)據(jù)庫(kù),并把查出來的數(shù)據(jù)存到redis中。
當(dāng)數(shù)據(jù)庫(kù)的數(shù)據(jù)有改動(dòng)時(shí),上面說到的數(shù)據(jù)增刪改對(duì)redis都有操作后再對(duì)數(shù)據(jù)庫(kù)操作
,其實(shí)也是不可取的,應(yīng)用應(yīng)先修改數(shù)據(jù)庫(kù),成功了之后再對(duì)redis更新。如果先對(duì)redis更新,但對(duì)數(shù)據(jù)庫(kù)的更新失敗了怎么辦?redis不就存儲(chǔ)有臟數(shù)據(jù)了嗎。
另外,緩存中的數(shù)據(jù)是可以設(shè)置失效時(shí)間的(expire timeout),過了失效時(shí)間,就再查一次數(shù)據(jù)庫(kù),更新一下數(shù)據(jù)(即使數(shù)據(jù)根本沒變過),在失效時(shí)間之前,至少減少了數(shù)據(jù)庫(kù)的負(fù)載。
看樓主題目的意思,有一種想把redis當(dāng)做數(shù)據(jù)庫(kù)數(shù)據(jù)的備份一樣,那樣就不是用redis緩存的意義了(也許應(yīng)該考慮數(shù)據(jù)庫(kù)主從備份)。
至于你說的方案,看題目的描述,這并不是需要一個(gè)方案(我覺得高可用配置,考慮數(shù)據(jù)的一致性強(qiáng)弱等等方面才稱之為方案)。
實(shí)際上是代碼的邏輯,看代碼怎么寫。

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
添加回答
舉報(bào)