大厂五剑客之redis基础分布式缓存彻底解决方案---05redis性能和实战---二周目

15 篇文章 0 订阅

8-1缓存的受益
    1、缓存的收益和成本        
         1、缓存带来的回报            
            1)高速读写
               缓存加速读写速度:CPU L1/L2/L3 Cache、Linux page Cache加速硬盘读写、浏览器缓存、Ehcache缓存数据库结果。

                数据库的数据要在磁盘里面加载。
            2)降低后端负载
               后端服务器通过前端缓存降低负载: 业务端使用Redis降低后端MySQL负载等  
         2、缓存带来的代价        
            1)数据不一致
                   缓存层和数据层有时间窗口不一致,和更新策略有关,用户获取不到最新的数据。缓存的更新策略。 

                    例子: 广告的缓存时间是一分钟,更新时间,每隔一分钟去更新等。   
            2)代码维护成本
                  原本只需要读写MySQL就能实现功能,但加入了缓存之后就要去维护缓存的数据,增加了代码复杂度。在mysql读取数据,redis缓存数据。
            3)堆内缓存可能带来内存溢出的风险影响用户进程,堆内缓存如ehCache、loadingCache ,占用的内存实在zbn虚拟机分配的。缓存在堆种。
                   zba内部:堆、java虚拟机栈、本地方法栈、方法区、程序计数器            
                   堆内缓存和远程服务器缓存redis的选择
                   1、堆内缓存一般性能更好,远程缓存需要套接字传输
                   2、用户级别缓存尽量采用远程缓存,写在rdis不管用户怎么拿数据都是一样的数据                 
                   3、大数据量尽量采用远程缓存,服务节点化原则

8-2:2018支付宝面试题之缓存雪崩:大量查询落到数据库上

             缓存雪崩和缓存穿透:https://www.cnblogs.com/kyoner/p/11297488.html

                         https://www.jianshu.com/p/de1503ab4623?from=timeline&isappinstalled=0

            1、什么是缓存雪崩?你有什么解决方案来防止缓存雪崩?
            如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,造成了缓存雪崩。
            由于原有缓存失效,新缓存未到期间所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU 和内存造成巨大压力,严重的会造成数据库宕机
            2、你有什么解决方案来防止缓存雪崩?
                1、加锁排队   key: whiltList  value:1000w个uid 指定setNx whiltList value nullValue  这个指令的意思是:

                      
                      mutex互斥锁解决,Redis的SETNX去set一个mutex key,
                      当操作返回成功时,再进行load db的操作并回设当前的查找值缓存;
                       否则,就重试整个get缓存的方法
                2、数据预热
                      缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统。这样就可以避免在用户请求的时候,
                      先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!
                       可以通过缓存reload机制,预先去更新缓存,再即将发生大并发访问前手动触发加载缓存不同的key     
                3、双层缓存策略
                       C1为原始缓存,C2为拷贝缓存,C1失效时,可以访问C2,C1缓存失效时间设置为短期,C2设置为长期。           
                4、定时更新缓存策略
                        失效性要求不高的缓存,容器启动初始化加载,采用定时任务更新或移除缓存
                5、不同的设置不同的过期时间,让缓存失效的时间点尽量均匀,缓存雪崩就是原有的缓存失效新的缓存还没到。

8-3:2018支付宝面试题之缓存穿透:穿透到数据库中经过redis  
         
1、什么是缓存穿透?你有什么解决方案来防止缓存穿透? 
            缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,
            在缓存中找不到对应key的value,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次
            无用的查询)。这样请求就绕过缓存直接查数据库,这个类似于哪个注解的形式的缓存@Cacheable。     
     
         2、你有什么解决方案来防止缓存穿透?
            1、采用布隆过滤器BloomFilter(第二期会讲)   ----------------作用是否是会员是否登陆过
                将所有可能存在的数据哈 希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 
                bitmap 拦截掉,从而避免了对底层存储系统的查询压力              
            2、缓存空值,这个很重要。

                 就是在注解下如果返回的结果是空的话也要缓存起来的。 unless=‘null’去掉  最好要设置过期时间。
                如果一个查询返回的数据为空(不管是数据不 存在,还是系统故障)我们仍然把这个空结果进行缓存,但它的过期时间会很短,
                最长不超过五分钟。 通过这个直接设置的默认值存放到缓存,这样第二次到缓冲中获取就有值了,而不会继续访问数据库  

               

8-4:2018支付宝面试题之redis特性

        1、问题1:redis有哪些特性?           
            1、丰富的数据类型
            2、可用于缓存,消息按key设置过期时间,过期后自动删除   setex  set expire时间
            3、支持持久化方式rdb(内存备份)和aof(命令的增量同步)
            4、主从分布式,redis支持主从支持读写分离 redis cluster,动态扩容方式   
         2、问题2:你用过redis的哪几种特性?           
            1、用sorted Set实现过排行榜项目
            2、用过期key结合springboot cache实现过缓存存储
            3、redis实现分布式环境seesion共享
            4、用布隆过滤器解决过缓存穿透
            5、redis实现分布式锁
            6、redis实现订单重推系统

---------------------------------------

此博客的问题:学完二期再回来看这个所有的问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值