☰
Redis基础day02
2026/10/14 10:40:15 网站建设 项目流程

一、Jedis

1. Jedis官网地址

https://github.com/redis/jedis

2. 快速入门

(1)引入Maven依赖
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version></dependency>
(2)建立Redis直连
privateJedisjedis;@BeforeEachvoidsetUp(){//建立连接jedis=newJedis("192.168.100.129",6379);//设置密码jedis.auth("1234");//选择数据库jedis.select(0);}
(3)测试String类型操作
@TestvoidtestString(){//添加Stringresult=jedis.set("name","阳哥");System.out.println(result);//获取Stringname=jedis.get("name");System.out.println(name);}
(4)释放连接资源
@AfterEachvoidtearDown(){if(jedis!=null){jedis.close();}}

3. Jedis连接池

使用原因

Jedis原生直连线程不安全;频繁创建、销毁TCP连接会产生大量性能开销,项目生产环境推荐使用Jedis连接池复用连接。

连接池工具类
publicclassJedisConnectionFactory{privatestaticJedisPooljedisPool;static{// 配置连接池参数JedisPoolConfigpoolConfig=newJedisPoolConfig();poolConfig.setMaxTotal(8);// 最大总连接数poolConfig.setMaxIdle(8);// 最大空闲连接数poolConfig.setMinIdle(0);// 最小空闲连接数poolConfig.setMaxWaitMillis(1000);// 获取连接最大等待毫秒数// 初始化连接池jedisPool=newJedisPool(poolConfig,"192.168.100.129",6379,1000,"1234");}// 从连接池获取Jedis连接publicstaticJedisgetJedis(){returnjedisPool.getResource();}}

二、SpringDataRedis

简介

SpringDataRedis是Spring家族中用于数据访问的子模块,专门封装Redis客户端操作,底层支持Lettuce(默认,基于Netty异步非阻塞)与Jedis两种客户端,提供统一RedisTemplateAPI简化Redis各类数据类型操作。

核心能力:

  1. 统一封装Redis五大常用数据类型操作API
  2. 原生支持发布订阅、哨兵、Redis集群
  3. 支持响应式编程、多种序列化方案
  4. 提供集合封装,可直接用Java集合方式操作Redis

1. 快速入门

(1)导入依赖
<!-- SpringBoot Redis Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- 连接池依赖 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency>
(2)application.yml 配置文件
spring:data:redis:host:192.168.100.129port:6379password:1234lettuce:pool:max-active:8max-idle:8min-idle:0max-wait:100
(3)注入模板并测试
@AutowiredprivateRedisTemplateredisTemplate;@TestvoidtestString(){//写入数据redisTemplate.opsForValue().set("name","小王");//获取数据Objectname=redisTemplate.opsForValue().get("name");System.out.println(name);}

RedisTemplate 分类API对照表

API返回值类型说明
redisTemplate.opsForValue()ValueOperations操作String字符串类型
redisTemplate.opsForHash()HashOperations操作Hash哈希类型
redisTemplate.opsForList()ListOperations操作List列表类型
redisTemplate.opsForSet()SetOperations操作Set无序集合类型
redisTemplate.opsForZSet()ZSetOperations操作SortedSet有序集合
redisTemplate 本身RedisTemplate通用Redis全局命令(删除key、设置过期时间、查询key等)

三、SpringDataRedis 序列化机制详解

1. 默认序列化规则与问题

RedisTemplate默认使用JDK原生序列化:
存入Redis时会把Java对象序列化为二进制字节数组,读取时再反序列化转回对象。

两大缺点
  1. 可读性极差:Redis客户端查看key/value会显示乱码二进制串(对应你截图里的\xac\xed前缀乱码),无法直观查看存储内容;
  2. 内存冗余大:JDK序列化会附带类路径、版本号等额外元信息,占用更多Redis存储空间。

2. 两种主流优化序列化方案

方案一:自定义RedisTemplate,全局JSON序列化

替换默认JDK序列化器,Key/HashKey使用字符串序列化,Value/HashValue使用Jackson JSON序列化,存入Redis为标准JSON格式,兼顾可读性与便捷性。

@ConfigurationpublicclassRedisConfig{@BeanpublicRedisTemplate<String,Object>redisTemplate(RedisConnectionFactoryfactory){//创建RedisTemplate对象RedisTemplate<String,Object>template=newRedisTemplate<>();//设置连接工厂template.setConnectionFactory(factory);// 创建JSON序列化工具GenericJackson2JsonRedisSerializerjsonRedisSerializer=newGenericJackson2JsonRedisSerializer();//设置key、hashKey 序列化方式为字符串template.setKeySerializer(RedisSerializer.string());template.setHashKeySerializer(RedisSerializer.string());//设置value、hashValue 序列化方式为JSONtemplate.setValueSerializer(jsonRedisSerializer);template.setHashValueSerializer(jsonRedisSerializer);template.afterPropertiesSet();returntemplate;}}

优点:直接存入Java对象,框架自动序列化/反序列化,业务代码极简;
缺点:JSON中会额外携带@class字段记录实体类全限定名,依旧存在少量内存浪费。

方案二:使用原生 StringRedisTemplate(推荐)

SpringBoot内置StringRedisTemplate,所有key、value强制只能存储String字符串,无任何默认序列化乱码问题。
需要存储Java对象时,手动借助ObjectMapper完成 对象 ↔ JSON字符串 互转。

示例代码
// Jackson提供,负责Java对象与JSON字符串双向转换privatestaticfinalObjectMapperobjectMapper=newObjectMapper();@TestvoidtestUser(){//创建实体对象Useruser=newUser("虎哥",21);//手动序列化:Java对象 → JSON字符串Stringjson=objectMapper.writeValueAsString(user);//写入RedisstringRedisTemplate.opsForValue().set("user:200",json);//读取Redis字符串StringjsonUser=stringRedisTemplate.opsForValue().get("user:200");//手动反序列化:JSON字符串 → Java对象Useruser1=objectMapper.readValue(jsonUser,User.class);System.out.println(user1);}

优点:Redis存储纯JSON文本,无多余字段,内存占用最小、无乱码、排查数据极其方便;
缺点:存取对象需要手动序列化与反序列化,少量增加代码量。

补充说明

  • ObjectMapper属于Jackson框架核心工具类,SpringBoot web依赖已自动引入,无需额外导包

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询