亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Redis > 正文

基于redis實現的點贊功能設計思路詳解

2020-03-17 12:38:14
字體:
來源:轉載
供稿:網友

前言

點贊其實是一個很有意思的功能?;镜脑O計思路有大致兩種, 一種自然是用mysql等

數據庫直接落地存儲, 另外一種就是利用點贊的業務特征來扔到redis/224550.html">redis(或memcache)中, 然后離線刷回mysql等。

直接寫入Mysql

直接寫入Mysql是最簡單的做法。

做兩個表即可,

1、post_like

記錄文章被贊的次數,已有多少人贊過這種數據就可以直接從表中查到;

2、user_like_post

記錄用戶贊過了哪些文章, 當打開文章列表時,顯示的有沒有贊過的數據就在這里面;

缺點

1、數據庫讀寫壓力大

熱門文章會有很多用戶點贊,甚至是短時間內被大量點贊, 直接操作數據庫從長久來看不是很理想的做法。

redis存儲隨后批量刷回數據庫

redis主要的特點就是快, 畢竟主要數據都在內存嘛;

另外為啥我選擇redis而不是memcache的主要原因在于redis支持更多的數據類型, 例如hash, set, zset等。

下面具體的會用到這幾個類型。

優點

1、性能高

2、緩解數據庫讀寫壓力

其實我更多的在于緩解寫壓力, 真的讀壓力, 通過mysql主從甚至通過加入redis對熱點數據做緩存都可以解決,

寫壓力對于前面的方案確實是不大好使。

缺點

1、開發復雜

這個比直接寫mysql的方案要復雜很多, 需要考慮的地方也很多;

2、不能保證數據安全性

redis掛掉的時候會丟失數據, 同時不及時同步redis中的數據, 可能會在redis內存置換的時候被淘汰掉;

不過對于我們點贊而已, 稍微丟失一點數據問題不大;

具體設計

Mysql設計

這一塊和寫入寫mysql是一樣的,畢竟是要落地存儲的。

所以還是同樣的需要post_like, user_like_post這兩表存儲文章被點贊的個數(等統計), 用戶對那些文章點了贊(取消贊)。

這兩表分別通過post_id, user_id進行關聯。

redis設計部分:

post_set

在redis中弄一個set存放所有被點贊的文章

post_user_like_set_{$post_id}

對每個post以post_id作為key, 搞一個set存放所有對該post點贊的用戶;

post_user_like_{$post_id}_{$user_id}

將每個用戶對每個post的點贊情況放到一個hash里面去, hash的字段就

隨意跟進需求來處理就行了。

為啥用hash

只所以用hash是因為完全可以用hash來存儲一個點贊的對象, 對應數據庫的一行記錄。

當然有同學會說用key, value也可以, 將所有的數據序列化(json_encode等)

后全部放到value里面去。 反復序列化也是一個很大的開銷不是, hash可以很

方便的修改某個字段, 而序列化和反序列化的操作。

post_{$post_id}_counter

對每個post維護一個計數器, 用來記錄當前在redis中的點贊數,

這里我們只用counter記錄尚未同步到mysql中的點贊數(可以為負), 每次

刷回mysql中時將counter中的數據和數據庫已有的贊數相加即可。

用戶點贊/取消贊

獲取user_id, post_id, 查詢該用戶是否已經點過贊, 已點過則不允許再次點贊,

或者設計為前端允許用戶點, 只是后臺不重復計算;

這里需要注意的是用戶點贊的記錄可能在數據庫中, 也可能在緩存中, 所以查詢的時候

緩存和數據庫都要查詢, 緩存沒有再查詢數據庫。

將用戶的點贊/取消贊的情況記錄在redis中, 具體為:

1、寫入post_set

post_id寫入post_set

2、寫入post_user_like_set_{$post_id}

user_id寫入post_user_like_set_{$post_id}

3、寫入post_user_like_{$post_id}_{$user_id}

將用戶點贊數據, 例如贊狀態, post_id, user_id, ctime(操作時間), mtime(修改時間)寫入post_user_like_{$post_id}_{$user_id}

4、更新post_{$post_id}_counter

更新post_{$post_id}_counter, 這里的更新稍晚復雜一點, 需要和前面一樣先獲取當前用戶是否對這個post點過贊

如果點過, 并且本次是取消贊, counter減一, 如果沒點過, 本次是點贊, counter加一。

如果原來是取消贊的情況, 本次是點贊, counter加一。

同步刷回數據庫

