Java面试必问题30:Redis篇(重点必问)

  1. Redis为什么快
    • (内存操作)完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。
    • (单线程,省去线程切换、锁竞争的开销)采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
    • (NIO的IO多路复用模型)使用多路I/O复用模型,非阻塞IO;这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程

最简回答:Redis之所以快是因为它采用了内存存储和非阻塞的I/O模型,避免了磁盘IO的延迟;同时,Redis使用了IO多路复用技术,通过一个线程同时处理多个客户端请求,减少了线程切换的开销,提高了并发处理能力。

  1. Redis可以用来做什么
    • 缓存
    • 排行榜
    • 分布式计数器
    • 分布式锁
    • 消息队列
    • 分布式token
    • 限流

最简回答:RDB是Redis的快照持久化方式,通过周期性的快照将数据保存到硬盘,占用更少的磁盘空间和CPU资源,适用于数据备份和恢复,但可能存在数据丢失的风险。AOF是追加日志持久化方式,将每个写操作以追加的方式记录到日志文件中,确保了更高的数据完整性和持久性,但相对于RDB消耗更多的磁盘空间和写入性能,适用于数据持久化和灾难恢复,且可以通过配置实现不同的同步频率。

  1. Redis的持久化机制
  2. Redis 4.0之后提供了混合持久化的方式,顾名思义就是把RDB持久化和AOF持久化结合起来的一种方式。混合持久化就是快照以一定的频率执行,而在两次快照之间,使用 AOF 日志记录这期间的所有命令操作。

    选择RDB还是AOF?

  3. 如果你的业务场景需要很高的性能,或者宕机之后能够尽快的恢复,而对数据完整性的要求不是那么高,那么可以采用RDB持久化的方式。  
  4. 如果你的业务场景对数据完整性的要求很高,那么可以采用AOF的持久化方式,而至于采用那种回写策略,则取决于你对数据完整性的要求程度。    
  5. 如果你的业务场景既要兼顾性能,又注重数据完整性,那么可以采用混合持久化的方式。    
  6. 如果你对数据丢失无所谓,追求性能最大化的情况下,甚至可以禁用持久化。
  7. Redis常用的数据类型
  8. String:存储单个值,适用于缓存和键值存储,常用命令:SET用于设置值,GET用于获取值。
  9. List:有序、可重复的字符串集合,适用于消息队列和发布/订阅系统,常用命令:LPUSH用于从列表左侧添加元素,LRANGE用于获取指定范围的元素。
  10. Set:无序、不可重复的字符串集合,适用于标签系统和好友关系等,常用命令:SADD用于向集合添加成员,SMEMBERS用于获取集合所有成员。
  11. Hash:字段-值对的无序散列,适用于存储对象、缓存和计数器,常用命令:HSET用于设置字段值,HGETALL用于获取散列的所有字段和值。
  12. Sorted Set:有序的字符串集合,每个成员关联一个分数,适用于排行榜和按分数范围获取成员,常用命令:ZADD用于添加成员及其分数,ZRANGE用于获取指定范围的成员。
  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值