校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 基于redis實現的點贊功能設計思路詳解

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

熱門標簽:最簡單的百度地圖標注 地圖標注如何即時生效 百度商家地圖標注怎么做 竹間科技AI電銷機器人 西藏教育智能外呼系統價格 小紅書怎么地圖標注店 玄武湖地圖標注 太原營銷外呼系統 地圖標注費用

前言

點贊其實是一個很有意思的功能。基本的設計思路有大致兩種, 一種自然是用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進行分表

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

您可能感興趣的文章:
  • SpringBoot+Vue+Redis實現單點登錄(一處登錄另一處退出登錄)
  • SpringBoot Redis配置Fastjson進行序列化和反序列化實現
  • SpringBoot集成Redisson實現分布式鎖的方法示例
  • springboot整合redis集群過程解析
  • springboot +redis 實現點贊、瀏覽、收藏、評論等數量的增減操作

標簽:廣東 景德鎮 澳門 香港 林芝 唐山 揚州 贛州

巨人網絡通訊聲明:本文標題《基于redis實現的點贊功能設計思路詳解》,本文關鍵詞  基于,redis,實現,的,點贊,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《基于redis實現的點贊功能設計思路詳解》相關的同類信息!
  • 本頁收集關于基于redis實現的點贊功能設計思路詳解的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    色av成人天堂桃色av| 亚洲天堂中文字幕| 欧美视频在线播放| 亚洲成人在线网站| 国产精品理伦片| 91精品国产一区二区人妖| 在线观看日韩av先锋影音电影院| 国产精品白丝av| 久久精品99国产精品日本| 亚洲一区二区三区视频在线 | 欧美色区777第一页| 成人av在线一区二区| 国产一区二区按摩在线观看| 老司机免费视频一区二区三区| 污片在线观看一区二区| 又紧又大又爽精品一区二区| 国产精品久久久久久久久动漫 | 国产尤物一区二区在线 | 亚洲永久免费av| 国产日韩欧美不卡| 久久婷婷色综合| 久久蜜桃av一区二区天堂| 国产精品996| 不卡视频一二三四| 国产99久久久国产精品免费看| 精品一区二区三区香蕉蜜桃| 久热成人在线视频| 国产成人99久久亚洲综合精品| 国产成人一区在线| 波多野结衣在线aⅴ中文字幕不卡| 成人在线视频一区| 色综合欧美在线视频区| 欧美日韩精品一区二区三区四区| 91丝袜国产在线播放| 欧美性猛交xxxx黑人交| 91精品在线麻豆| 国产亚洲成aⅴ人片在线观看| 国产精品狼人久久影院观看方式| www国产成人免费观看视频 深夜成人网| 欧美精品乱码久久久久久| 91精品国产色综合久久久蜜香臀| 福利视频网站一区二区三区| 国产福利不卡视频| 成人av影院在线| av在线不卡网| 欧美高清视频一二三区| 久久精品人人做人人综合 | 蜜桃av噜噜一区| 韩国精品主播一区二区在线观看| 91亚洲精品久久久蜜桃网站 | 欧美视频第二页| 欧美变态tickle挠乳网站| 精品国产乱码久久久久久蜜臀| 国产精品电影一区二区三区| 亚洲福利视频导航| 丰满白嫩尤物一区二区| 欧美午夜一区二区三区免费大片| 在线影视一区二区三区| 日韩精品中文字幕一区| 一区二区三区色| 国产精品一区二区无线| 欧美日韩国产不卡| 精品奇米国产一区二区三区| 国产网红主播福利一区二区| 国产精品毛片高清在线完整版| 亚洲一区精品在线| 不卡视频免费播放| 久久久久久久久久久久久夜| 亚洲1区2区3区4区| 91网站最新网址| 91精品国产欧美日韩| 久久久不卡网国产精品二区| 欧美a一区二区| 99精品久久久久久| 久久综合久久鬼色| 亚洲小说欧美激情另类| aa级大片欧美| 精品第一国产综合精品aⅴ| 中文字幕一区免费在线观看| 懂色一区二区三区免费观看| 26uuu精品一区二区| 精品在线亚洲视频| 日韩免费观看高清完整版在线观看| 久久众筹精品私拍模特| 亚洲成av人片在线观看无码| 在线欧美日韩国产| 夜夜亚洲天天久久| 欧美三级三级三级爽爽爽| 亚洲一区二区三区免费视频| 色偷偷久久人人79超碰人人澡| 久久色视频免费观看| 久久精品视频网| 国产精品剧情在线亚洲| 风间由美一区二区三区在线观看| 国产亲近乱来精品视频| 成人爽a毛片一区二区免费| 国产精品国产自产拍高清av王其 | 欧美日韩国产一区二区三区地区| 国产精品美女久久久久久久 | 国产不卡在线视频| 日韩精品专区在线影院观看 | 91玉足脚交白嫩脚丫在线播放| 中文字幕av资源一区| 99亚偷拍自图区亚洲| 国产女人aaa级久久久级| 亚洲成人7777| 日韩免费视频线观看| 精品一区精品二区高清| 精品美女在线播放| 国内一区二区在线| 国产精品理论片在线观看| 91麻豆精品视频| 亚洲一区欧美一区| 亚洲精品一区二区三区在线观看| 婷婷综合在线观看| 91麻豆国产在线观看| 亚洲成人一二三| wwww国产精品欧美| 国产精品一级二级三级| 亚洲欧美一区二区在线观看| 欧美日本国产视频| 日韩av一区二区在线影视| 国产亚洲精品免费| 91国偷自产一区二区开放时间 | 欧美国产亚洲另类动漫| 视频在线观看91| 久久久五月婷婷| 日本乱人伦aⅴ精品| 久久国产综合精品| 日韩一区二区三区电影在线观看| 老色鬼精品视频在线观看播放| 国产精品欧美极品| 69久久夜色精品国产69蝌蚪网| 国产成人福利片| 午夜一区二区三区在线观看| 国产精品久久久久久久久久免费看| 欧美四级电影网| 成人自拍视频在线观看| 日韩不卡手机在线v区| 国产亚洲精品超碰| 欧美日韩卡一卡二| 图片区小说区国产精品视频| 中文字幕一区二区三区视频 | 欧美www视频| 欧美性猛片xxxx免费看久爱| 床上的激情91.| 精品一区二区在线免费观看| 一区二区三区在线播放| 欧美韩国日本不卡| 2021中文字幕一区亚洲| 欧美一区二区久久| 欧美日韩国产高清一区| 亚洲激情欧美激情| 欧美韩国一区二区| 国产日产欧产精品推荐色| 4hu四虎永久在线影院成人| 色噜噜狠狠一区二区三区果冻| 国产成人丝袜美腿| 国产精一区二区三区| 激情综合五月天| 国产区在线观看成人精品| 精品国产免费人成电影在线观看四季| 日本电影亚洲天堂一区| 波多野结衣中文字幕一区| 国产乱码字幕精品高清av| 亚欧色一区w666天堂| 美女脱光内衣内裤视频久久网站 | 国产精品你懂的在线欣赏| 欧美精品一区二区三区在线| 欧美日韩国产小视频| 欧美在线一区二区| 色婷婷av一区| 欧美午夜理伦三级在线观看| 色av一区二区| 欧美日韩高清在线播放| 国产成人av电影| 国产ts人妖一区二区| 不卡的看片网站| 东方aⅴ免费观看久久av| 成人深夜福利app| 91丨porny丨国产| 91福利国产精品| 欧美日韩国产123区| 欧美日韩一区二区电影| 欧美日韩综合色| 欧美日韩一区三区四区| 日韩欧美资源站| 国产无人区一区二区三区| 欧美va亚洲va国产综合| 国产日韩高清在线| 久久精品水蜜桃av综合天堂| 一色桃子久久精品亚洲| 日日夜夜一区二区| 亚洲成a人在线观看| 亚洲一区二区在线免费看| 日韩在线卡一卡二| 国产精品一区二区久激情瑜伽| 91麻豆蜜桃一区二区三区| voyeur盗摄精品| 欧美一区二区三区人|