redis的详细内容(常见面试题)

1.redis的数据类型有哪些

     string(字符串)redis最基础的数据类型,可以存储字符串,整数或者浮点数

      Hash(哈希):键值对集合,可存储多个字段,特别适合用于存储对象

      List (列表)简单的字符串列表,按照插入的顺序排序,可添加元素到列表头部或尾部。

      Set(集合):无序且不重复的字符串集合,通过哈希表实现,添加,删除,查找的复杂度都            是    O(1)

    redis数据类型的优缺点

        优点:多样化的数据类型   高性能,数据持久化  ,高可用性

        确定:内存限制,数据丢失风险 ,复杂度

2.redis为什么那么快??

     1.使用内存存储:数据直接存储在内存中,避免了磁盘I/O带来的演出,能够快速读写

     2.高效的数据结构

     3.单线程模型:避免了多线程竞争和上下文切换开销,能专注高效的处理请求

     4.非阻塞I/O:使用非阻塞的网络I/O操作,减少等待时间

     5.事件驱动机制:通过事件驱动机制,高效的处理各种网络事件和命令处理

     6.代码优化:redis的代码经过高度优化,执行效率高

3.redis的存储方式有哪些  如何开启 

     RDB(Redis DataBase)

      这是一种快照的形式的持久化方式,开启RDB持久化,可在配置文件(redis.conf)中设置

save 900 1  # 在 900 秒内如果有 1 个键被修改则触发保存
save 300 10 # 在 300 秒内如果有 10 个键被修改则触发保存
save 60  10000 # 在 60 秒内如果有 10000 个键被修改则触发保存

  AOF(Append Only File)

      以日志形式记录每个写操作。开启 AOF 持久化,在配置文件中设置:

appendonly yes
#并且可以通过设置 appendfsync 选项来控制同步策略,如 always(每次写操作都同步)、everysec(每秒同步一次)等。

4.redis存储方式RDBAOF的区别

RDB

  • 优点
    • 生成的文件紧凑,体积相对较小,适合备份和数据恢复。
    • 恢复数据速度快。
  • 缺点
    • 可能会丢失一段时间的数据,因为只有在达到触发条件时才会进行快照。
    • 数据量大时,创建快照可能会导致一定时间的服务停顿。

AOF

  • 优点
    • 数据安全性更高,通过日志可以尽可能完整地记录所有操作,丢失数据的风险较小。
    • 可以灵活设置同步策略。
  • 缺点
    • 文件体积通常比 RDB 大。
    • 恢复数据相对较慢,因为要重放所有的写操作。
    • 对性能有一定影响,尤其是在同步策略设置为实时同步时。

  5.redis存放方式rdb的同步策略  

          全量同步:一般发生在 Slave 初始化阶段,这时 Slave 需要将 Master 上的所有数据都复制                               一份

          增量同步:Redis 增量复制是指 Slave 初始化后开始正常工作时主服务器发生的写操作同步                              到从服务器的过程

      在 Redis 主从同步中,主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。           当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先           会尝试进行增量同步,如不成功,要求从机进行全量同步。

  6.redis存放方式aof的同步策略

  • always(每修改同步):每次收到写命令就立即强制写入磁盘,是最有保证的完全的持久化,但速度也是最慢的,一般不推荐使用。
  • everysec(每秒同步):每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,是受推荐的方式。
  • no(不同步):完全依赖OS的写入,一般为30秒左右一次,性能最好但是持久化最没有保证,不被推荐。

7.redis的内存淘汰策略

          redis提供了多种内存淘汰策略,用于在内存不足时删除数据,以确保新数据能够存入。

  1. noeviction:不淘汰数据,当内存不足以容纳新写入数据时,新写入操作会报错                        ( 这是 Redis 的默认淘汰策略。)
  2. allkeys-lru:使用 LRU(Least Recently Used,最少使用)算法,在所有键中,删除最近最少使用的键。
  3. allkeys-random:从所有键中随机删除某个键。
  4. volatile-lru:使用 LRU 算法,在设置了过期时间的键中,删除最近最少使用的键。
  5. volatile-random:在设置了过期时间的键中,随机删除某个键。
  6. volatile-ttl:在设置了过期时间的键中,删除剩余存活时间最短的键。
  7. volatile-lfu:使用 LFU(Least Frequently Used,最不经常使用)算法,在设置了过期时间的键中,删除使用频率最低的键。
  8. allkeys-lfu:使用 LFU 算法,在所有键中,删除使用频率最低的键

    要设置 Redis 的内存淘汰策略,可以通过修改 Redis 的配置文件(redis.conf)或使用 Redis 命      令行来进行配置  :

