20250102面试鸭特训营第10天

更多特训营笔记详见个人主页【面试鸭特训营】专栏

250102

1. Redis 中常见的数据类型有哪些?

数据结构描述最大容量适用场景
string底层是字节数组512MB数据缓存、计数器、分布式锁
hashkey / field / value 三个字段42亿个键值对实体类数据(购物车数据)
list类似于LinkedList42亿个元素消息队列、历史记录
set类似于HashSet42亿个元素标签系统、用户关注、点赞
zset有序的set集合,类似于TreeSet42亿个元素排行榜、任务调度

在这里插入图片描述

Redis 9 种基本数据类型应用场景汇总

  • String
    • 缓存对象、计数器、分布式锁、分布式锁
  • List
    • 阳塞队列、消息队列
      • 使用 List 用作消息队列时,【需要自己实现生产者是全局同一的】且【不能以消费者组来消费数据】
  • Hash
    • 缓存对象、购物车实体数据
  • Set
    • 点赞、共同关注、收藏
  • Zset
    • 排行榜(面试常问)
  • BitMap(2.2 版新增)
    • 主要有0和1两种状态
    • 用于去重、签到统计、用户登录态判断等
  • HyperLogLog(2.8 版新增)
    • 海量数据基数统计的场景,有一定的误差,可以根据场景选择使用
    • 用于网页 PV、UV 的统计
  • GEO(3.2 版新增)
    • 存储地理位置信息的场景,比如说百度地图、高德地图、附近的人等
  • Stream (5.0 版新增)
    • 用于实现消息队列
    • 相比与 list 多了两个特性【自动生成全局唯一消息 ID 】和【支持以消费组形式消费数据】

2. Redis 为什么这么快?

特性MySQLRedis
存储位置磁盘主要保存在内存,持久化后可以保存在磁盘中
持久化默认持久化,数据存储在磁盘文件中默认将数据存储在内存,支持 RDB 和 AOF 两种持久化方案
性能频繁 I/O 操作导致性能较低内存内操作,性能较高
ACID高,支持 ACID 事务特性,数据可靠可以配置为高持久性,但不提供 ACID 支持
同时操作线程数多线程,可能会竞争资源单线程,不存在上下文切换,避免争夺资源
适用场景适用于结构化数据、大规模关系型数据存储适用于高频访问、低延迟的缓存、实时数据存储

3. 为什么 Redis 设计为单线程?6.0 版本为何引入多线程?

单线程

  • 可以避免多线程时的线程上下文切换锁带来的性能开销
  • 使用 I/O多路服用模型可以调高 Redis 的 I/O 利用率

多线程

  • 数据量和请求量的增多,会导致网络 I/O 限制 Redis 的性能
  • 仅针对网络请求的模块采用多线程模式,对于读写命令部分依旧采取单线程模式,依旧能够保证线程安全
  • Redis 6.0 的默认是你用多线程的,只会使用主线程,需要开启的话将配置io-threads-do-reads 参数为 no
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值