redis面试常见问题

  1. 系统哪些场景用到了缓存?

商品的信息,其实变动不大,一般一天更新一次,但是访问量又比较大

加缓存后,
利用缓存提高了性能

如果后续数据变化后,系统修改了数据库的同时,更新下缓存就ok了

  1. 缓存如何实现高并发
    先查缓存,如果缓存有数据,查缓存,没有缓存查数据库,这样可能可以将每秒4000个
    请求的高并发 降为1000个请求查数据库,3000个查缓存?

  2. 为什么数据库不能承载每秒3000的并发,但是缓存可以?

因为缓存走的是内存,内存天然就可以支撑高并发的。但是数据库一般建议并发请求不超过2000/s

比如 查询商品,3/4的数据放缓存,1/4的放数据库

  1. 缓存实现高性能
    缓存许多数据,复查查询结果耗时,结果放在缓存,只要数据没变,直接查询缓存,提高用户体验。

  2. 不良后果
    数据出现不一样,缓存并发竞争,雪崩,缓存穿透

  3. 和memcached 的区别?

1)redis的拥有的数据结构和操作比memcached的多,可以支撑更多复杂的数据类型的操作
2)memcached没有原生的集群模式,redis目前官方都支持cluster模式
数据结构多,可以支持集群

7.为什么redis是单线程模型也能效率这么高,但还是可以支撑高并发?
1.核心是采用基于非阻塞的多路复用模型
2.单线程避免了多线程直接频繁的上下文切换

  1. redis有哪些数据类型,分别在哪些场景下比较合适?
    1)string 做最普通的set get
    2)hash ,类似map的,一般用来缓存对象,后续操作的时候,可以只修改对象的某个字段的值
    3)list,有序的列表,存放列表类的数据结构
    4)set ,无序集合,自动去重的。如果需要对一些数据进行快速去重,可以用jvm内存的hashset去重,但是如果系统部署在多台机器上,那就得基于redis去进行全局去重
    5)sorted set :排序的去重

  2. 过期策略
    缓存时基于内存的,内存是有限的,如果你缓存的数据过大,内存会丢弃一部分你不常用的,保留一些常用的数据
    缓存时可以设置过期时间的,那么redis是如何对这个过期时间的key进行清除的呢?

1)定期删除+惰性删除:
首先,redis默认是每隔100ms会去抓取一批数据去进行过期检查清除,但并不会遍历所有的,因为遍历所有的对cpu的消耗太高
其次:会进行惰性删除,就是当你获取key的时候,redis会检查下,这个key有没有到了过期时间,如果过期,就删除
这样两种手段结合起来,保证过期的key一定会被干掉。

2)内存淘汰机制
删除访问频率低的数据 (LRU)
删除即将过期的数据
删除已过期数据

为什么我的缓存数据不见了?
-写的数据太多了,内存满了,redis 直接执行了内存淘汰机制,lru了,给你清理掉最近很少使用的数据。

10.redis 如何保证挂掉之后重启数据可以恢复
redis持久化,讲数据写入内存的同时,异步的慢慢的将数据写入到磁盘,如果redis宕机,重启启动,redis自动从磁盘上加载之前持久化的数据就可以了。
另外,还可以将磁盘的数据备份到阿里云,如果磁盘故障的情况下,可以另起服务来支撑业务。
持久化的两种方式 ROB AOF 各自的特点?适用的场景?
意义:故障恢复

  1. 缓存雪崩和缓存穿透?redis崩溃后会怎么样?
    雪崩:redis宕机,由于数据库无法承载高并发,导致整个系统宕机。

处理雪崩方案:
1)事前:保证 redis集群高可用 主从+哨兵
2)事中:redis挂了后,采用本地ehcache缓存+hystrix限流&降级,避免mysql被打死
2)事后:redis持久化,快速恢复缓存数据

缓存穿透?
大量请求在数据库中没数据,缓存中也没有,每次都跳过缓存,去查询数据库,把数据库拖死(黑客攻击)

解决方案:
每次系统A从数据库没查到数据,就往缓存中写一个空值。类似 set -999 unkonwn,这样下次再id=-999 ,就会查到缓存,不会直接请求数据库了。

12.redis如何部署的?

redis cluster 10台机器,5台部署redis主实例。5台部署了reids的从实例,每个主实例挂一个从实例。5个节点对外提供读写服务,每个节点的读写高峰qps可能达到5w的qps,
5台机器差不多是25w的qps,机器的配置差不多是32g内存+8核cpu,分配给redis的10g内存。

因为每个实例都挂了一个从实例,所以是高可用的,任何一个主实例宕机,都会自动故障迁移,redis从实例都会 编程主实例继续提供读写服务。

比如商品数据,一条数据是10kb,10w条就是1g,常驻内存是200w条商品数据,占用内存20g,不到总内存50%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值