1.业务背景
因公司业务需要,要实现某段时间内的实时榜单。如果实时count mysql数据库,用户流量一大,数据库肯定承受不住,而恰好redis提供了有序集合这个数据类型。
2.代码实践
1.Redis工具类
@Component public class RedisComponent { @Autowired private StringRedisTemplate redisTemplate; /** * 添加一个元素, zset与set最大的区别就是每个元素都有一个score,因此有个排序的辅助功能; zadd * * @param key * @param value * @param score */ public void add(String key, String value, double score) { redisTemplate.opsForZSet().add(key, value, score); } /** * 删除元素 zrem * * @param key * @param value */ public void remove(String key, String value) { redisTemplate.opsForZSet().remove(key, value); } /** * score的增加or减少 zincrby * * @param key * @param value * @param score */ public Double incrScore(String key, String value, double score) { return redisTemplate.opsForZSet().incrementScore(key, value, score); } /** * 查询value对应的score zscore * * @param key * @param value * @return */ public Double score(String key, String value) { return redisTemplate.opsForZSet().score(key, value); } /** * 判断value在zset中的排名 zrank * * 积分小的在前面 * * @param key * @param value * @return */ public Long rank(String key, String value) { return redisTemplat