Redis高频面试题带答案

说下你对Redis的理解?

提示:从基本数据类型开始–》贯穿 持久化机制机制–》加上应用场景

首先,Redis有5种数据类型,分别是String、list、set、zset、hash,我在项目中最常用的是String,因为String是Key-value形式存储的。

Redis的话还有一个持久化机制,因为Redis是基于内存的,所以如果没有这个机制存在,那么Redis服务重启会造成数据的全部丢失。Redis主要分为2种持久化:RDB快照模式和AOP追加文件模式。先说一下RDB快照模式吧,它会根据我们自己设置的时间自动的生成或者通过save命令的方式,redis就会去生成RDB文件,这个RDB文件实际上就是一个压缩过的二进制文件,redis可以通过这个文件在服务启动的时候来还原我们的数据。而那个AOF追加文件模式的话,实现原理就是把Redis服务器接收到的所有的写命令都记录到日志中。

在项目中使用redis的话主要是存储一些用户登录后的信息,存订单的一个过期的key,还存有一些小程序首页加载的一些页面布局和商品信息等数据。

Redis的过期数据的删除策略是什么?

Redis采用的是惰性删除+定期删除。惰性删除是只会在取出key的时候才会对数据进行过期检查,但是会造成大量过期的key没有被删除。还有一种是定期删除,每隔一段时间删除一批过期的key。

缓存穿透

指缓存和数据库中都没有数据,导致请求都落到了数据库上。

解决办法:
最简单的方法就是做好参数校验,一些不合法的参数请求直接抛出异常给客户端。

1.可以缓存无效的key ==>设计key: 表名:列名:主键名:主键值
当缓存和数据库都查不到key的时候就写一个到Redis中并设置过期时间

2.使用布隆过滤器
把所有可能存在的请求值都存放在布隆过滤器中,当用户请求过来先判断用户发来的请求是否存在于布隆过滤器中。如果不存在直接返回请求参数错误信息给客户端,存在才会走下面的业务流程。

布隆过滤器怎么实现的:

布隆过滤器的本质是一个很长的位数组和一系列随机映射哈希函数,当有一个值进来的时候,会计算每一位的结果是否都为1,如果有0则直接返回。

缓存击穿

缓存中没有数据而数据库中有数据,一般是指缓存时间到期。

缓存雪崩

缓存在同一时间大面积失效,后面的请求都直接落在了数据库上,造成数据库短时间内承受大量请求。

解决方式:为了防止热点缓存失效的情况,设置不同的失效时间,比如随机设置的缓存失效时间

Redis常见的数据结构以及使用场景分析

string,list,hash,set,zset

string的数据结构是简单的key-value类型的,一般用在需要计数的场景,比如用户的访问次数,热点文章的点赞转发数量等等。

list的数据结构是双向链表,支持反向查找和遍历。list常用的应用场景为:消息发布,订阅和慢查询。

hash的数据结构为数组+链表。hash是一个string类型的field和value的映射表,非常适合存储对象hash应用的场景是:对象数据的存储。

set的数据结构相当于是Java中的HashSet,是一种无序集合,没有重复的值。set的应用场景是:共同关注的用户,共同的粉丝,共同的喜好。因为set可以很容易的实现交集,并集,差集的操作。

zset与set相比较,只是增加了一个权重参数分数score ,使得集合中的元素能够按照score进行有序排列,还可以通过score的范围来获取元素的列表。应用场景:对数据根据某个权重进行排行的场景。比如礼物排行榜

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值