新入職的妹子問我Redis是如何實現點讚、取消點讚的?

2021-01-12 計算機java編程

基於 SpringCloud, 用戶發起點讚、取消點讚後先存入 Redis 中,再每隔兩小時從 Redis 讀取點讚數據寫入資料庫中做持久化存儲。

點讚功能在很多系統中都有,但別看功能小,想要做好需要考慮的東西還挺多的。

點讚、取消點讚是高頻次的操作,若每次都讀寫資料庫,大量的操作會影響資料庫性能,所以需要做緩存。

至於多久從 Redis 取一次數據存到資料庫中,根據項目的實際情況定吧,我是暫時設了兩個小時。

項目需求需要查看都誰點讚了,所以要存儲每個點讚的點讚人、被點讚人,不能簡單地做計數。

文章分四部分介紹:

Redis 緩存設計及實現資料庫設計資料庫操作開啟定時任務持久化存儲到資料庫一、Redis 緩存設計及實現

1.1 Redis 安裝及運行

Redis 安裝請自行查閱相關教程。

說下Docker 安裝運行 Redis

dockerrun-d-p6379:6379redis:4.0.8

如果已經安裝了 Redis,打開命令行,輸入啟動 Redis 的命令

redis-server

1.2 Redis 與 SpringBoot 項目的整合

1.在 pom.xml 中引入依賴

2.在啟動類上添加注釋 @EnableCaching

3.編寫 Redis 配置類 RedisConfig

至此 Redis 在 SpringBoot 項目中的配置已經完成,可以愉快的使用了。

1.3 Redis 的數據結構類型

Redis 可以存儲鍵與5種不同數據結構類型之間的映射,這5種數據結構類型分別為String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。

下面來對這5種數據結構類型作簡單的介紹:

1.4 點讚數據在 Redis 中的存儲格式

用 Redis 存儲兩種數據,一種是記錄點讚人、被點讚人、點讚狀態的數據,另一種是每個用戶被點讚了多少次,做個簡單的計數。

由於需要記錄點讚人和被點讚人,還有點讚狀態(點讚、取消點讚),還要固定時間間隔取出 Redis 中所有點讚數據,分析了下 Redis 數據格式中 Hash 最合適。

因為 Hash 裡的數據都是存在一個鍵裡,可以通過這個鍵很方便的把所有的點讚數據都取出。這個鍵裡面的數據還可以存成鍵值對的形式,方便存入點讚人、被點讚人和點讚狀態。

設點讚人的 id 為 likedPostId,被點讚人的 id 為 likedUserId ,點讚時狀態為 1,取消點讚狀態為 0。將點讚人 id 和被點讚人 id 作為鍵,兩個 id 中間用 :: 隔開,點讚狀態作為值。

所以如果用戶點讚,存儲的鍵為:likedUserId::likedPostId,對應的值為 1 。取消點讚,存儲的鍵為:likedUserId::likedPostId,對應的值為 0 。取數據時把鍵用 :: 切開就得到了兩個id,也很方便。

在可視化工具 RDM 中看到的是這樣子

1.5 操作 Redis

將具體操作方法封裝到了 RedisService 接口裡

RedisService.java

實現類 RedisServiceImpl.java

用到的工具類和枚舉類

RedisKeyUtils, 用於根據一定規則生成 key

LikedStatusEnum 用戶點讚狀態的枚舉類

package com.solo.coderiver.user.enums;

二、資料庫設計

資料庫表中至少要包含三個欄位:被點讚用戶id,點讚用戶id,點讚狀態。再加上主鍵id,創建時間,修改時間就行了。

建表語句

對應的對象 UserLike

三、資料庫操作

操作資料庫同樣封裝在接口中

LikedService

LikedServiceImpl 實現類

資料庫的操作就這些,主要還是增刪改查。

四、開啟定時任務持久化存儲到資料庫

定時任務 Quartz 很強大,就用它了。

Quartz 使用步驟:

添加依賴

2.編寫配置文件

3.編寫執行任務的類繼承自 QuartzJobBean

在定時任務中直接調用 LikedService 封裝的方法完成數據同步。

以上就是點讚功能的設計與實現,不足之處還請各位大佬多多指教。

如有更好的實現方案歡迎在評論區交流…

