设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2019-12-06 01:43 所属栏目:115 来源:站长网
导读:CursorMap.EntryObject,Objectcursor=redisTemplate.opsForHash().scan(RedisKeyUtils.MAP_KEY_USER_LIKED_COUNT,ScanOptions.NONE); ListLikedCountDTOlist=newArrayList(); while(cursor.hasNext()){ Map.EntryOb

        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, 

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读