redis--003

一、Jedis(原生 Redis Java 客户端)

Jedis 是 Redis 官方推荐的 Java 原生客户端,方法名几乎和 Redis 命令完全一致,上手简单。

1、基础直连使用

  1. 引入 Maven 依赖

    redis.clients jedis 3.7.0
  2. 创建连接

    // new Jedis(IP,端口)
    jedis = new Jedis("192.168.150.101",6379);
    jedis.auth("密码"); //设置密码
    jedis.select(0); //选择0号数据库

  3. CRUD 示例(String 类型)

    jedis.set("name","张三"); //存
    jedis.get("name"); //取

  4. 资源释放 :使用完毕必须jedis.close()关闭连接,释放网络资源;单元测试可以用@AfterEach注解,测试结束自动关闭。

⚠️缺点:Jedis 实例线程不安全 ;频繁new Jedis()创建销毁连接性能差,生产环境禁止直接直连。

2、Jedis 连接池

  • 作用:复用连接,避免频繁创建销毁;解决线程不安全问题。
  • 核心配置参数
    • maxTotal:最大总连接数
    • maxIdle:最大空闲连接
    • minIdle:最小空闲连接
    • maxWaitMillis:获取连接最长等待时间 (ms)
  • 使用:静态代码块初始化JedisPool,调用getResource()获取 Jedis 对象;用完归还连接池,不手动 close。

二、SpringDataRedis(SpringBoot 集成 Redis)

SpringData 是 Spring 的数据操作模块,SpringDataRedis 是专门操作 Redis 的子模块,底层支持两套客户端:Jedis、Lettuce,SpringBoot2 默认 Lettuce。

1、依赖导入

复制代码
<!-- spring‑data‑redis启动器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‑boot‑starter‑data‑redis</artifactId>
</dependency>
<!-- 连接池依赖(commons‑pool2) -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons‑pool2</artifactId>
</dependency>

2、核心工具类 RedisTemplate

自动注入@Autowired private RedisTemplate redisTemplate; 不同数据类型,对应不同操作 API:

表格

API 作用
redisTemplate.opsForValue() 操作 String 字符串
redisTemplate.opsForHash() 操作 Hash
redisTemplate.opsForList() 操作 List
redisTemplate.opsForSet() 操作 Set
redisTemplate.opsForZSet() 操作 ZSet 有序集合

示例:

复制代码
//存字符串
redisTemplate.opsForValue().set("name","李四");
//读取
Object name = redisTemplate.opsForValue().get("name");

3、序列化问题

  1. 默认序列化缺陷:RedisTemplate 默认使用 JDK 序列化,存入 Redis 的 key/value 会出现乱码前缀,可读性差,只支持 Java 对象。
  2. 自定义序列化方案
    • key、hashKey:使用StringRedisSerializer字符串序列化
    • value、hashValue:使用GenericJackson2JsonRedisSerializerJSON 序列化,可以直接把对象序列化为 JSON 字符串存入 Redis。
    • 通过@Bean自定义 RedisTemplate 覆盖默认配置。
  3. StringRedisTemplate(Spring 自带)
  • key、value 全部强制字符串序列化,不会产生乱码,不需要自定义序列化配置。
  • 局限:只能存字符串;Java 对象需要手动借助ObjectMapper完成对象↔JSON 字符串的转换。

对比记忆

  • RedisTemplate:可存对象,默认 JDK 序列化乱码,需要自定义 JSON 序列化;
  • StringRedisTemplate:只操作字符串,无乱码,对象要手动 JSON 转换。

三、Jedis vs SpringDataRedis 对比

表格

对比项 Jedis SpringDataRedis(RedisTemplate)
层级 原生底层客户端 Spring 高层封装
API 和 Redis 命令几乎一模一样 封装 opsForXXX 系列 API
线程安全 Jedis 实例不安全,依赖连接池 线程安全,直接注入使用
序列化 不需要序列化,存字节 / 字符串 自带序列化机制,需要关注乱码问题
适用场景 简单测试、传统 Java 项目 SpringBoot 项目,企业开发主流
相关推荐
龙腾AI白云6 小时前
AI检索增强生成(RAG):解决大模型幻觉的核心落地技术
数据库·人工智能·机器学习·知识图谱
一 乐6 小时前
动漫书销售商城|基于springboot + vue动漫书销售商城(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计
zzj_2626106 小时前
MySQL常用操作
数据库·mysql
其实防守也摸鱼6 小时前
Fastjson 反序列化漏洞(JNDI注入)
android·数据库·安全·oracle·自动化·fastjson·反序列化
haerapi7 小时前
把 PostgreSQL 复制巡检做成可审计闭环:确定性采集、阈值判定与受控模型归纳
数据库·postgresql
微学AI8 小时前
不让每一步都调用最贵模型:用蓝耘智能路由改造自主式研究 Agent
数据库·人工智能·蓝耘
yjb.gz8 小时前
Oracle19 RAC查看集群状态及磁盘空间情况(巡检)
数据库
钝挫力PROGRAMER8 小时前
开发踩坑记:MyBatis selectKey、空 SQL
数据库·sql·mybatis
JosieBook8 小时前
【数据库】MySQL 实战精通系列 · 第6篇:InnoDB 存储引擎、日志与崩溃恢复
数据库·mysql
杨云龙UP9 小时前
TDengine 3.4.2.8 Community 三节点三副本生产集群部署实战(DNode/MNode/taosAdapter/Explorer)
大数据·linux·运维·数据库·tdengine·时序库