当前位置:首页 > 问答 > 正文

Redis注解讲解视频,帮你快速掌握Redis那些重点和技巧

(视频开场)讲师:“大家好,今天我们不聊那些厚厚的Redis书,也不讲那些让人头大的理论,我们就通过几个开发中最常用的‘注解’,来把Redis的核心用法和技巧给盘明白,你会发现,用好Redis,其实就是用好这几个注解的事儿。”

第一部分:为什么要用Redis?—— @Cacheable 登场

讲师首先说:“我们从一个最最常见的场景开始:查数据库,你的首页有一个热点新闻列表,每次有人访问都要去数据库里‘捞’一次,数据库压力大,用户等得也久,这时候,我们的第一位‘明星注解’ @Cacheable 就出场了。”(来源:视频中讲师对应用场景的引入)

他一边在IDE里写代码一边解释:“你看,我就在这个查询新闻的方法上,加一个 @Cacheable(cacheNames = "hotNews", key = "#newsId"),这行代码的意思是:当这个方法第一次被调用时,它会正常去数据库查,但查完之后,会自动把结果按照我指定的key,存到Redis一个叫‘hotNews’的缓存空间里,下次再有同样的请求(同样的newsId),它根本不会再去执行这个方法,而是直接去Redis里把结果‘捞’出来返回给用户,速度提升了不止一个数量级。”(来源:视频中讲师的代码演示和口语化解释)

讲师强调了一个关键点:“这里面的key的设计是门学问,视频里我提醒大家,key一定要唯一,比如用 #newsId 加上业务前缀,像‘news:123’这样,不然不同的数据可能会互相覆盖,那就乱套了。”

第二部分:数据更新了怎么办?—— @CacheEvict 和 @CachePut 联手

讲师接着提出新问题:“那问题来了,如果后台管理员把某条新闻修改了或者删除了,Redis里的缓存还是旧数据,用户看到的就不是最新的了,这咋整?”

“这时候就需要我们的‘清道夫’注解 @CacheEvict。”他继续演示代码:“在更新或者删除新闻的方法上,我加上 @CacheEvict(cacheNames = "hotNews", key = "#newsId"),它的作用很简单粗暴:当这个方法执行成功后,自动去Redis里,把对应key的那个缓存数据给删掉,这样,下次再有人查询这条新闻时,因为缓存没了,系统就会乖乖地再去数据库查一次最新的数据,并重新缓存起来。”(来源:视频中解决缓存一致性问题的讲解)

“那如果我是更新操作,更新完后想立刻把最新结果缓存起来,省去下一次的缓存穿透呢?”讲师自问自答:“那就用 @CachePut,这个注解和 @Cacheable 很像,区别在于它‘不管缓存里有没有,都会执行方法,并且把方法返回的结果重新放到缓存里’,你可以在更新方法上用它,保证缓存里的数据永远是最新的。”(来源:视频中对@CachePut与@Cacheable区别的对比)

第三部分:应对高并发——“锁”与“限流”的技巧

讲师切换到更复杂的场景:“接下来是重点和难点,也是面试常问的,秒杀’场景,成千上万人同时抢一个商品,怎么防止库存超卖?”

“光靠数据库的事务行不行?行,但数据库压力太大,我们可以用Redis帮忙‘加把锁’。”他这里没有用注解,而是写了一段使用Redis的setnx命令的代码:“setnx key value 命令是‘Set if Not Exists’的意思,只有这个key不存在时,它才能设置成功,我们可以让所有抢购请求都来尝试设置同一个key,seckill:product:1001’,谁设置成功了,谁就拿到了‘锁’,获得了购买资格,可以去减库存,没设置成功的,就直接返回‘抢购失败’,这样就完美地解决了超卖问题,虽然这不是一个Spring注解,但它是Redis实现分布式锁最核心的思想,必须掌握。”(来源:视频中关于分布式锁原理的讲解)

“还有一个技巧是限流。”讲师举例:“比如防止恶意刷接口,我们可以用Redis给每个IP设置一个访问计数器,通过incr命令给某个IP的key增加值,并设置过期时间,比如一分钟内,同一个IP的访问次数超过100次,就拒绝服务,这也是Redis一个非常实用的技巧。”(来源:视频中关于限流方案的介绍)

第四部分:数据结构和最佳实践

讲师最后总结道:“其实啊,Redis之所以快,除了它是内存数据库,还因为它有丰富的数据结构,存用户点赞列表,你用String类型存可能很麻烦,但用Set集合,一个sadd命令就搞定,还能自动去重,再比如,要做排行榜,用ZSet有序集合,天然就支持按分数排序,选择合适的数据结构,比你绞尽脑汁去写复杂代码管用得多。”(来源:视频结尾处的最佳实践总结)

“最后叮嘱大家几个坑:第一,别忘了给Key设置过期时间,不然内存会爆掉,第二,要评估你的数据量,避免单个Key的Value太大,影响性能,第三,刚刚说的分布式锁,严格来说要用更复杂的逻辑防止死锁,比如设置锁的过期时间,今天就不展开了。”

(视频结束语)“好了,通过这几个注解和核心技巧,你已经掌握了Redis八成的日常用法,剩下的就是多练习,多思考业务场景,希望大家都能成为Redis使用高手!”

Redis注解讲解视频,帮你快速掌握Redis那些重点和技巧