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

微信亿级在线点赞体系,用Redis怎样实现?

发布时间:2019-12-07 02:56:56 所属栏目:编程 来源:站长网
导读:副问题#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, 

(编辑:湖南网)

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

热点阅读