相關焦點

  • Redis是如何實現點讚、取消點讚的?
    get個新技能:redis實現自動補全利用 Redis 實現「附近的人」功能!我是如何用redis做實時訂閱推送的?正文:本文基於 SpringCloud, 用戶發起點讚、取消點讚後先存入 Redis 中,再每隔兩小時從 Redis 讀取點讚數據寫入資料庫中做持久化存儲。
  • Redis面試:八問字典內部構造與rehash,給我整懵了
    就是可以需要實際的數據結構是實現這個功能。抽象,意味著它這是實現功能的標準,凡是能夠完成這些功能的都可以是其實現。redis的字典字典作為一種數據結構內置在很多高級程式語言裡面,但是redis是基於C語言進行開發的,所以沒有內置這種數據結構,redis只能構建自己的字典實現。
  • 抖音取消贊對方知道嗎 點完贊再取消有什麼影響會留痕跡嗎
    18183首頁 抖音取消贊對方知道嗎 點完贊再取消有什麼影響會留痕跡嗎 抖音取消贊對方知道嗎 點完贊再取消有什麼影響會留痕跡嗎
  • Facebook宣布重新設計品牌專頁:簡化布局,取消點讚
    Facebook宣布重新設計品牌專頁:簡化布局,取消點讚2021-01-08 13:58出處/作者:IT之家整合編輯:佚名責任編輯:lishiye1   據報導,Facebook 近日宣布,面向創作者和公眾人物的 Facebook 品牌專頁體驗將會有重大升級,其中包括全新的視覺和外觀、導航設計
  • 這是我見過最還原的富江仿妝,原作者都點讚,妹子是中國人
    而今天想和大家分享的,是我個人見過的最還原的富江仿妝,效果真的太驚豔了,妹子的臉型、氣質都和富江很搭配,其還原甚至得到了原作者的「認證」,給她點讚,而且,這位妹子還是中國人哦。    這位妹子的暱稱叫周仙仙耶,看她自己在社交媒體上公開的信息,目前是中國美術學院在讀,這所學校是浙江省與教育部、文化部共建的高校,我看了下往年的收分還挺高的,或許這位妹子將來也會走上藝術道路。
  • 延慶區各大酒店收到千餘桌取消婚宴訂單,為這些「新人」點讚!
    「結婚」是人生中的「頭等大事」但在疫情期間一邊是自己的幸福婚禮一邊是大家的生命健康換做是你,會如何選擇呢?近日延慶準備辦婚宴的劉先生發表了一條朋友圈引來了親朋好友的紛紛點讚……「真正的幸福建立在安全之上!」
  • 抖音免費點讚軟體 抖音點讚怎麼刷出來的
    抖音免費點讚軟體有沒有呢,這是很多有2這方面需求的小夥伴們都關心的問題。就讓小編帶大家了解抖音點讚怎麼刷出來的吧~
  • 如何讓自己的QQ點讚數增加 刷贊 贊
    手機版QQ,個人界面都有點讚數,標示著魅力值,有的人的點讚數為好幾萬,為啥那麼高,肯定是刷的,那如何刷贊呢,其實很簡單。第一, 打開QQ,下面三個模塊,消息,聯繫人,動態。點動態。第二,上面也出現三個模塊,好友動態,附近,興趣部落。注意是上面的三個模塊,點附近。
  • 「關注 點讚 評論」的英文表達
    我應該關注那個英語講得非常好的老師。(2) unfollow 取消關注The video is horrible so I click the unfollow button.這個視頻非常糟糕,所以我點擊了取消關注按鈕。
  • 抖音點讚 抖音點讚1萬是怎麼弄的
    抖音點讚有沒有呢,熱度是什麼?熱度是點讚,點讚從哪來?從你的內容中來。一起來看看抖音點讚1萬是怎麼弄的吧~
  • 京東點讚兼職 手工點讚兼職
    京東點讚兼職 手工點讚兼職讓你一個關鍵詞形容2020,疫情是否合適?2020很多人失業2020很多人想創業灰姑娘眾創空間想要幫助更多的人創業但是因為疫情都沒能實現網際網路創業門檻相對較高,如果不實地入孵學習,真得很難學到精髓,學不到精髓就很難賺到錢,賺不到錢這違背了灰姑娘眾創空間創立的宗旨!
  • 【設計資訊】Facebook宣布重新設計品牌專頁:簡化布局,取消點讚
    值得注意的是,全新的品牌專頁還將取消「點讚」按鈕,轉而專注於粉絲數,從而更直接地衡量某個品牌專頁能觸達多少粉絲。去年夏季就有媒體報導了Facebook將全面升級品牌專頁的消息。當時,Facebook開始測試品牌專頁的新界面,參與測試的包括演員、作家和創作者,以及一些商業性的英文品牌專頁。
  • 如何在Ubuntu 18.04上安裝和配置Redis
    這就是在本教程中,我們將向您展示如何在Ubuntu 18.04上安裝Redis。為什麼要使用Redis?如上所述,Redis的性能和卓越功能使其比傳統資料庫更好。  數器-Redis允許簡單地創建和實現計數器,而無需讀取數據或更新資料庫的方案。Redis中的計數器將保持一致  發布和訂閱–用戶可以使用「發布/訂閱」範式輕鬆分發數據如何在Ubuntu上安裝Redis?Redis存在於Ubuntu的官方軟體包存儲庫中。
  • 抖音怎麼看誰給自己點讚 如何查看粉絲和點讚數
    抖音裡面怎麼知道誰給自己點過贊呢?今天小編給大家帶來的是如何查看粉絲和點讚數的解決辦法哦!想知道的小夥伴就和小編一起來看看吧!
  • 吉利默不作聲取消「回字紋」標!換上新標「極星」獲18個國家點讚
    吉利默不作聲取消「回字紋」標!換上新標「極星」獲18個國家點讚在如今的國內汽車市場,說到咱們的自主品牌,那吉利汽車肯定是一個繞不過去的話題了,因為在最近幾年,吉利品牌的進步那是有目共睹的,旗下有著很多走俏的車型,且自打吉利收購沃爾沃品牌之後,其造車工藝也是更上一層樓,推出來的車型在品控和產品力上面已經是有著質的飛躍,而在之後它們兩家也是終於推出一款結合體的豪華汽車品牌,這個全新的豪華品牌就是曾經沃爾沃以高性能著稱的
  • 抖音點讚宣傳圖片 抖音刷點讚付費
    抖音點讚宣傳圖片怎麼樣呢,這是很多有這方面需求的小夥伴們都關心的問題。就讓小編帶大家了解抖音刷點讚付費吧~
  • 周揚青點讚羅志祥動態後又取消 一時間讓網友徹底摸不清頭腦
    周揚青點讚羅志祥動態後又取消 一時間讓網友徹底摸不清頭腦時間:2020-05-08 18:52   來源:網易娛樂   責任編輯:凌君 川北在線核心提示:原標題:周揚青點讚羅志祥動態後又取消 一時間讓網友徹底摸不清頭腦 因被曝與多名女性關係混亂,已經沉默一段時間的羅志祥,這兩天在社交平臺上回復粉絲的關心,先後留言謝謝你們
  • Instagram試水隱藏點讚功能:你能接受一個不能點讚的網絡社交世界嗎?
    Facebook的用戶增長和數據科學團隊推出過「取消點讚能提升用戶發帖頻率」的預測。諮詢公司Trust Insights的調查顯示,去年1月1號到6月29號以來,Instagram用戶的平均參與度下降了18%。
  • 「我要為你們的精緻服務點讚」
    12月18日,泰州市姜堰區政務服務中心新大廳正式啟用。大廳內安裝了政務服務一體機、人社自助查詢機等,為辦事群眾提供多項自助業務辦理,實現政務服務24小時「不打烊」。新大廳還增設綜合窗口、全科窗口等,增添便民服務箱、愛心雨傘、紙杯、口罩等物品,讓辦事群眾享受一體化、人性化、規範化的服務體驗。「綜合窗口真方便,原本很複雜的手續,不到半個小時就搞定了。這樣的速度出乎意料,我要為你們的精緻服務點讚!」在姜堰行政審批局投資建設科窗口前,泰州鴻宇塑料製品廠負責人錢亞明開心地說。
  • FB 的盛衰史,成也「點讚」、敗也「點讚」
    此時 Manuel 還在手動管理他的社區,並把這種投票按鈕看作一種可能的解決方案:我需要一個機制來處理大量的圖片和文字內容。一個一個去讀去看真的太累了,要為首頁和郵件推送找到最好的內容,必須給用戶一個簡單明了的投票機制。我想採取用戶和管理員篩選相結合的方式,由用戶選出好的內容,再由管理員最終決定。