亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

redis 緩存方案--有沒有可用的?

redis 緩存方案--有沒有可用的?

千萬里不及你 2019-03-21 15:13:17
現在的方案是,sql 作為key 查詢結果序列化后 存入value 。表如果有數據修改添加刪除,flushDB()。但是整個項目只要有數據變更緩存就沒了。誰還有其他方案?想知道的就是數據增刪改對redis都有操作后再對數據庫操作,redis里查詢的永遠是最新的,當某些原因redis里查不到時查數據庫然后保存到reids里。這種方案有誰實現了嗎?
查看完整描述

6 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

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


查看完整回答
反對 回復 2019-04-19
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

緩存的意義就是存儲熱門的數據,比如說在redis中存儲數據庫經常要用到的數據,這樣就不必每次查詢數據庫了。

樓主遇到的問題是緩存里的數據如何跟數據庫的數據保持一致的問題。
像上面說到的表如果有數據修改添加刪除,flushDB(),是不可取的。

對緩存數據的操作實際上簡化下來就是

當你的應用查詢redis時,如果發現查不到,這個時候就要去查數據庫,并把查出來的數據存到redis中。
當數據庫的數據有改動時,上面說到的數據增刪改對redis都有操作后再對數據庫操作,其實也是不可取的,應用應先修改數據庫,成功了之后再對redis更新。如果先對redis更新,但對數據庫的更新失敗了怎么辦?redis不就存儲有臟數據了嗎。

另外,緩存中的數據是可以設置失效時間的(expire timeout),過了失效時間,就再查一次數據庫,更新一下數據(即使數據根本沒變過),在失效時間之前,至少減少了數據庫的負載。

看樓主題目的意思,有一種想把redis當做數據庫數據的備份一樣,那樣就不是用redis緩存的意義了(也許應該考慮數據庫主從備份)。

至于你說的方案,看題目的描述,這并不是需要一個方案(我覺得高可用配置,考慮數據的一致性強弱等等方面才稱之為方案)。
實際上是代碼的邏輯,看代碼怎么寫。


查看完整回答
反對 回復 2019-04-19
?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

spring 有redis插件,小項目用ehcache,spring插件比較方便。


查看完整回答
反對 回復 2019-04-19
?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

實現過@Cacheable,使用在servicedao層的方法上,用來進行攔截,直接去redis取數據。


查看完整回答
反對 回復 2019-04-19
  • 6 回答
  • 0 關注
  • 646 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號