Redis常见的面试题二

1、Redis常用的五种数据类型

  1. String 字符串
  2. Hash 哈希
  3. list 队列
  4. Set 集合
  5. ZSert 有序集合

2、Redis如何保证缓存数据与数据库同步

  1. 设计合理的过期时间
  2. 进行删操作时同步删除redis缓存数据,改操作同步时修改redis数据

3、Redis如何实现分布式锁

        就是利用redis中的setnx的特性如果存在就不存入,不存在就存入并设置超时时间。利用该返回结果作为共享锁。共享锁使用完之后需要del释放。

        分布式锁不能解决超时的问题,当程序1的执行超出锁的超时时间,锁就会被释放,等待的线程就会去枪锁,当线程a抢到之后就会上锁,这时程序1执行完了,会 进行释放锁【这时释放的锁不是自己的而是线程a的锁】这便是问题的根本。所以我们往往会使用看门狗进行检测,来解决锁超时时间。  

 4、Redis内存淘汰策略?


   [1]volatile-lru:从已设置过期时间的数据集(server. db[i]. expires)中挑
选最近最少使用的数据淘汰。
   [2]volatile-ttl:从已设置过期时间的数据集(server. db[i]. expires)中挑
选将要过期的数据淘汰。
   [3]volatile-random:从已设置过期时间的数据集(server. db[i]. expires)中
任意选择数据淘汰。
   [4]allkeys-lru:从数据集(server. db[i]. dict)中挑选最近最少使用的数据
淘汰。
   [5]allkeys-random:从数据集(server. db[i]. dict)中任意选择数据淘汰。
   [6]no-enviction(驱逐):禁止驱逐数据。

5、什么是缓存穿透以及如何解决缓存问题

          缓存穿透:查询的数据在数据库中不存在在缓存中也不存在,这时时有人恶意访问这种数据,请求会到达数据库

           解决方案:

                第一步:在controller层 校验数据,对一些不合法的数据过滤掉

                第二步:使用bloom布隆过滤器

                第三步:存放一个空对象,并且设置过期时间不能超过5分钟

6、什么是缓存击穿以及如何解决 

            缓存击穿:数据库中存在,但是缓存中该数据过期了,这时有大量的请求访问该过期的数据。压力给到数据库

              解决方案:  

                 1、使用互斥锁

                  2、设置永不过期

7、什么是缓存雪崩以及如何解决

        缓存雪崩:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统比如(DB)带来很大压力

                解决方案:

                   1、设置散列的过期时间

                    2、预热数据

                    3、搭建redis集群             

                      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值