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

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

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

        Cursor<Map.Entry<Object, Object>> cursor = redisTemplate.opsForHash().scan(RedisKeyUtils.MAP_KEY_USER_LIKED_COUNT, ScanOptions.NONE); 

        List<LikedCountDTO> list = new ArrayList<>(); 

        while (cursor.hasNext()){ 

            Map.Entry<Object, Object> map = cursor.next(); 

            //将点赞数量存储在 LikedCountDT 

            String key = (String)map.getKey(); 

            LikedCountDTO dto = new LikedCountDTO(key, (Integer) map.getValue()); 

            list.add(dto); 

            //从Redis中删除这条记录 

            redisTemplate.opsForHash().delete(RedisKeyUtils.MAP_KEY_USER_LIKED_COUNT, key); 

        } 

        return list; 

    } 

③用到的工具类和枚举类

RedisKeyUtils,用于根据一定规则生成 key:

public class RedisKeyUtils { 

 

    //保存用户点赞数据的key 

    public static final String MAP_KEY_USER_LIKED = "MAP_USER_LIKED"; 

    //保存用户被点赞数量的key 

    public static final String MAP_KEY_USER_LIKED_COUNT = "MAP_USER_LIKED_COUNT"; 

 

    /** 

     * 拼接被点赞的用户id和点赞的人的id作为key。格式 222222::333333 

     * @param likedUserId 被点赞的人id 

     * @param likedPostId 点赞的人的id 

     * @return 

     */ 

    public static String getLikedKey(String likedUserId, String likedPostId){ 

        StringBuilder builder = new StringBuilder(); 

        builder.append(likedUserId); 

        builder.append("::"); 

        builder.append(likedPostId); 

        return builder.toString(); 

    } 

LikedStatusEnum 用户点赞状态的枚举类:

package com.solo.coderiver.user.enums; 

 

import lombok.Getter; 

 

/** 

 * 用户点赞的状态 

 */ 

@Getter 

public enum LikedStatusEnum { 

    LIKE(1, "点赞"), 

    UNLIKE(0, "取消点赞/未点赞"), 

    ; 

 

    private Integer code; 

 

    private String msg; 

 

    LikedStatusEnum(Integer code, String msg) { 

        this.code = code; 

        this.msg = msg; 

    } 

数据库设计

数据库表中至少要包含三个字段:被点赞用户 id,点赞用户 id,点赞状态。再加上主键 id,创建时间,修改时间就行了。

建表语句:

create table `user_like`( 

    `id` int not null auto_increment, 

(编辑:威海站长网)

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

热点阅读