java吧 关注:1,294,150贴子:12,829,515
  • 7回复贴,共1

阿里JavaP8告诉你老程序员为何反对使用Redis

只看楼主收藏回复

Redis号称支持并发11万读操作、并发8万写操作。由于优异的性能和方便的操作, Redis在国内各大公司都很热门,比如新浪、阿里、腾讯、百度、美团、小米等,Redis也是大厂面试最爱问的,尤其是Redis客户端、Redis高级功能、Redis持久化、Redis复制的原理和优化策略、Redis分布式解决方案等。
我们在工作中也经常会用到Redis,但是为什么要用Redis?关于Redis的一些场景和实战问题,90%以上的人都没有真正理解Redis。
为什么要用Redis?是不是一定要用Redis?
项目中使用Redis,主要考虑性能和并发。其实不是所有的场景都要上Redis,如果仅仅是分布式锁这些,完全可以用中间件Zookpeer等代替。很多业务系统其实用数据库就够了,无脑上缓存/NOSQL可能会带来更多更严重的问题。
性能:
如下图所示,在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用Redis做一个缓冲操作,让请求先访问到Redis,而不是直接访问数据库。
阿里JavaP8十年摸爬滚打,告诉你老程序员为何反对使用Redis?
提个问题:Redis慢查询操作,该如何优化?
并发:
如下图所示,在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用Redis做一个缓冲操作,让请求先访问到Redis,而不是直接访问数据库。
阿里JavaP8十年摸爬滚打,告诉你老程序员为何反对使用Redis?
谨!慎!使!用!缓!存!
无数大佬都提醒我们:谨慎使用缓存!
缓存失效是计算机科学两大难题之一(另一大难题是命名),缓存会掩盖掉一些问题,甚至放大问题。
使用Redis最常遇到的问题主要就是以下4个:
1、缓存和数据库双写一致性问题
2、缓存雪崩问题
3、缓存击穿问题
4、缓存的并发竞争问题
从安全角度来说,缓存也是最容易被攻击的薄弱点(缓存溢出攻击,不是缓存区溢出攻击,用大量无效的数据占满缓存空间使得系统性能断崖式下跌)。
所以通常做压力测试的时候都是要求必须关闭缓存测试。
不单单是缓存,所有的中间件在解决一部分问题的同时也会带来新的挑战。
譬如消息队列对于削峰填谷的功效非常明显,但是如果峰值持续的时间远远的超出了估计呢?而如果这时候消息阻塞的监控还在计划中的话……
比如说分布式计算带来了无限扩容的可能,而一致性问题很多时候会带来非常多的麻烦。
看到这里,你还敢说自己会redis吗?关于Redis的这8个阿里面试题,你能否答得上来?
1.Redis相比memcached有哪些优势?
2.Redis常见性能问题和解决方案
3.MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据
4.Memcache与Redis的区别都有哪些?
5.Redis 常见的性能问题都有哪些?如何解决?
6.Redis 最适合的场景
7.Redis的同步机制了解么?
8.是否使用过Redis集群,集群的原理是什么?
评论区留言分享


1楼2020-05-11 16:03回复
    我自己写了个游戏 每天有一个时间点是活动爆发时间,例如晚上10点整,按照我游戏现在玩家数量大概在100左右,同时访问数据库查询人物属性,技能装备宝宝等肯定崩了(事实就是如此,请求全部卡在那个点,要重启服务才能恢复正常),用上了redis后直接将人物相关属性提前计算好存入缓存,现在cpu使用率不到3%,还是比较香的。至于说的缓存闪蹦的问题我是提前进行一个redis是否有值判断,即有值就去查redis 无值就去查数据库。


    2楼2020-05-11 17:01
    收起回复
      2026-01-10 20:05:18
      广告
      不感兴趣
      开通SVIP免广告
      P8有空来贴吧吹逼?


      IP属地:北京来自iPhone客户端3楼2020-05-11 17:20
      收起回复
        关注微信公众号,免费领取实训课程


        来自Android客户端5楼2020-05-14 16:22
        回复
          微信扫描领取课程哦


          来自Android客户端6楼2020-05-15 14:10
          回复
            滴滴


            来自Android客户端7楼2020-05-16 09:41
            回复