日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

点赞功能,用 MySQL?还是 Redis!

發(fā)布時間:2025/3/21 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 点赞功能,用 MySQL?还是 Redis! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點贊功能是目前app開發(fā)基本的功能

今天我們就來聊聊 點贊、評論、收藏等這些場景的db數(shù)據(jù)庫設(shè)計問題,

1. 我們先來看看場景的需求:

  • 顯示點贊數(shù)量

  • 判斷用戶是否點過贊,用于去重,必須的判斷

  • 顯示個人點贊列表,一般在用戶中心

  • 顯示文章點贊列表

我們先看一下頭條和微博的例子

這兩個都是具有頂級流量的,后端肯定有復(fù)雜的架構(gòu),我們今天只談大眾化的方案。

2.1 mysql方案

mysql方案, 隨著nosql的流行,大數(shù)據(jù)的持續(xù)熱點,但是mysql仍然不可替代,對于大多數(shù)的中小項目,低于千萬級的數(shù)據(jù)量,采用mysql分表+cache,是完全可以勝任的,而且穩(wěn)定性是其他方案無可比擬的:

--?文章表create?table?post?{post_id?int(11)?NOT?NULL?AUTO_INCREMENT,......star_num?int(11)?COMMENT?'點贊數(shù)量'}--?用戶表create?table?user?{user_id?int(11)?NOT?NULL?AUTO_INCREMENT,......star_num?int(11)?COMMENT?'點贊數(shù)量'}--?點贊表create?table?star?{id?int(11)?NOT?NULL?AUTO_INCREMENT,post_id,user_id,......}

常用的查詢:

查詢用戶點贊過的文章?select post_id from star where user_id=?

查詢文章的點贊用戶?select user_id from star where post_id=?

點贊數(shù)量可以通過定時異步統(tǒng)計更新到post和user 表中。

數(shù)據(jù)量不大的時候,這種設(shè)計基本可以滿足需求了,

缺點:

數(shù)據(jù)量大時,一張表在查詢時壓力巨大,需要分表,而不論用post_id還是user_id來hash分表都與我們的需求有沖突,唯一的辦法就是做兩個表冗余。這增加了存儲空間和維護工作量,還可能有一致性問題。

2.2 redis方案

當數(shù)據(jù)量達到上億的量,上cache是必經(jīng)的階段,由于點贊這種動作很隨意,很多人看到大拇指就想點,所以數(shù)據(jù)量增長很快,數(shù)據(jù)規(guī)模上來后,對mysql讀寫都有很大的壓力,這時就要考慮memcache、redis進行存儲或cache。

為什么一般都選擇redis, redis作為流行的nosql,有著豐富的數(shù)據(jù)類型,可以適應(yīng)多個場景的需求。

采用redis有兩種用途,一種是storage,一種是純cache,需要+mysql一起。純cache就是把數(shù)據(jù)從mysql先寫入redis,用戶先讀cache,miss后再拉取MySQL,同時cache做同步。

多數(shù)場景二者是同時使用的,并不沖突。

下面說下redis作為storage的方案:

場景a :顯示點贊數(shù)量

在點贊的地方,只是顯示一個點贊數(shù)量,能區(qū)分用戶是否點贊過,一般用戶不關(guān)心這個列表,這個場景只要一個數(shù)字就可以了,當數(shù)量比較大時,一般顯示為"7k" ,"10W" 這樣。

以文章id為key

//以文章id=888為例 127.0.0.1:6379[2]>?set?star:tid:888?898?//設(shè)置點贊數(shù)量 OK 127.0.0.1:6379[2]>?incr?star:tid:888?//實現(xiàn)數(shù)量自增?(integer) 899

場景b:點贊去重,避免重復(fù)點贊

要實現(xiàn)這個需求,必須有文章點贊的uid列表,以uid為key場景c:一般在用戶中心,可以看到用戶自己的點贊列表

這個需求可以使用場景b的數(shù)據(jù)來實現(xiàn)。

場景d:文章的點贊列表,類似場景b,以文章id為key

//以文章id=888為例 127.0.0.1:6379[2]>?sadd?star:list:tid:888?123?456?789??//點贊uid列表?(integer) 3 127.0.0.1:6379[2]>?sismember?star:list:tid:888?456??//判斷是否點贊?(integer) 1

點贊的地方,如果點贊過顯示紅色,沒有則顯示黑白色,

今日頭條是沒有地方可以看到點贊列表的,而微博點進去,詳情頁可以看到點贊列表,但是只會顯示最近的幾十條,沒有分頁顯示。

如下圖,我選了一條熱點,擁有眾多粉絲的“豬豬”

可能有人覺得,點贊列表沒人關(guān)心,存儲又會浪費大量資源,不如不存!但是,這個數(shù)據(jù)是必須要有的。兩點:

  • 去重。點贊數(shù)可以不精確,但去重必須是精確的,

  • 另外一個社交產(chǎn)品,用戶行為的一點一滴都需要記錄,對于后續(xù)的用戶行為分析和數(shù)據(jù)挖掘都是有意義的。

上面使用string存儲的用戶點贊數(shù)量,除了string,還可以用hash來存儲,對文章id分塊,每100個存到一個hash,分別存入hash table,每個文章id為hash的一個key,value存儲點贊的用戶id,如果點贊用戶很多,避免id過多產(chǎn)生性能問題,可以單列出來,用sorted set結(jié)構(gòu)保存,熱點的畢竟是少數(shù)。

方案優(yōu)缺點比對

hash:使用了更少的全局key ,節(jié)省了內(nèi)存空間;但是也帶來了問題

如何根據(jù)文章id路由到對應(yīng)的hash?

查找一個用戶id是在hash還是set?存在不確定性

使用hash雖然節(jié)省了空間,但增加了復(fù)雜度,如何選擇就看個人需求了。

除此之外,你還有其他的方法嗎?

3. 數(shù)據(jù)一致性

redis作為storage使用時,一定要做好數(shù)據(jù)的持久化,必須開啟 rdb 和 aof,這會導(dǎo)致業(yè)務(wù)只能使用一半的機器內(nèi)存,所以要做好容量的監(jiān)控,及時擴容。

另外只要有數(shù)據(jù)copy,就會有一致性問題,這就是另外一個很重要的話題了。以后有時間再細聊吧!

寫在最后:把問題寫明白,真不是一件容易的事情,請大家多多關(guān)注,留言,謝謝!

前幾天寫的一篇文章,受到眾多同行的熱情回復(fù),能和眾多同行一起交流,深感榮幸!對于工程類問題,沒有標準的方案,一千個人有一千個方案,哪個最適合你只有你自己知道!期待你更好的思路和方法。

總結(jié)

以上是生活随笔為你收集整理的点赞功能,用 MySQL?还是 Redis!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本后进式猛烈xx00动态图 | 中文字幕1区 | 九九热色| 天堂资源站 | 潘金莲三级80分钟 | 天堂中文资源在线 | 黄色美女av| 日本成人性爱 | 一本久道久久综合 | 国产精品成人av性教育 | 色情毛片 | 精品一区二区欧美 | 欧美日韩免费高清一区色橹橹 | 91av爱爱| 91亚洲视频在线观看 | 国产精品久久久久久久久 | 国产精品swag| 日本捏奶吃奶的视频 | 美女露隐私网站 | 美日韩中文字幕 | 草莓视频一区二区三区 | 女生裸体无遮挡 | 日本一级淫片免费放 | 美国三级视频 | 96毛片| 国产美女一区二区三区 | 德国艳星videos极品hd | 麻豆久久久久久 | 日本一级片在线播放 | 办公室大战高跟丝袜秘书经理ol | 91亚色视频在线观看 | 日韩av区 | 国产女人18毛片水真多18 | 白浆av| 欧美无遮挡高潮床戏 | av在线小说| 国产精品视频在线免费观看 | 国产成人97精品免费看片 | 亚洲私人影院 | 丝袜人妖| 亚洲一区二区三区不卡视频 | 黄色免费在线观看视频 | 日韩成人精品 | 久操中文 | 日本免费一区二区三区四区五六区 | 看全色黄大色黄大片女一次牛 | 色播av | jizz俄罗斯| 少妇精品无码一区二区免费视频 | 中文字幕高清在线观看 | 91中文字幕网 | 欧洲色网| www狠狠干 | 日韩国产片 | 在线观看h视频 | 国产日韩欧美在线播放 | 欧美黄色小视频 | 偷拍老头老太高潮抽搐 | 亚洲一级片免费 | 狠狠艹av | 在线观看亚洲成人 | 人妻换人妻a片爽麻豆 | 国产天堂在线 | 国产精品99精品无码视亚 | 91精品国产高清91久久久久久 | 国产精品免费网站 | 91麻豆精品国产 | 国产精品第7页 | 午夜激情成人 | 日韩欧美aⅴ综合网站发布 国产成人一区二区三区小说 | 狠狠gao| 天天透天天操 | 亚洲精选在线观看 | 欧美精品999 | 大肉大捧一进一出好爽视频动漫 | 右手影院亚洲欧美 | 伦理片中文字幕 | 羞辱极度绿帽vk | 日韩精品久久久久 | 暴操白虎 | 亚洲免费中文 | 久久接色 | 国产一级做a爱免费视频 | 亚洲综合色av | 成人污 | 涩涩视频在线免费看 | av手机在线免费观看 | 特级精品毛片免费观看 | 久草视 | 亚洲精品网站在线观看 | 亚洲一区二区三区日韩 | 天堂а√在线中文在线 | 日本人妻换人妻毛片 | 亚洲精品一区二区三 | 中文字字幕 | 国产成人短视频在线观看 | 天堂中文网在线 | 欧美日韩激情网 | 午夜精品无码一区二区三区 |