ew的小天地 科技 相互喜欢、单喜欢、粉丝 数量统计功能

相互喜欢、单喜欢、粉丝 数量统计功能

API

/**

* 相互喜欢的数量

*

* @return

*/

Long queryMutualLikeCount(Long userId);

/**

* 喜欢数

*

* @return

*/

Long queryLikeCount(Long userId);

/**

* 粉丝数

*

* @return

*/

Long queryFanCount(Long userId);

===================================================

API IMPL

/**

* 查询相互喜欢数

* 实现2种方式:第一种:查询redis,第二种:查询MongoDB

* 建议:优先使用redis查询,其次考虑使用Mongodb

*

* @param userId

* @return

*/

@Override

public Long queryMutualLikeCount(Long userId) {

//查询我的喜欢列表

List<Long> likeUserIdList = this.queryLikeList(userId);

Long count = 0L;

for (Long likeUserId : likeUserIdList) {

String redisKey = this.getLikeRedisKey(likeUserId);

String hashKey = String.valueOf(userId);

//“别人” 的喜欢列表中是否有 “我”

if (this.redisTemplate.opsForHash().hasKey(redisKey, hashKey)) {

count++;

}

}

return count;

}

@Override

public Long queryLikeCount(Long userId) {

String redisKey = this.getLikeRedisKey(userId);

return this.redisTemplate.opsForHash().size(redisKey);

}

@Override

public Long queryFanCount(Long userId) {

//无法通过redis查询完成,必须从Mongodb中查询

Query query = Query.query(Criteria.where("likeUserId").is(userId));

return this.mongoTemplate.count(query, UserLike.class);

}

======================================================

测试

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)

@SpringBootTest

public class TestUserLikeApiImpl {

@Autowired

private UserLikeApi userLikeApi;

@Test

public void testQueryCounts(){

System.out.println(this.userLikeApi.queryEachLikeCount(1L));

System.out.println(this.userLikeApi.queryFanCount(1L));

System.out.println(this.userLikeApi.queryLikeCount(1L));

}

}

返回顶部