请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师您好,有两个问题:

老师您好,有两个问题:

  1. 在getCachedCoupons这个接口中,通过userid和status向Redis查询优惠券数据,如果查询结果为空,则向Redis缓存中写入一条-1的数据,为什么要这样做呢,按我的理解从缓存中没查到数据不是应该再去查一次MySQL吗,如果MySQL中有数据就写进Redis缓存,如果MySQL中也没有数据才向缓存中写一条-1的数据。因为第一次查询的时候缓存里面肯定是没有数据的,如果因此就直接向缓存中写入-1的数据,那之后再查缓存就能查到-1的数据,就不会再去查数据库了,那这样岂不是永远查不到真实的数据了。
  2. 优惠券数据是以hash而不是string结构存储在Redis里面的,为什么要用StringRedisTemplate去处理hash的数据呢

正在回答 回答被采纳积分+3

1回答

张勤一 2020-02-13 17:22:39

同学你好:

    1. getCachedCoupons 这个接口默认认为当前是个新的系统,用户数据目前并不存在。所以,只要是缓存中没有出现过的,都认为是用户没有数据。按照你的设计话,是需要再去查询数据库的。这只是产品思想设计的不一致,不是实现上的问题。

    2. StringRedisTemplate 不是只操作 String 类型的 Redis 数据,它就是 Redis 的客户端,可以查询下看看它与 RedisTemplate 的区别。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!

2 回复 有任何疑惑可以回复我~
  • 第一个问题的解释还是不太懂
    回复 有任何疑惑可以回复我~ 2020-08-07 21:19:07
  • 用户数据怎么会不存在呢?用户数据不是保存在mysql中的么,redis缓存中读不到,当然要去mysql中查询吧
    回复 有任何疑惑可以回复我~ 2020-08-07 21:27:26
  • redis中不会一直保留用户优惠券信息,比如我现在要查询的userid的优惠券信息刚好在redis中过期了,但是mysql中存储的有该用户的优惠券信息。此时不是应该先去mysql中查询一下吗?为社么直接写一个无效的用户优惠券信息存到redis中呢?
    回复 有任何疑惑可以回复我~ 2020-08-07 22:40:10
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信