Redis常见的面试题

Redis常用面试题

redis常见的数据结构
1.hash: field-value映射表
2.list:list分页查询
3.String:key-value缓存应用
4.set:实现并,交集操作 比如共同爱好
5.sorted set:用户列表,礼物排行榜

缓存雪崩:
问题 1: 缓存同一时间大面积失效,所有请求到数据库造成短时间内承受大量请求雪崩

 解决:在缓存数据的时候给过期时间加上一个随机值,这样
 就能减少数据用一时间过期

问题2 :对于redis挂掉后,请求全部走数据库这种情况?

解决思路:

如果是事发前:实现redis高可用(主从架构)避免redis挂掉这种情况

事发中:设置本地缓存+限流(hystrix)
	尽量避免我们的数据库同时挂掉(起码能保证我们服务还能使用)

事发后:redis持久化
	
	重启后自动从磁盘上加载数据,快速恢复缓存数据

缓存穿透
问题 1:恶意请求缓存中不存在的诗句,所有的数据都落在数据库中造成
短时间内承受大量的的请求而崩掉

解决:

一:利用排斥锁
   缓存失效的时候,先去获取锁,得到锁了
   ,再去请求数据库,没得到锁,则休眠一段时间重试


二:采用异步更新策略,无论key是否取到值,到直接放回
    
   value中维护一个缓存失效时间,如果缓存过期,则使用一个线程异步
   去数据库获取数据,更新缓存。需要做缓存预热(项目启动前先加载缓存)

三:提供一个能迅速拦截请求是否有效的拦截机制

    布隆过滤器:内部维护一系列合法有效的key
    迅速判断出,请求所携带的key是否合法有效
    如果不合法,就直接返回

redis和数据库双写一致性

一.先更新数据库 再删缓存
  有可能出现缓存删不掉,这时候应该采用消息队列
	

二.采用延时双删
1.先淘汰缓存
2.再写数据库
3.休眠一秒,再次淘汰缓存

redis持久化机制(怎么保证redis挂掉后再重启数据恢复)?

1.快照持久化(redis默认采用)redis.conf默认有配置
redis可以通过创建快照来获取存储在内存里面的数据在某个时间点上的副本
redis创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建
具有相同数据的服务器副本(redis主从结构,主要用来提高redis性能)

还可以将快照留在原地以便重启服务器的时候使用。

为什么redis读写速率快,性能好?

redis是纯内存数据库
相对于读写磁盘,读写内存的速度非常快
一般hash查找可以达到每秒几百万的数量级

多路复用io
"多路"指的是多个网络连接,"复用"值的是复用同一个线程。

采用多路复用可以让一个线程高效的出路多个连接请求(尽量减少网络io时间)
可以直接理解为: 单线程的原子操作,避免上下文切换和性能消耗;加上对内存中数据的的处理速度,很自然的提高吞吐量

链接: spring常用面试题.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值