循環從post_set中pop出來一個post_id至到空

    根據{$post_id} , 每次從post_user_like_set_{$post_id}中pop出來一個user_id直到空

        根據post_id, user_id, 直接獲取對應的hash表的內容(post_user_like_{$post_id}_{$user_id}

        將hash表中的數據寫入user_like_post表中

        將post_{$post_id}_counter中的數據和post_like中的數據相加, 將結果寫入到post_like表中

頁面展示

1、查詢用戶點贊情況

前面已經說過, 需要同時查詢redis和mysql

2、查詢post點贊統計

同樣需要查詢redis中的post_{$post_id}_counter和mysql的post_like表, 并將兩者相加

得到的結果才是正確的結果

總結

解決了mysql讀寫的問題

但沒有針對用戶量較大的場景考慮分表的設計, 可以考慮針對user_id或者post_id進行分表

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Redis頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久男人的天堂| 国产精品极品美女在线观看免费| 久久久国产一区| 国产欧美日韩最新| 国产在线高清精品| 亚洲免费视频网站| 日韩av网址在线| 91日本在线观看| 欧美国产日本高清在线| 日韩av电影在线网| 日韩中文字幕不卡视频| 亚洲综合视频1区| 欧美亚洲一级片| 日韩av综合中文字幕| 日韩中文字幕在线看| 国产精品精品国产| 亚洲欧美成人一区二区在线电影| 亚洲黄页视频免费观看| 日韩久久精品成人| 97在线免费视频| 福利视频导航一区| 亚洲成人精品在线| 久久精品视频一| 国产乱人伦真实精品视频| 日韩精品免费在线播放| 日本精品视频在线观看| 久久人人爽亚洲精品天堂| 亚洲精品狠狠操| 久久伊人免费视频| 欧美韩日一区二区| 欧美一级视频一区二区| 国产香蕉精品视频一区二区三区| 最新亚洲国产精品| 日韩福利视频在线观看| 亚洲jizzjizz日本少妇| 中日韩美女免费视频网址在线观看| 亚洲欧美制服第一页| 热久久这里只有精品| 97精品欧美一区二区三区| 亚洲精选一区二区| 日韩成人av网址| 欧美午夜精品久久久久久久| 久久精品99无色码中文字幕| 欧美一级淫片aaaaaaa视频| 在线播放国产一区中文字幕剧情欧美| 亚洲人成网在线播放| 欧美成人午夜激情在线| 97涩涩爰在线观看亚洲| 国产日韩欧美在线看| 97碰碰碰免费色视频| 成人写真福利网| 欧美性极品xxxx娇小| 亚洲精品97久久| 亚洲裸体xxxx| 亚洲欧美精品中文字幕在线| 国产在线播放不卡| 午夜欧美大片免费观看| 91精品国产一区| 久久久999精品视频| 欧美日韩综合视频网址| 亚洲mm色国产网站| 国产精品三级网站| 日韩av色综合| 日韩欧美aⅴ综合网站发布| 日韩在线欧美在线| 久久精品人人爽| 欧美夫妻性生活视频| 91精品在线一区| 538国产精品一区二区在线| 日韩中文字幕av| 成人黄色大片在线免费观看| 亚洲精品久久久久中文字幕欢迎你| 全亚洲最色的网站在线观看| 亚洲爱爱爱爱爱| 成人av在线亚洲| 成人性生交大片免费看小说| 日本久久久久亚洲中字幕| 国产一区二区久久精品| 欧美激情欧美狂野欧美精品| 久久福利视频导航| 欧美激情精品久久久久久黑人| 欧美午夜影院在线视频| 日韩小视频在线观看| 日韩在线一区二区三区免费视频| 国产免费久久av| 91久久精品久久国产性色也91| 精品无人区太爽高潮在线播放| 一本色道久久综合亚洲精品小说| 在线日韩精品视频| 亚洲一区二区中文| 一区二区三区四区在线观看视频| 国产精品久久99久久| 欧美在线观看网址综合| 91精品在线一区| 麻豆国产精品va在线观看不卡| 欧美一区二区三区精品电影| 国内免费久久久久久久久久久| 久久久久久国产精品三级玉女聊斋| 国产91免费观看| www.亚洲免费视频| 久久成人av网站| 538国产精品一区二区免费视频| 欧美激情乱人伦一区| 日韩成人黄色av| 日韩国产高清污视频在线观看| 久久6精品影院| 97久久精品国产| 欧美日本在线视频中文字字幕| 久久久成人精品视频| 日韩欧美在线视频日韩欧美在线视频| 91在线观看免费网站| 国产欧美精品久久久| 亚洲第一黄色网| 国产精品久久久久久久久免费看| 亚洲精品98久久久久久中文字幕| 亚洲欧美日韩网| 成人免费xxxxx在线观看| 亚洲美女又黄又爽在线观看| 国产日本欧美一区二区三区在线| 国产精品影片在线观看| 亚洲精品久久久久久下一站| 国内精品久久久久| 国产剧情日韩欧美| 日韩亚洲欧美中文在线| 久久久亚洲欧洲日产国码aⅴ| 2021国产精品视频| 国产精品美女www| 欧美色播在线播放| 中文字幕日韩欧美| 欧美中文在线视频| 日韩av一区在线观看| 欧美视频13p| 中文字幕日韩欧美在线| 欧洲亚洲在线视频| 中文字幕国产亚洲2019| 欧美电影免费观看高清完整| 国内精品久久久久久久久| 美女撒尿一区二区三区| 亚洲成年网站在线观看| 视频在线一区二区| 一本色道久久88综合日韩精品| 亚洲xxx视频| 主播福利视频一区| 成人在线免费观看视视频| 福利微拍一区二区| 亚洲韩国欧洲国产日产av| 午夜精品久久久久久久久久久久久| 日韩av在线免费观看一区| 在线电影欧美日韩一区二区私密| 欧美激情视频三区| 亚洲欧美在线第一页| 欧美亚洲国产精品| 亚洲情综合五月天| 色多多国产成人永久免费网站| 日韩视频免费大全中文字幕| 欧美日韩成人在线视频| 欧美中文字幕精品| 欧美色视频日本高清在线观看| 亚洲黄页视频免费观看| 中文字幕亚洲无线码a| 国内精品久久久| 欧美体内谢she精2性欧美| 97热精品视频官网| 国产精品吹潮在线观看|