当前位置: 首页 > article >正文

java中小型公司面试预习资料(二):Redis

Redis是必不可少的,也是最常用的

  • 一、数据结构
    • 1、基本数据类型
    • 2、高级数据结构
    • 3、数据用法
  • 二、高可用与集群
    • 1、主从复制
    • 2、哨兵(Sentinel)
    • 3、Cluster集群模式
  • 三、持久化机制
    • 1、RDB(快照)
    • 2、AOF(追加日志)
    • 3、混合模式(Redis 4.0+)
  • 四、缓存问题与事物

一、数据结构

1、基本数据类型

字符串(String): 缓存、计数器(限流器)、分布式锁。
列表(List): 消息队列、最新消息列表。
哈希(Hash): 存储对象属性(如用户信息)。
集合(Set): 去重(如点赞用户ID,抽奖的中奖名单)。
有序集合(Zset): 排行榜、延迟队列(通过分数score排序)。

2、高级数据结构

地理位置(Geo): 适合存储和查询具有地理位置信息的数据,如用户位置、附近的商家、地理围栏等。
基数统计(HyperLogLog): 适合用于统计网站的 UV、独立 IP 数、用户访问量等场景。
位图(Bitmap): 适合用于统计和分析大规模数据,例如用户的活跃情况、网站的访问情况、商品的销售情况等。

3、数据用法

计数器或限流器(String):

// 初始化一个key,值为"0"的字符串
SET key 0
// 每当计数器增加/减少时,使用INCR/DECR命令对键的值进行递增操作。
INCR key 
// 使用GET命令来获取当前值。
GET key
//如果是限流操作,初始化时,EXPIRE设置有效期
SET key 0 EX 60

分布式锁(String):

//设置一个唯一的键和值,并设置过期时间. value值可以存储一些获取到锁的宿主信息
SETNX lock_name value EX <lock_timeout>

简单消息队列(List):
生产者:使用LPUSH命令将消息插入到List的左侧。
消费者:使用RPOP命令从List的右侧按顺序读取。
阻塞读取:BRPOP命令可以避免消费者在没有消息时不断轮询队列,该命令会阻塞直到有新消息到达。
保持列表长度:使用LTRIM命令设置List的范围,从而保持其长度不超过指定的大小。

二、高可用与集群

1、主从复制

一个主节点可以拥有多个从节点

2、哨兵(Sentinel)

多个sentinel组成sentinel集群(也可以一个)。sentinel是一个特殊模式的Redis服务器.

A.当主服务器超过用户设定的下线时长,则sentinel会从主服务器下的从服务器中挑选一条成为主服务器。
B.sentinel向其他所有从服务器发新的复制命令,让它们成为新的主服务器的从服务器,以实现故障转移。
C.sentinel会继续监视已下线的主服务器,当它重新上线将它设置为新的主服务器的从服务器。

领导Sentinel出现异常后通过选举模式选出新的领导Sentinel。

3、Cluster集群模式

客户端在向Redis Cluster发送命令时,只需要提供键名。Redis Cluster的节点会负责处理键到槽的映射和数据的路由。
哈希槽计算
计算键的CRC16值:
Redis使用CRC16算法来计算给定键的哈希值。

确定槽:
将计算出的CRC16哈希值对16384取模,得到的结果就是键应该被分配到的槽(slot)编号。

键到槽的映射:
根据这个槽编号,Redis Cluster知道将这个键存储在哪个节点上。
例如,如果某个键的CRC16值为5000,那么该键将被分配到槽编号为5000 % 16384 = 5000的槽上。

自动迁移
由于键到槽的映射是在服务器端完成的,因此当集群中的节点发生变化(如节点故障或增加新节点)时,Redis Cluster能够自动迁移数据以保持数据的完整性和可用性。

性能优化
优化数据分布和查询性能。例如,设计键名时可以考虑如何分布它们以避免热点问题(即某些节点因为某些特定模式的键而承受过多的负载)。总之,键到槽的映射是在Redis Cluster的服务器端进行的,客户端只需要发送完整的命令和键名即可。这种设计使得Redis Cluster既保持了高性能又易于管理。

三、持久化机制

1、RDB(快照)

原理:定时生成内存数据的二进制快照文件。
优点:恢复速度快,适合备份。
缺点:可能丢失最后一次快照后的数据。

2、AOF(追加日志)

原理:记录所有写操作命令,重启时重放日志。
优点:数据丢失风险低。
缺点:文件体积大,恢复速度慢。

3、混合模式(Redis 4.0+)

结合RDB和AOF,先加载RDB快照,再重放AOF增量日志。

四、缓存问题与事物

缓存穿透
现象:大量请求查询不存在的key,绕过缓存直接访问数据库。
解决:布隆过滤器拦截非法请求、缓存空值。

缓存击穿
现象:热点key过期后,高并发请求直接击穿到数据库。
解决:互斥锁(如SETNX)、永不过期策略+异步更新。

缓存雪崩
现象:大量key同时过期,导致数据库负载激增。
解决:随机过期时间、多级缓存(如本地缓存+Redis)。

事务
命令:MULTI(开启事务)、EXEC(执行)、WATCH(监控key)。
原子性:事务中的命令要么全部执行,要么全部不执行,但不支持回滚。


http://www.kler.cn/a/576702.html

相关文章:

  • 执行计划 统计信息相关 SQL_MONITOR display_cursor
  • MetaGPT发布的MGX与Devin深度对比
  • C# 中的多线程同步机制:lock、Monitor 和 Mutex 用法详解
  • Python 实现多语言朗读与单词选择测验程序
  • ESP32的IDF开发学习-驱动gc9a01屏幕
  • Android中的AsyncTask。
  • 全星FMEA软件:汽车电子行业研发管理高效之选
  • Spring Boot面试问答
  • openharmony 软总线-设备发现流程
  • AntV X6使用Vue组件作为渲染节点
  • Qt信号与槽机制实现原理
  • PHP之连接Mysql
  • Aruco 库详解:计算机视觉中的高效标记检测工具
  • fastjson漏洞
  • 更强的蛋白质突变效应预测!一键推理 DePLM 去噪蛋白质语言模型
  • MySQL DDL数据定义语句
  • Qt 实现抽屉效果实例
  • 用python做一个简单的可以调用手机摄像头进行车牌识别的H5页面
  • 数据中心精密配电监控:安科瑞精密配电监控解决方案破解高能耗与低效率困局
  • 联核科技AGV无人叉车的应用场景有哪些?