Redis常见面试题及答案~~~Redis最新常问内容~~~

Redis是一种内存数据存储系统,支持多种数据结构如字符串、哈希、列表、集合和有序集合。它提供持久化功能,包括RDB和AOF,以防止数据丢失。RDB是快照方式,而AOF记录写命令。AOF过大可通过`BGREWRITEAOF`压缩。Redis事务以MULTI开始,EXEC执行,DISCARD取消。缓存雪崩和穿透分别通过设置随机过期时间和使用布隆过滤器避免。Redis使用RESP协议,常见架构有单机、主从复制和哨兵,哨兵提供高可用性。分布式锁通过SETNX和EXPIRE实现,避免丢失可使用`SET`的复杂参数。Redis可作为异步队列,但消费者下线可能导致数据丢失。此外,Redis适用于session共享、缓存、队列等场景,内存优化考虑使用敞列表。其优势包括高速度、原子性事务和丰富数据类型。

1、redis的数据类型有哪些?

String字符串 、 Hash 、List 、 Set  、Sorted Set

2、什么是Redis持久化?

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失;

Redis提供了两种持久化方式:RDB(默认)和AOF

3、RDB和AOF的区别

ROB:将内存中的数据以快照的方式写进二进制文件中.优势是数据恢复快,方便备份,缺点是比较耗内存,可能会造成数据丢失。
A0F:以独立日志记录写命令方式存储日志,重启时再重新执行日志中记录的数据即可完成恢复。优势是数据安全,不容易丢数据,缺点占用存储空间大,数据恢复较。

4、AOF文件过大怎么处理?

 
可以重复执行aof命令----Bgrewriteaof,执行后会触发重写aof文件,会将aof中的重复命令进行压缩,即使 Bgrewriteaof 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 Bgrewriteaof 成功之前不会被修改。

5、redis的事务

redis的事务先以MULTI开启事务,将多个命令入队到事务中,然后通过EXEC命令触发执行队伍中的所有命令,如果想取消事务可以执行discard命令;WATCH命令为redis事务提供check-and-set行为,可以监控一个或多个键,一旦其中有一个键被修改(删除),之后的事务就不会执行,监控一直持续到EXEC命令。

6、缓存雪崩

缓存数据的过期时间再同一时间内由于过期而失败,此时请求会全部进入数据库,这就是雪崩。

如何避免:对缓存的过期时间设置一个随机值,避免缓存在同一时间内过期。

7、缓存穿透

在查询一个一定不存在的数据时,缓存会不命中,如果从数据库中查询不到则不防护乳缓存,则每次请求实际都会进数据库进行查询,失去了缓存的意义。

如何避免:可以采用布隆过滤,也就是将数据库中所有可能存在的数据哈希放到一张足够大的bitmap中,一定不存在的数据就会被bitmap过滤掉,从而减轻数据库的压力。

8、redis通讯协议(RESP)

RESP是redis客户端和服务端之间使用的一种通讯协议;

特点:实现简单,快速解析,可读性好。

9、redis的架构模式,特点及问题

单机版:简单,但内存容量有限,处理能力有限,无法高可用;

主从复制:读写分离,数据相同,但无法保证高可用,没有解决master写的压力;

哨兵:可监控,可提醒,保证高可用,自动故障迁移;但主从模式切换需要时间,会丢数据,没有解决master写的压力。

10、redis分布式锁是如何实现的?

先拿setnx来争抢锁,抢到之后,在用expire给锁加一个过期时间防止锁忘记释放。

11、若在setnx之后执行expire之前进程意外crash或要重启维护了,那会怎么样?

set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的

12、如何用redis做异步队列,有什么缺点?

一般使用list结构作为队列,rpush生产消息,lpop消费消息,当lpop没有消息的时候,要适当sleep一会再重试;

缺点:在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如rabbitMQ等。

13、如何生产一次消费多次?

使用pub/sub主题订阅者模式,可以实现1:N的消息队列。

14、redis有哪些适用场景?

session共享(单点登录)、页面缓存、队列、 排行榜/计数器、发布/订阅

15、redis如何做内存优化?

尽量使用敞列表,敞列表(是说表里存储的较少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个敞列表中;比如你的web系统中有一个用户对象,不要为这个用户的名称、姓氏、邮箱、密码设置单独的key,而是应该把这个用户的所有信息存储到一张敞列表中。

16、redis主要有哪些功能?

哨兵(Sentinel)和复制(Replication)、事务、LUA脚本、持久化、集群

17、redis的优势

速度快,因为数据存在内存中;

支持丰富的数据类型;

支持事务,操作都是原子性;

丰富的特性:可用于缓存,消息,按key设置过期时间,过期后会自动删除。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XILONUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值