求選擇哪個緩衝設計好一些?

來源:互聯網
上載者:User
關鍵字 php redis mysql 緩衝設計 緩衝
最近在做一個類似貼吧一樣的東西,在資料上想用redis緩衝,但是現在有兩個想法,不知道哪個更實際一些,求大家指點。

所有內容都會存mysql這個沒的說
貼文清單永駐redis這個也沒的說

問題是文章內容怎麼辦。

一種想法是存一定數量的文章內容到緩衝裡,比如1000條。使用者訪問時根據所在頁面和條數,前1000條的請求都從redis中讀取,超過1000條之後的舊資料就從mysql中讀取。有新文章且緩衝達到1000條時就LPUSH新的RPOP舊的。

另一種想法是所有新增的貼文數據都存在redis中,並且都設定一個到期時間,比如24小時。使用者有訪問過就將這條資料的到期時間增加到24小時,如果沒有訪問過就從redis中刪除。使用者訪問的時候先查redis,查不到再去mysql中查,順便再寫入redis。

這兩種辦法哪個好一些?

回複內容:

最近在做一個類似貼吧一樣的東西,在資料上想用redis緩衝,但是現在有兩個想法,不知道哪個更實際一些,求大家指點。

所有內容都會存mysql這個沒的說
貼文清單永駐redis這個也沒的說

問題是文章內容怎麼辦。

一種想法是存一定數量的文章內容到緩衝裡,比如1000條。使用者訪問時根據所在頁面和條數,前1000條的請求都從redis中讀取,超過1000條之後的舊資料就從mysql中讀取。有新文章且緩衝達到1000條時就LPUSH新的RPOP舊的。

另一種想法是所有新增的貼文數據都存在redis中,並且都設定一個到期時間,比如24小時。使用者有訪問過就將這條資料的到期時間增加到24小時,如果沒有訪問過就從redis中刪除。使用者訪問的時候先查redis,查不到再去mysql中查,順便再寫入redis。

這兩種辦法哪個好一些?

可以說明使用者規模。
我認為第二種好,因為通用性強。
第一種如果業務變大,訪問增多,就要改代碼

第二種當然更實用一些,代碼也容易實現。第一個邏輯複雜一些不太好弄。。。。。

不過第二個,你還可以改進一下:
在緩衝失效的時候,需要先查詢redis,找不到資料,再查詢MySQL,最後再寫入redis。這裡更新緩衝的時候會多出兩次redis查詢。

  1. 比不使用緩衝還要慢。。。

  2. 緩衝失效的時候,如果有並發請求,則會重複更新redis緩衝。

你可以參考我用Python實現的一個類解決了第一點https://github.com/lloydzhou/StaleRedisCache

  1. 給緩衝多設定一段緩衝時間

  2. 若在緩衝期內,直接使用到期資料,並使用非同步任務更新緩衝。

  3. 你還可以借用redis實現一個記憶體鎖,解決上面第二點的並發問題。
    (我項目中沒有做,是因為外面有nginx頁面緩衝,在裡面應用程式層很難遇到並發問題)

我說說自己的設計,當然前提是直接查詢DB是不可行的情況下,不然也沒必要折騰。
首先緩衝是必然,優先考慮使用者在瀏覽貼吧時常看的基本就是前10頁(舉例),那麼完全沒必要緩衝全量資料,最好是僅緩衝前10頁即可,這個設計無論訪問量多大都不會有太大問題,只要不出現大量的使用者訪問10頁之後的資料。對於這個緩衝其實我們只需要緩衝貼文清單,而非文章具體內容,所以不會佔用太大記憶體。
對於文章內容可以採用熱點方式解決,即LRU,因為被查看的文章基本都是固定的,即熱點文章,緩衝只需要緩衝這些文章內容即可。

綜上,其實就是題主的兩種方案的結合,其實這兩種方案並不是針對同一個問題的解決方案。

第一種吧,如果使用者更新了文章,同樣要更新對應的資料緩衝,一般文章,舊文章翻的人很少的。

第一種。我在樂視做評論時,就用的第一種

緩衝文章內容,用mysql或redis還不如使用mongodb

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.