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

【Redis】SpringDataRedis

Spring Data Redis 使得开发者能够更容易地与 Redis 数据库进行交互,并且支持不同的 Redis 客户端实现,如 JedisLettuce。Spring Data Redis 会自动选择一个客户端,通常情况下,Spring Boot 默认使用 Lettuce 作为 Redis 客户端。你也可以选择使用 Jedis

Spring Data Redis 的使用步骤

(1)引入spring-boot-starter-data-redis依赖

<dependency><!--redia依赖--><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><!--common-pool--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>

(2)在application.yml配置Redis信息

spring:data:redis:host: 192.168.30.130port: 6379password: xxxxxxpool:max-active: 8max-idle: 8min-idle: 0max-wait: 100ms

(3)注入RedisTemplate

SpringDataRedis 是 Spring Data Redis 中最重要的工具类,其中封装了各种对Redis的操作,并且将不同数据类型的操作API封装到了不同的类型中。

SpringDataRedis 可以接受任何类型的java对象,并通过 RedisSerializer 将它们转成 Redis 可以处理的字节(byte[])格式。这是因为 Redis 本身只能够存储字节数据,而不能直接存储 Java 对象。因此,Spring Data Redis 提供了自动序列化和反序列化机制来支持 Java 对象的存储和读取。

@SpringBootTest
class RedisDemoApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Testvoid testString() {//写入一条String数据redisTemplate.opsForValue().set("name","虎哥");//获取string数据Object name = redisTemplate.opsForValue().get("name");System.out.println("name = " + name);}}

 RedisTemplate 默认使用 JDKSerializationRedisSerializer 来序列化和反序列化对象,但它具有不可读性,JDK 序列化的字节流是二进制的,不易于人工读取或调试。如果你需要查看 Redis 中存储的数据,JDK 序列化的对象将无法直接转换回人类可读的格式,这使得调试和监控变得困难。

可以自定义RedisTemplate的序列化方式,常见做法是key使用String序列化(StringRedisSerializer),value使用JSON序列化(GenericJackson2JsonRedisSerializer)。这种方法可以自动帮我们处理JSON的序列化和反序列化,但是会占用额外空间。

所以为了节省空间,我们并不会使用JSON序列化器来处理value,而是统一使用String序列化器(StringRedisTemplate),要求只能存储String类型的key和value。当需要存储java对象时,手动把对象序列化为JSON,读取Redis时手动把读取到的JSON反序列化为对象。

@SpringBootTest
class RedisStringTests {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Testvoid testString() {//写入一条String数据stringRedisTemplate.opsForValue().set("name","虎哥");//获取string数据Object name = stringRedisTemplate.opsForValue().get("name");System.out.println("name = " + name);}private static final ObjectMapper mapper = new ObjectMapper();@Testvoid testSaveUser() throws JsonProcessingException {//创建对象User user = new User("虎哥", 21);//手动序列化String json = mapper.writeValueAsString(user);//写入数据stringRedisTemplate.opsForValue().set("user:200",json);//获取数据String jsonUser = stringRedisTemplate.opsForValue().get("user:200");//手动反序列化User user1 = mapper.readValue(jsonUser, User.class);System.out.println("user1 = " + user1);}@Testvoid testHash() {stringRedisTemplate.opsForHash().put("user:400","name","虎哥");stringRedisTemplate.opsForHash().put("user:400","age","21");Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries("user:400");System.out.println("entries = " + entries);}
}

相关文章:

  • 【单片机 C语言】单片机学习过程中常见C库函数(学习笔记)
  • 悬空引用和之道、之禅-《分析模式》漫谈57
  • 异或区间的划分
  • CmStick CmStick ME|精工品质与工业级安全的加密狗之选[特殊字符][特殊字符]
  • CTF web入门之SQL注入使用工具sqlmap
  • 基于Spring Boot+微信小程序的智慧农蔬微团购平台-项目分享
  • 国产仪器进化论:“鲁般号”基于无人机的天线测试系统
  • idea使用docker插件一键部署项目
  • 2025年一站式AI创作平台主要功能介绍及使用教程
  • Idea中实用设置和插件
  • 第一章:自然语言处理
  • RAG应用过程监控系统选型:LangFuse
  • 使用tabs组件搭建UI框架
  • 4月21日日记
  • 基于MuJoCo物理引擎的机器人学习仿真框架robosuite
  • Python+CoppeliaSim+ZMQ remote API控制机器人跳舞
  • 服务器监控软件推荐
  • SpringBoot中PDF处理完全指南
  • 报错 | 配置 postcss 出现 报错:A `require()` style import is forbidden.
  • Android Studio 国内镜像使用与 SDK 下载速度优化指南
  • 郑州卫健委通报郑飞医院“血液净化”问题:拟撤销该院血液净化技术备案
  • 印度空军计划增购40架法制“阵风”战机,此前已购买36架
  • 陈杨梅:刷到“棉花糖爸爸”寻女视频,隐约觉得自己就是爸爸要找的孩子
  • 阿塞拜疆总统阿利耶夫将访华
  • 全球南方声势卓然壮大的历史逻辑——写在万隆会议召开70周年之际
  • 五一出境游火爆:境外包车订单增长25%,日本酒店价格贵了好几倍