用户点赞
每篇文章使用一个 Set 保存点赞用户编号,让同一用户重复点赞不增加数量。
数据结构
键 demo:likes:article:a1001,Set 成员示例:u1001、u1002。
数据映射
成员直接读取为 List<String>,不需要实体。Set 不保证顺序;SISMEMBER 返回的 RESULT 为 0 或 1。
Mapper
ArticleLikeMapper.java
package com.example.redis;
import java.util.List;
import net.hasor.dbvisitor.mapper.Delete;
import net.hasor.dbvisitor.mapper.Insert;
import net.hasor.dbvisitor.mapper.Param;
import net.hasor.dbvisitor.mapper.Query;
import net.hasor.dbvisitor.mapper.SimpleMapper;
@SimpleMapper
public interface ArticleLikeMapper {
@Insert("SADD #{key} #{userId}")
int like(@Param("key") String key, @Param("userId") String userId);
@Delete("SREM #{key} #{userId}")
int unlike(@Param("key") String key, @Param("userId") String userId);
@Query("SISMEMBER #{key} #{userId}")
long contains(@Param("key") String key, @Param("userId") String userId);
@Query("SCARD #{key}")
long count(@Param("key") String key);
@Query("SMEMBERS #{key}")
List<String> users(@Param("key") String key);
}