Redis Java 客户端与 Spring Data Redis

共 19 题
#

1. Redis Cluster 在 JDK 25 虚拟线程下 Lettuce 客户端的连接复用与背压

A 虚拟线程能让单个连接无限并发且绝无背压风险
B 每个虚拟线程都必须单独建立一条 TCP 连接
C Lettuce 共享连接是线程安全的,可并发复用,但并发度仍需连接池上限与超时约束 ✓ 正确答案
D 背压只存在于发送端,接收端无需处理
#

2. Redis 7 的 Functions 与 Lettuce 客户端

A Functions 仍需每次 EVALSHA 传递脚本哈希
B Functions 不支持原子性
C Functions 加载后常驻,集群下一致加载,避免脚本缓存同步问题 ✓ 正确答案
D Functions 只能单个脚本,不能组织成库
#

3. RESP3 协议(Redis 6+)对 Lettuce 客户端的影响

A RESP3 仍只支持简单字符串与整数
B RESP3 新增 Map/Push 等类型,并支持服务端主动推送,是客户端缓存(TRACKING)的基础 ✓ 正确答案
C RESP3 与 RESP2 完全不兼容,无法共存
D RESP3 只影响客户端不影响协议解析性能
#

4. Redis Cluster 的 MOVED/ASK 重定向在 Java 客户端路由的实现

A MOVED 与 ASK 都是永久性槽位迁移
B MOVED 触发客户端更新路由表,ASK 是迁移中临时提示且不更新路由表 ✓ 正确答案
C ASK 与 MOVED 完全等价
D 客户端收到任何重定向都无需处理
#

5. Redis Stream 消费者组语义(XREADGROUP/XPENDING/XACK/PEL)在 Spring Data Redis 中的使用

A 消息读取后进入 PEL,XACK 确认后才移出,崩溃后可重新投递 ✓ 正确答案
B 消息被 XREADGROUP 读取后立即从 PEL 删除
C XPENDING 用于发送消息
D 消费者组内消息只能被指定消费者读取
#

6. Redis 分布式锁的 Redisson 实现,看门狗续期与可重入的实现原理如何?

A 看门狗把锁的过期时间固定为不续期
B 看门狗由持有者异步续期,可重入通过持有者标识+计数实现 ✓ 正确答案
C 可重入意味着任意线程都能重入加锁
D 看门狗续期不需要校验持有者
#

7. Redis 的 Stream(5.0+)与 Kafka 在 Java 消息队列场景下的工程取舍

A Kafka 适合大规模高吞吐与持久化,Stream 适合轻量低延迟场景 ✓ 正确答案
B Stream 能任意持久化海量历史
C Stream 吞吐一定高于 Kafka
D 两者完全等价
#

8. Valkey 8.0 GA 与 Spring Data Redis / Lettuce / Jedis 的兼容性矩阵、cluster topology 设计的工程价值?

A Valkey 与 RESP 协议兼容,Lettuce/Jedis/Spring Data Redis 可平滑接入 ✓ 正确答案
B 必须重写客户端才能使用 Valkey
C Valkey 不支持集群拓扑
D Valkey 采用专有协议,Java 客户端无法使用
#

9. Lettuce 断线重连与 Cluster 拓扑刷新(topology refresh)的触发条件与故障转移风险

A MOVED/连接重置等事件会触发自适应刷新,故障转移期需配合重试避免误判 ✓ 正确答案
B 拓扑刷新只在启动时执行一次
C 断线后客户端永不重连
D 刷新越频繁越安全,无任何代价
#

10. Lettuce 与 Jedis 客户端对比

A Lettuce 基于 Netty,单连接可复用且支持响应式,是 Spring 默认客户端 ✓ 正确答案
B 两者都是阻塞式,必须每线程一连接
C Jedis 支持响应式 API
D Lettuce 不支持集群
#

11. Lettuce 的 ClientResources 与连接复用

A 每个 RedisClient 都必须独立创建一套 EventLoopGroup
B ClientResources 与连接无关
C ClientResources 是共享资源容器,可被多个客户端复用,关闭时需释放 ✓ 正确答案
D ClientResources 无需释放
#

12. Lettuce 与 Jedis 的对比,连接复用、线程安全、集群模式与响应式支持如何?

A 两者都原生支持响应式 API
B Lettuce 共享连接线程安全且支持响应式,Jedis 通常阻塞式、连接非线程安全 ✓ 正确答案
C Jedis 线程安全、连接可共享
D 两者连接模型完全一致
#

13. Spring Data Redis 的序列化与模板,StringRedisTemplate vs RedisTemplate 的坑如何?

A StringRedisTemplate 无法读写字符串
B 两者序列化策略完全相同
C RedisTemplate 默认就是 JSON 序列化
D RedisTemplate 默认用 JDK 序列化(key 带二进制前缀),StringRedisTemplate 用 String 序列化,混用会导致读写不一致 ✓ 正确答案
#

14. Spring Data Redis 的 Repository(@RedisHash 二级索引)的能力与性能边界

A 支持任意复杂条件与聚合查询
B 索引由数据库自动维护,无写放大
C 用 @Indexed 维护索引 Set 换取按字段查询能力,但写有放大、仅支持等值查询 ✓ 正确答案
D 与关系型数据库查询能力等价
#

15. 基于 Redis 的限流计数器(INCR + 过期、Lua 滑动窗口)在 Java 客户端中的实现

A 滑动窗口用 ZSET 精确统计但内存高,固定窗口用 INCR+EXPIRE 简单但有边界毛刺,Lua 可保证原子性 ✓ 正确答案
B 限流无需考虑原子性
C 固定窗口无边界突刺问题
D 只能使用固定窗口
#

16. Jedis 的连接池配置(JedisPoolConfig)

A maxTotal 设置后永不改变
B testOnBorrow 免费无开销
C 连接池参数不影响性能
D maxTotal 决定连接池上限,maxWaitMillis 决定等待超时,testOnBorrow 会带来校验开销 ✓ 正确答案
#

17. RedisTemplate 的管道与事务,multi/exec 与 pipeline 的性能差异如何?

A 两者完全相同
B pipeline 保证原子性
C multi/exec 一定比 pipeline 快
D multi/exec 保证原子性但提升有限,pipeline 减少网络往返提升吞吐但不保证原子性 ✓ 正确答案
#

18. Redis 连接池与 Lettuce 共享连接,并发安全与资源释放如何?

A Lettuce 共享连接线程安全,可并发复用;用完需 close/shutdown 释放底层资源 ✓ 正确答案
B 共享连接非线程安全,必须加锁
C 连接无需关闭
D 连接池与共享连接互斥
#

19. Lettuce 的连接超时与命令超时(commandTimeout)配置对慢命令与故障转移的影响

A 超时越小越安全
B 超时过小会误伤慢命令,过大则故障转移期间命令挂起过久,需平衡并结合重试 ✓ 正确答案
C 超时只影响连接建立不影响命令
D 命令超时决定后不可配置