👀概述
- Redis是一个高级key/value存储。它类似于memcached,但数据集是不稳定(volatile)的,值可以是字符串,与memcached完全一样,也可以是列表、集合和有序集合。所有这些数据类型都可以通过原子操作来操作,如push/pop元素、添加/删除元素、执行服务器端的并集、交集、差集等等。Redis支持不同类型的排序能力。
- Spring Data Redis为Spring应用程序提供了简单的配置和对Redis的访问。它为与存储(store)的互动提供了低级和高级的抽象,将用户从基础设施的关注中解放出来。
👀Redis的要求
- Spring Redis需要Redis 2.6或以上版本,Spring Data Redis与 Lettuce 和 Jedis(两个流行的Redis开源Java库)整合。
👀Redis 配置
RedisCacheManager 默认配置:
设置 | 值 | 描述 |
---|---|---|
Cache Writer | 无锁,KEYS 批处理策略 | 缓存写入策略,默认使用无锁方式,可能切换到 SCAN 策略 |
Cache Configuration | RedisCacheConfiguration#defaultConfiguration | 缓存配置,默认配置 RedisCacheConfiguration#defaultConfiguration |
Initial Caches | None | 初始缓存,默认情况下没有定义初始缓存 |
Transaction Aware | No | 是否事务感知,默认不支持事务感知 |
RedisCacheConfiguration 默认配置:
设置 | 值 | 描述 |
---|---|---|
Key Expiration | None | 缓存键过期时间,默认情况下不设置过期时间 |
Cache null | Yes | 是否缓存空值,默认情况下会缓存空值 |
Prefix Keys | Yes | 是否对缓存键添加前缀,默认情况下会添加前缀 |
Default Prefix | The actual cache name | 默认的缓存键前缀,默认使用实际的缓存名称作为前缀 |
Key Serializer | StringRedisSerializer | 缓存键的序列化器,默认使用 StringRedisSerializer |
Value Serializer | JdkSerializationRedisSerializer | 缓存值的序列化器,默认使用 JdkSerializationRedisSerializer |
Conversion Service | 带有默认 cache key converter 的 DefaultFormattingConversionService | 转换服务,用于将缓存键或值进行转换,默认带有默认的缓存键转换器 |
👀Redis 支持的功能 / 特性
支持的功能 / 特性 | Lettuce | Jedis | Redisson |
---|---|---|---|
单机连接 | 支持 | 支持 | 支持 |
主/从 连接 | 支持 | 支持 | |
Redis 哨兵模式 | 主服务器查找, 哨兵验证, 读取副本 | 主服务器查找 | 主服务器查找, 哨兵验证, 读取副本 |
Redis 集群 | 集群连接, 集群节点连接, 读取副本 | 集群连接, 集群节点连接 | 集群连接, 集群节点连接, 读取副本 |
传输通道 | TCP, 操作系统原生TCP (epoll, kqueue), Unix 域套接字 | TCP | TCP, Unix 域套接字 |
连接池 | 支持 (使用 commons-pool2) | 支持 (使用 commons-pool2) | 支持 (内置) |
其他连接特性 | 单连接共享用于非阻塞命令 | 管道和事务是互斥的。在管道/事务中不能使用服务器/连接命令。 | 分布式锁, 语义发布/订阅等高级特性 |
SSL 支持 | 支持 | 支持 | 支持 |
发布/订阅 | 支持 | 支持 | 支持 |
管道 | 支持 | 支持 (管道和事务是互斥的) | 支持 |
事务 | 支持 | 支持 (管道和事务是互斥的) | 支持 |
数据类型支持 | 键, 字符串, 列表, 集合, 有序集, 哈希, 服务器, 流, 脚本, 地理, HyperLogLog | 键, 字符串, 列表, 集合, 有序集, 哈希, 服务器, 脚本, 地理, HyperLogLog | 键, 字符串, 列表, 集合, 有序集, 哈希, 服务器, 脚本, 地理, HyperLogLog, 多种高级数据结构 |
响应式 (非阻塞) API | 支持 | 支持 | |
优点 | - 线程安全 - 支持自动重连 - 丰富的数据结构 | - 简单且直接 - 性能高 | - 丰富的 API 和数据结构 - 高度可配置 - 内置连接池 |
缺点 | - 由于其复杂的内部结构, 可能稍慢 | - 非线程安全 - 可能不支持所有高级功能 | - 较为重量级 |
区别 | - 提供响应式编程支持 - 默认客户端 | - 为底层的客户端 - 不支持响应式编程 | - 提供了许多高级特性,如分布式锁 - 基于Netty实现 |
使用场景 | - 需要线程安全 - 与 Redis 集群交互 | - 单一 Redis 节点或哨兵模式 - 需要轻量级的客户端 | - 需要实现分布式锁 - 需要使用高级数据结构和功能 |