纪录下自己的代码,希望各位大佬指正
zset实现:粉丝/关注数量、取消关注、列表等功能
redis key:
粉丝列表:redis🔑fansList:id
关注列表:redis🔑attentionList:id
/**
* 获取粉丝、关注数量
* @param request
* @return
*/
@Override
public AjaxResult getFansAndAttentionNumsRedis(FansAndAttentionRequest request) {
String fansKey = "redis:key:fansList:"+request.getUserId();
String attentionKey = "redis:key:attentionList:"+request.getUserId();
//粉丝
Integer fansNum = redisCache.zCount(fansKey).intValue();
//关注
Integer attentionNum = redisCache.zCount(attentionKey).intValue();
FansAndAttentionResponse fansAndAttentionResponse = new FansAndAttentionResponse();
fansAndAttentionResponse.setFansNums(fansNum);
fansAndAttentionResponse.setAttentionNums(attentionNum);
return AjaxResult.success(fansAndAttentionResponse);
}
/**
* 新增关注
* @param request
* @return
*/
@Override
public AjaxResult addAttentionRedis(FansAndAttentionRequest request) {
//当前用户关注key
String attentionKey = "redis:key:attentionList:"+request.getUserId();
//被关注人粉丝key
String fansKey = "redis:key:ansList:"+request.getAttentionId();
//最多关注数量
Set<String> fansScore = redisCache.zRange(attentionKey, -1L, -1L);
Long fansMaxScore = 0L;
if (!fansScore.isEmpty()){
fansMaxScore = Long.valueOf(fansScore.iterator().next());
}
redisCache.setZSet(attentionKey, request.getAttentionId().toString(), fansMaxScore+1L);
//粉丝列表新增
Long attentionMaxScore = 0L;
Set<String> attentionScore = redisCache.zRange(attentionKey, -1L, -1L);
if (!attentionScore.isEmpty()){
attentionMaxScore = Long.valueOf(attentionScore.iterator().next());
}
redisCache.setZSet(fansKey, request.getUserId().toString(),attentionMaxScore+1L);
return AjaxResult.success();
}
/**
* 取消关注
* @param request
* @return
*/
@Override
public AjaxResult cancelAttentionRedis(FansAndAttentionRequest request) {
//被关注人key
String attentionKey = "redis:key:attentionList:"+request.getUserId();
//关注人key
String fansKey = "redis:key:fansList:"+request.getAttentionId();
//移除关注用户
redisCache.removeZsetVal(attentionKey, request.getAttentionId().toString());
//移除粉丝
redisCache.removeZsetVal(fansKey, request.getUserId().toString());
return AjaxResult.success();
}
/**
* 获取关注、粉丝列表
* @param request
* @return
*/
@Override
public AjaxResult getUserAttentionOrFansListRedis(FansAndAttentionRequest request) {
//关注=1,粉丝=2
String redisKey = "";
if (null == request.getType() || 1 == request.getType()) {
redisKey = "redis:key:attentionList:"+request.getUserId();
} else {
redisKey = "redis:key:fansList:"+request.getUserId();
}
//查询带入数据
List<UserAttentionFansDO> userAttentionFansList = new ArrayList<>();
//分页范围
Long minNum = Long.valueOf((request.getPageNum() - 1L) * request.getPageSize());
Long maxNum = Long.valueOf(request.getPageNum() * request.getPageSize());
Long total = redisCache.zCount(redisKey);
//获取redis关注、粉丝列表
Set<ZSetOperations.TypedTuple> fansSet = redisCache.getzSetRangeByScoreWithScores(redisKey, minNum, maxNum);
if (!fansSet.isEmpty()){
for ( ZSetOperations.TypedTuple zt : fansSet) {
UserAttentionFansDO userAttentionFansDO = new UserAttentionFansDO();
userAttentionFansDO.setAttentionId(Long.valueOf(zt.getValue().toString()));
userAttentionFansList.add(userAttentionFansDO);
}
}
//获取关注列表
List<FansAndAttentionResponse> fansAndAttentionResponseList = new ArrayList();
if (!userAttentionFansList.isEmpty()){
fansAndAttentionResponseList = newlifeUserService.getUserAttentionList(userAttentionFansList);
}
//返回数据
FansAndAttentionReturnResponse fansAndAttentionReturnResponse = new FansAndAttentionReturnResponse();
fansAndAttentionReturnResponse.setRows(fansAndAttentionResponseList);
fansAndAttentionReturnResponse.setTotal(total);
return AjaxResult.success(fansAndAttentionReturnResponse);
}