redis缓存应在model层去做

在进行数据库查询之前,我们可以将传进来的数据库查询条件,和model名进行拼接 将得到的值作为key

去redis查询是否为空,如果为空,则执行数据库查询操作,并且将查询到的结果,存入redis,并设置有效期

如果redis查到了值,则直接从redis中取出值,直接return,不执行数据库操作

例如一个商品详情页,如果后台修改了该商品,则我们需要删除这个商品的缓存,例如这个商品的redis key为goods_商品id
则我们就先修改操作,再去删缓存

如果先删除了缓存,再去修改,并发比较大的情况,则会出现缓存已经删除,用户请求了这个商品详情页,此时,修改操作还没完成,就会将 未修改的旧数据,存入redis,从而出现脏数据 也就是缓存与数据库不一致

列表redis缓存和数据库不一致问题,暂时不会写

缓存穿透
当有人请求id为9999这种值,但是我们数据库没有,缓存自然也不会有,就会有大量的查询操作,落在了数据库上
当redis缓存没有查到值,数据库也没有查到值时,则将该key存一个空值,缓存有效期可以设置短点,这样下次再次请求,则会落在redis上

缓存雪崩
当同一时间redis缓存了大量的数据,有效期相同时,比如1小时,当1小时后,缓存失效,大量的查询操作落在了数据库上,则可能会导致数据库压力过大,宕机
解决方案,缓存的有效期,可以设置一个范围内的随机数

缓存击穿
当一个热点key,比如秒杀商品,当redis缓存到期时,大量的请求都没有从redis查到缓存数据,导致都落在了数据库上,这时候就可能导致数据库宕机,所以热门数据,我们可以尽量的设置缓存有效期长一点,甚至可以设置成永不过期

最后修改:2020 年 06 月 05 日 01 : 53 PM
如果觉得我的文章对你有用,请随意赞赏