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

首頁 > 數據庫 > Redis > 正文

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

2020-10-28 21:37:06
字體:
來源:轉載
供稿:網友

前言

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

數據庫直接落地存儲, 另外一種就是利用點贊的業務特征來扔到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進行分表

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品高清一区二区三区| 亚洲人成在线免费观看| 自拍偷拍亚洲区| 夜夜躁日日躁狠狠久久88av| 日韩激情av在线免费观看| 国产日韩欧美中文| 亚洲第一福利网| 国产精品精品国产| 亚洲视频在线免费观看| 欧美日韩一二三四五区| 日韩欧美福利视频| 日韩精品一区二区三区第95| 亚洲一区第一页| 国产精品福利无圣光在线一区| 国产一区红桃视频| 国产精品99久久久久久久久久久久| 91精品国产777在线观看| 国产精品久久久久久久app| 欧美多人乱p欧美4p久久| 一二美女精品欧洲| 成人精品一区二区三区| 日韩在线观看免费全| 91精品国产91久久久久久最新| 91在线观看欧美日韩| 欧美精品aaa| 日韩欧美国产一区二区| 欧美理论电影在线观看| 97热在线精品视频在线观看| 成人网欧美在线视频| 国产精品中文字幕在线观看| 欧美日韩在线视频一区二区| 中文字幕少妇一区二区三区| 欧美性xxxx极品高清hd直播| 国产精品久久久久久久久影视| 国产成人精品视频在线| 国产第一区电影| 亚洲国产精品久久| 国产一区二区三区视频在线观看| 国产一区二区三区直播精品电影| 亚洲成人动漫在线播放| 欧美大学生性色视频| 久久精品99久久久香蕉| 色综合色综合久久综合频道88| 亚洲成人久久一区| 亚洲精品mp4| 国产精品影片在线观看| 亚洲国产婷婷香蕉久久久久久| 国产精品jvid在线观看蜜臀| 91在线视频九色| 亚洲欧美中文字幕在线一区| 日韩欧美成人网| www国产亚洲精品久久网站| 国产日本欧美一区| 日韩欧美精品免费在线| 亚洲精品一区中文| 奇米一区二区三区四区久久| 国产精品自在线| 91免费在线视频| 中文字幕久久亚洲| 欧美日韩成人精品| 久热精品在线视频| 亚洲人成在线播放| 亚洲成人黄色网址| 日韩中文字幕视频| 亚洲日韩中文字幕在线播放| 中文在线资源观看视频网站免费不卡| 日本在线精品视频| 国产999精品久久久影片官网| 精品国产区一区二区三区在线观看| 亚洲欧洲视频在线| 欧美精品一本久久男人的天堂| 欧美日韩美女在线观看| 欧美在线观看一区二区三区| 久久综合免费视频| 亚洲人免费视频| 色老头一区二区三区在线观看| 亚洲一区二区三区成人在线视频精品| 国产精品午夜一区二区欲梦| 国产精品第一页在线| 亚洲女同性videos| 91久久久久久久一区二区| 国产日产欧美精品| 亚洲色图日韩av| 亚洲国产天堂网精品网站| 国产一区二区三区高清在线观看| 日韩精品小视频| 97精品一区二区三区| 国产精品美女主播在线观看纯欲| 日韩欧美中文在线| 韩国欧美亚洲国产| 国产精品高潮视频| 久久国产精品久久久久久| 久久精品电影网站| 91在线高清免费观看| 欧美激情喷水视频| 亚洲精品久久久久久久久| 久久视频在线看| 91久久国产综合久久91精品网站| 亚洲香蕉伊综合在人在线视看| 91精品免费视频| 亚洲精品v天堂中文字幕| 国产suv精品一区二区三区88区| 91精品国产自产在线| 日韩在线免费av| 欧美大肥婆大肥bbbbb| 亚洲欧美成人一区二区在线电影| 国语自产精品视频在免费| 理论片在线不卡免费观看| 久久精品国产精品| 夜夜嗨av一区二区三区免费区| 欧美激情视频三区| 欧美大片免费观看| 亚洲欧美制服第一页| 黄网动漫久久久| 色悠悠国产精品| 久久影视三级福利片| 亚洲免费成人av电影| 青草热久免费精品视频| 国产精品高清免费在线观看| 国产一区二区黄| 日韩中文字在线| 国产精品久久综合av爱欲tv| 日韩欧美高清视频| 亚洲a中文字幕| 国产一区二区日韩精品欧美精品| 亚洲少妇中文在线| 成人精品一区二区三区电影免费| 日韩影视在线观看| 欧美日韩激情视频8区| 国产精品白丝av嫩草影院| 欧美另类高清videos| 成人h视频在线观看播放| 久久久久国产精品免费| 亚洲欧美国产制服动漫| 国产精品v日韩精品| 日韩美女视频免费看| 亚洲精品美女视频| 亚洲日本欧美日韩高观看| 久久国产精品首页| 亚洲精品一区二区三区不| 中国china体内裑精亚洲片| 久久精品成人一区二区三区| 8x海外华人永久免费日韩内陆视频| 日韩精品中文在线观看| 亚洲成色777777在线观看影院| 亚洲国产精品久久久久| 一区二区欧美久久| 97视频在线观看免费| 欧美激情亚洲精品| 亚洲韩国日本中文字幕| 国产欧美日韩高清| 日本国产高清不卡| 日韩成人免费视频| 国产亚洲一级高清| 最近更新的2019中文字幕| 色噜噜久久综合伊人一本| 98午夜经典影视| 日本一本a高清免费不卡| 成人黄色片网站| 亚洲免费人成在线视频观看| 中文字幕亚洲在线| 亚洲大尺度美女在线| 国产成人av在线| 亚洲精品videossex少妇|