Redis缓存三大问题解析,看完保你面试能造火箭,工作能拧螺丝。
分布式的锁实现具体实现的代码如下: public String getProduceNum(String key) { // 获取分布式锁 RLock lock = redissonClient.getLock(key); try { // 获取库存数 int num= Integer.parseInt(redisTemplate.opsForValue().get(key)); // 上锁 lock.lock(); if (num> 0) { //减少库存,并存入缓存中 redisTemplate.opsForValue().set(key,(num - 1) + ""); System.out.println("剩余库存为num:" + (num- 1)); } else { System.out.println("库存已经为0"); } } catch (NumberFormatException e) { e.printStackTrace(); } finally { //解锁 lock.unlock(); } return "OK"; }
缓存雪崩缓存雪崩 是指在某一个时间段,缓存集中过期失效。此刻无数的请求直接绕开缓存,直接请求数据库。 造成缓存雪崩的原因,有以下两种:
比如天猫双11,马上就要到双11零点,很快就会迎来一波抢购,这波商品在23点集中的放入了缓存,假设缓存一个小时,那么到了凌晨24点的时候,这批商品的缓存就都过期了。 而对这批商品的访问查询,都落到了数据库上,对于数据库而言,就会产生周期性的压力波峰,对数据库造成压力,甚至压垮数据库。 缓存雪崩的原理图如下,当正常的情况下,key没有大量失效的用户访问原理图如下: 当某一时间点,key大量失效,造成的缓存雪崩的原理图如下: 对于缓存雪崩的解决方案有以下两种:
针对业务系统,永远都是具体情况具体分析,没有最好,只有最合适。于缓存其它问题,缓存满了和数据丢失等问题,我们后面继续深入的学习。最后也提一下三个词LRU、RDB、AOF,通常我们采用LRU策略处理溢出,Redis的RDB和AOF持久化策略来保证一定情况下的数据安全。 最后,祝所有大家在面试中过关斩将,拿到心仪offer。 对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家 如果想与一群3-8年资深开发者一起交流学习的话,需要,我的官方群-点击此处。 八重樱:腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新) ? (编辑:广西网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |