加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

微信亿级在线点赞系统,用Redis如何实现?

发布时间:2019-12-07 15:58:26 所属栏目:MySql教程 来源:站长网
导读:副标题#e# 点赞功能大家都不会陌生,像微信这样的社交产品中都有,但别看功能小,想要做好需要考虑的东西还挺多的,如海量数据的分布式存储、分布式缓存、多 IDC 的数据一致性、访问路由到机房的算法等等。 图片来 Pexels 本文介绍大型社交平台点赞系统的设

    public UserLike(String likedUserId, String likedPostId, Integer status) { 

        this.likedUserId = likedUserId; 

        this.likedPostId = likedPostId; 

        this.status = status; 

    } 

数据库操作

操作数据库同样封装在接口中:

①LikedService

import com.solo.coderiver.user.dataobject.UserLike; 

import org.springframework.data.domain.Page; 

import org.springframework.data.domain.Pageable; 

 

import java.util.List; 

 

public interface LikedService { 

 

    /** 

     * 保存点赞记录 

     * @param userLike 

     * @return 

     */ 

    UserLike save(UserLike userLike); 

 

    /** 

     * 批量保存或修改 

     * @param list 

     */ 

    List<UserLike> saveAll(List<UserLike> list); 

 

 

    /** 

     * 根据被点赞人的id查询点赞列表(即查询都谁给这个人点赞过) 

     * @param likedUserId 被点赞人的id 

     * @param pageable 

     * @return 

     */ 

    Page<UserLike> getLikedListByLikedUserId(String likedUserId, Pageable pageable); 

 

    /** 

     * 根据点赞人的id查询点赞列表(即查询这个人都给谁点赞过) 

     * @param likedPostId 

     * @param pageable 

     * @return 

     */ 

    Page<UserLike> getLikedListByLikedPostId(String likedPostId, Pageable pageable); 

 

    /** 

     * 通过被点赞人和点赞人id查询是否存在点赞记录 

     * @param likedUserId 

     * @param likedPostId 

     * @return 

     */ 

    UserLike getByLikedUserIdAndLikedPostId(String likedUserId, String likedPostId); 

 

    /** 

     * 将Redis里的点赞数据存入数据库中 

     */ 

    void transLikedFromRedis2DB(); 

 

    /** 

     * 将Redis中的点赞数量数据存入数据库 

     */ 

    void transLikedCountFromRedis2DB(); 

 

②LikedServiceImpl 实现类

import com.solo.coderiver.user.dataobject.UserInfo; 

import com.solo.coderiver.user.dataobject.UserLike; 

import com.solo.coderiver.user.dto.LikedCountDTO; 

import com.solo.coderiver.user.enums.LikedStatusEnum; 

import com.solo.coderiver.user.repository.UserLikeRepository; 

import com.solo.coderiver.user.service.LikedService; 

import com.solo.coderiver.user.service.RedisService; 

import com.solo.coderiver.user.service.UserService; 

import lombok.extern.slf4j.Slf4j; 

import org.springframework.beans.factory.annotation.Autowired; 

import org.springframework.data.domain.Page; 

import org.springframework.data.domain.Pageable; 

import org.springframework.stereotype.Service; 

import org.springframework.transaction.annotation.Transactional; 

 

import java.util.List; 

 

@Service 

@Slf4j 

public class LikedServiceImpl implements LikedService { 

 

    @Autowired 

    UserLikeRepository likeRepository; 

 

    @Autowired 

    RedisService redisService; 

 

    @Autowired 

    UserService userService; 

 

    @Override 

    @Transactional 

    public UserLike save(UserLike userLike) { 

        return likeRepository.save(userLike); 

    } 

 

    @Override 

    @Transactional 

    public List<UserLike> saveAll(List<UserLike> list) { 

        return likeRepository.saveAll(list); 

    } 

 

    @Override 

    public Page<UserLike> getLikedListByLikedUserId(String likedUserId, Pageable pageable) { 

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读