Redis的使用场景和解决方案

Redis是一款key-vlue键值对非关系型数据库,是一个开源的内存数据库,它可以作为数据库、缓存、消息中间件、分布式锁等多种用途。它支持多种数据结构,包括字符串string、哈希hasp、列表list、集合set、zset有序集合等,使得它可以灵活地应用于各种场景。

1.Redis在项目中的使用场景?

1.做缓存

2.分布式锁

3.做消息中间件

2.Redis的常见问题及解决方案:

1.什么是缓存穿透?

缓存穿透指的是不存在的数据,在reids中没有查询到,导致请求直接查询MySQL数据库。

解决方案:

1.对不存在的数据,设置为null值,保存在redis中,设置过期时间。

2.使用布隆过滤器,通过它进行数据过滤,需要注意给布隆过滤器设置预热。

2.什么是缓存击穿?

缓存击穿指的是在一个设置了过期时间的热点数据,在过期时间的点上,有大量的请求打过来,导致大量请求直接操作的是数据库,数据库直接被打垮了。

解决方案:

1.加互斥锁,效果是性能差,数据是强一致的。

2.设置逻辑过期时间,效果是高可用,性能好,数据一致低。

3.什么是缓存雪崩?

缓存雪崩指的是在同一时刻有大量的热点数据失效或者redis宕机,导致大量的请求直接操作数据库,导致数据库宕机。

解决方案:

1.给热点数据设置不同的过期时间。

2.设置哨兵模式,集群模式。

3.可以设置nginx和网关限流。

4.设置多级的缓存,一级缓存用Guava和Caffeine。

4.Mysql和Redis如何做到数据一致性的呢?

1.通过加读写锁的方式,保证数据的强一致性,性能比较低。

2.通过MQ的消息异步通知,保证数据的同步,数据最终一致性。

5.redis的持久化方式有哪些?

1.RDB持久化:定期的对redis的整段内存做数据快照。

2.AOF持久化:是记录操作redis的操作命令用日志记录的。

6.redis的数据过期策略有哪些?

1.惰性删除

当需要key的时候,检查这个key是否过期,过期就删除,没有就不管。

2.定期删除

定期的扫描一部分key,检查是否过期,有过期的就删除掉,没有的保留。

reids的过期策略用的是两者的配合使用。

7.redis的数据淘汰策略有哪些?

redis的内存不够用的时候,此时在向redis中添加数据,那么redis就会按照某种规则将内存的数据删除。

1.对全体数据不淘汰策略,不让继续写入(默认)。

2.对全体数据进行随机淘汰。

3.对全体数据,进行lru算法淘汰。

4.对全体数据,进行lfu算法淘汰。

5.对设置了过期时间的数据进行随机淘汰。

6.对设置了过期时间的数据,过期时间越小越先淘汰。

7.对设置了过期时间的数据,进行lru算法进行淘汰。

8.对设置了过期时间的数据,进行lfu算法进行淘汰。

8.redis的分布式锁是如何实现的?

采用的是setnx命令或者redisson。

场景:1.抢优惠券 2.秒杀3.库存超卖

用setnx实现:

用redisson实现:

9.什么是redis主从同步的?

redis的主从同步讲的是redis在主从模式下,主节点写,从节点读,保证主节点与从节点的数据一致。

10.什么是哨兵模式?

redis通过哨兵模式机制来实现主从集群的自动故障恢复。

11.什么是分片集群模式?

12.redis是单线程为什么那么快,原因是什么?

  1. 完全基于内存,C语言编写的
  2. 执行命令采用单线程,避免不必要的上下文切换
  3. 使用多路IO复用模型,非阻塞IO

解释一下IO复用模型是什么?

IO多路复用是指单个线程同时监听多个socket,并在某个socket可读、可写时得到通知,从而避免无效的等待,充分利用CPU资源。目前的IO多路复用都是采用的epoll模式实现,它会在通知用户进程socket就绪的同时,把已经就绪的socket写入到用户空间,不需要挨个遍历socket来判断是否就绪,提升性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值