redis排行榜新老数据,我没弄清楚

 public ResultVo order(Integer seasonId){
//获取赛季排行榜的所有数据1) List<OrderVo> orderVos = tArenaScoreMapper.selectAll(seasonId);
//添加到redis中
Set<ZSetOperations.TypedTuple<String>> tuples = new HashSet<>();
        for (OrderVo o:orderVos) {
            DefaultTypedTuple<String> tuple = new DefaultTypedTuple<String>(o.getUsername(),Double.valueOf(o.getScore()));
            tuples.add(tuple);
        }
        Long num = redisTemplate.opsForZSet().add(String.valueOf(seasonId), tuples);

//从redis中取出2) return redisTemplate.opsForZSet().reverseRangeWithScores; 
}

我的order方法是只查询显示,积分更新不在我这里操作。

不解的是:
1.所有用户积分不变时,方法被调用,我还是会执行(1)操作,然后去添加redis,这样mysql数据跟redis数据是一样的,添加redis时,新老数据怎么替换?是重新全部覆盖替换呢?还是redis会自动判断数据相等不替换呢?

2.有的用户积分变时,方法被调用,我执行(1)操作,然后去添加redis,这样mysql数据跟redis数据是不一样的,添加redis时,新老数据怎么替换?

或者说这种查询式的redis用法方案是错的?因为我好像每次都去请求数据库,并且添加到redis中

使用缓存的三部曲:

  • 根据key判断缓存内是否有数据
  • 如果有,则直接取数据返回
  • 如果没有数据,从数据库取数据,然后在放入缓存

更多关于Redis的知识点,设计与优化方案 可以参考 https://github.com/yanghaiji/Advanced-books Java 核心技术,并发设计模式,数据结构与算法,SpringBoot ,OAuth2.0源码分析,Mysql进阶篇,Git 高级操作,Netty 教程,Redis设计与实战,Flink入门教程,Kafka入门与架构分析,Linux入门与Shell编程,希望更多的小伙伴一起加入共同维护,持续更新中! - GitHub - yanghaiji/Advanced-books: Java 核心技术,并发设计模式,数据结构与算法,SpringBoot ,OAuth2.0源码分析,Mysql进阶篇,Git 高级操作,Netty 教程,Redis设计与实战,Flink入门教程,Kafka入门与架构分析,Linux入门与Shell编程,希望更多的小伙伴一起加入共同维护,持续更新中! https://github.com/yanghaiji/Advanced-books