当前位置: 首页 > 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);}
}
http://www.xdnf.cn/news/62137.html

相关文章:

  • 【自然语言处理与大模型】模型压缩技术之量化
  • 在线查看【免费】avi,mov,rm,webm,ts,rm,mkv,mpeg,ogg,mpg,rmvb,wmv,3gp,ts,swf文件格式网站
  • Spring Boot 集成 Redis 实战总结
  • Idea中实用设置和插件
  • 系统架构师2025年论文《论基于UML的需求分析》
  • 项目实战 -- 发布管理
  • 把dll模块注入到游戏进程的方法_基于文件修改的注入方式
  • SQL语言的三大分类及其应用详解
  • 欧拉-国产操作系统替代产品如何
  • FreeRTOS中的优先级翻转问题及其解决方案:互斥信号量详解
  • ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(显示输出类外设之IS31FL3216)
  • DeepSeek+Cursor+Devbox+Sealos项目实战
  • IP精准检测“ipinfo”
  • Flask API 项目 Swagger 版本打架不兼容
  • ADC数据不稳定的解决方案
  • Java学习手册:HTTP 协议基础知识
  • 【Maven基础】
  • 霍尔效应的应用领域
  • QT 5.15 程序打包
  • 【无人机】无人机方向的设置,PX4飞控方向,QGC中设置飞控的方向/旋转角度。PX4使用手册飞行控制器/传感器方向
  • [原理分析]安卓15系统大升级:Doze打盹模式提速50%,续航大幅增强,省电提升率5%
  • Android Studio 国内镜像使用与 SDK 下载速度优化指南
  • list的学习
  • 超详细mac上用nvm安装node环境,配置npm
  • 基于RK3588+FPGA+AI YOLO全国产化的无人船目标检测系统(二)平台设计
  • Java 性能优化:如何利用 APM 工具提升系统性能?
  • 每日一题(小白)回溯篇7
  • python测试框架之pytest
  • 基于STC89C52RC和8X8点阵屏、独立按键的匹配消除类小游戏
  • 线上救急-AWS限频