config set maxmemory-policy 策略名

  内存使用达到限制时,Redis 会根据配置的淘汰策略进行数据删除。

8.redis在项目中的使用

    验证码      token       热点数据的缓存       防止表单重复提交       resission分布式锁

    计数器 :可以实现如文章点赞数、访问量等计数功能

    排行榜:构建各种排行榜,如用户积分排行榜等

9.热点数据缓存的时候怎么保证mysql和redis的数据一致性

  1. 先更新数据库,再删除 Redis 缓存:这是比较常见的做法。在更新数据库成功后,立即删除 Redis 中对应的缓存数据,当下次读取时会重新从数据库加载并更新到 Redis。要注意处理删除缓存失败的情况,可以进行重试。
  2. 订阅数据库 binlog 来更新 Redis:通过监听数据库的二进制日志,一旦有数据变更,根据 binlog 信息来同步更新 Redis,这样可以保证较高的实时性和一致性。
  3. 分布式事务:可以使用分布式事务机制,确保数据库更新和 Redis 缓存操作在一个事务中完成,但这种方式相对复杂且可能对性能有一定影响。
  4. 设置合理的过期时间:即使出现不一致的情况,通过合理设置 Redis 缓存数据的过期时间,也能在一定程度上减少不一致的影响,后续会自动刷新为最新数据。
  5. 定期全量同步或增量同步:定期将数据库的数据全量或按照一定规则增量同步到 Redis,以纠正可能出现的不一致。
  6. 消息队列:将数据库更新操作发送到消息队列,由专门的处理程序根据消息来同步 Redis 缓存,确保操作的顺序性和一致性。

10:redis的缓存击穿 穿透 雪崩现象 每种现象如何解决的

  • 缓存击穿
    • 现象:缓存中没有但数据库中有数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。
    • 解决方案
      • 设置热点数据永远不过期;
      • 设置热点数据的存活时间较长,且分布均匀的岔开过期时间;
      • 接口限流与熔断,降级。重要的接口一定要做好限流策略,防止用户恶意刷接口,同时要降级准备,当接口中的某些服务不可用时,可进行熔断,失败快速返回机制;
      • 使用互斥锁(mutex key),在缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作(比如redis的setnx)去set一个mutex key,当操作返回成功时,再进行load db的操作并更新缓存,否则就重试整个get缓存的方法。
  • 缓存穿透
    • 现象:当请求的数据不存在于缓存和数据库中时发生。
    • 解决方案
      • 接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;
      • 从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用),这样可以防止攻击用户反复用同一个id暴力攻击;
      • 布隆过滤器。
  • 缓存雪崩
    • 现象:当大量缓存key同时过期时发生,导致缓存失效率剧增。
    • 解决方案
      • 设置不同过期时间,为不同key设置不同的过期时间,避免大量key同时过期;
      • 分流限流,通过限流措施,控制并发请求量,避免大量请求同时访问缓存;
      • 缓存预热,在服务器启动时或定期预加载热门数据到缓存中;
      • 灾难恢复方案,建立故障转移机制,在缓存不可用时自动切换到备用缓存或数据库。
1. 什么是redis哨兵模式? Redis哨兵模式是Redis高可用性的解决方案之一,它是通过监听Redis主节点和从节点状态的变化来实现自动故障转移的。 2. Redis哨兵模式有哪些优点? Redis哨兵模式具有以下优点: - 自动化的故障转移。 - 提供高可用性,保证Redis服务的可用性。 - 可以在不需要人工干预的情况下,进行故障恢复。 - 支持多个哨兵节点的部署,提高了系统的可靠性。 3. Redis哨兵模式的缺点有哪些? Redis哨兵模式也有一些缺点: - 性能有一定的损耗,因为哨兵节点需要频繁地检查Redis节点的状态。 - 部署和维护成本较高,需要部署多个哨兵节点和Redis节点,并且需要对节点进行监控和管理。 4. Redis哨兵模式的工作原理是什么? Redis哨兵模式的工作原理如下: - 哨兵节点通过订阅Redis节点的频道,获取Redis节点的状态信息。 - 当哨兵节点检测到主节点状态发生变化时,它会通知所有从节点切换到新的主节点。 - 哨兵节点还会监控从节点的状态,当从节点失效时,哨兵节点会自动将该从节点切换到新的主节点。 5. Redis哨兵模式的部署方式有哪些? Redis哨兵模式的部署方式有两种: - 单哨兵模式:只部署一个哨兵节点,主节点和从节点都连接到该节点。 - 多哨兵模式:部署多个哨兵节点,主节点和从节点都连接到多个哨兵节点。其中一个哨兵节点会被选举为领导者,负责进行故障转移。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值