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来判断是否就绪,提升性能。

  • 20
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis是一个开源的内存数据结构存储系统,常用于缓存、队列、计数器和发布/订阅功能。它具有以下应用场景和局限性: 应用场景: 1. 缓存Redis能够快速读取和写入数据,使其成为一个优秀的缓存解决方案。它可以将热门数据存储在内存,从而加快读取速度。 2. 会话存储:Redis可以用作会话存储,以便在分布式系统跟踪用户的会话状态。它提供了高速读写操作和持久化选项,确保会话数据的安全性和可靠性。 3. 消息队列:Redis支持发布/订阅功能,用于构建简单的消息队列系统。发布者可以将消息发送到特定的频道,而订阅者可以从频道接收消息。 4. 计数器:由于Redis的高速读写能力,它可用于实时计数器的实现。例如,可以使用Redis跟踪网站的页面访问次数或社交媒体上的点赞数。 5. 地理位置查询:Redis支持地理位置数据的存储和查询,使其可以用于构建位置相关的应用程序,如附近的人功能或地理围栏提醒。 局限性: 1. 内存限制:Redis数据存储在内存,因此受限于可用的内存大小。如果数据量超过可用内存,性能可能会下降或导致应用程序崩溃。 2. 单线程模型:Redis使用单线程模型来避免竞争条件和锁问题。这意味着它无法利用多核处理器的优势,对于CPU密集型任务可能性能较弱。 3. 持久化延迟:虽然Redis支持持久化选项,但在某些情况下,由于持久化操作的延迟,可能会发生数据丢失。因此,在特定应用场景需要特别小心。 4. 数据类型限制:Redis只支持特定的数据类型,如字符串、哈希、列表、集合和有序集合。复杂的数据结构需要应用程序根据需求进行建模。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值