设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间04 现在时间04 缓存数据 十七岁吻的人额头没有粉底

十七岁吻的人额头没有粉底 -- 十七岁

查看: 259|回复: 0

Redis之SpringDataRedis用法详解

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:205
  • 打卡月天数:0
  • 打卡总奖励:3138
  • 最近打卡:2023-08-27 10:06:29
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
447
主题
414
精华
0
金钱
4448
积分
877
注册时间
2022-12-21
最后登录
2025-5-31

发表于 2025-5-31 05:56:27 | 显示全部楼层 |阅读模式

Spring Data Redis 使得开发者能够更容易地与 Redis 数据库进行交互,并且支持不同的 Redis 客户端实现,如 JedisLettuce

Spring Data Redis 会自动选择一个客户端,通常情况下,Spring Boot 默认使用 Lettuce 作为 Redis 客户端。你也可以选择使用 Jedis

Spring Data Redis 的使用步骤

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

  1. <dependency>
  2. <!--redia依赖-->
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-data-redis</artifactId>
  5. </dependency>
  6. <!--common-pool-->
  7. <dependency>
  8. <groupId>org.apache.commons</groupId>
  9. <artifactId>commons-pool2</artifactId>
  10. </dependency>
复制代码

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

  1. spring:
  2. data:
  3. redis:
  4. host: 192.168.30.130
  5. port: 6379
  6. password: xxxxxx
  7. pool:
  8. max-active: 8
  9. max-idle: 8
  10. min-idle: 0
  11. max-wait: 100ms
复制代码

(3)注入RedisTemplate

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

SpringDataRedis 可以接受任何类型的java对象,并通过

  1. RedisSerializer
复制代码
将它们转成 Redis 可以处理的字节(byte[])格式。

这是因为 Redis 本身只能够存储字节数据,而不能直接存储 Java 对象。因此,Spring Data Redis 提供了自动序列化和反序列化机制来支持 Java 对象的存储和读取。

  1. @SpringBootTest
  2. class RedisDemoApplicationTests {
  3. @Autowired
  4. private RedisTemplate redisTemplate;
  5. @Test
  6. void testString() {
  7. //写入一条String数据
  8. redisTemplate.opsForValue().set("name","虎哥");
  9. //获取string数据
  10. Object name = redisTemplate.opsForValue().get("name");
  11. System.out.println("name = " + name);
  12. }
  13. }
复制代码

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

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

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

  1. @SpringBootTest
  2. class RedisStringTests {
  3. @Autowired
  4. private StringRedisTemplate stringRedisTemplate;
  5. @Test
  6. void testString() {
  7. //写入一条String数据
  8. stringRedisTemplate.opsForValue().set("name","虎哥");
  9. //获取string数据
  10. Object name = stringRedisTemplate.opsForValue().get("name");
  11. System.out.println("name = " + name);
  12. }
  13. private static final ObjectMapper mapper = new ObjectMapper();
  14. @Test
  15. void testSaveUser() throws JsonProcessingException {
  16. //创建对象
  17. User user = new User("虎哥", 21);
  18. //手动序列化
  19. String json = mapper.writeValueAsString(user);
  20. //写入数据
  21. stringRedisTemplate.opsForValue().set("user:200",json);
  22. //获取数据
  23. String jsonUser = stringRedisTemplate.opsForValue().get("user:200");
  24. //手动反序列化
  25. User user1 = mapper.readValue(jsonUser, User.class);
  26. System.out.println("user1 = " + user1);
  27. }
  28. @Test
  29. void testHash() {
  30. stringRedisTemplate.opsForHash().put("user:400","name","虎哥");
  31. stringRedisTemplate.opsForHash().put("user:400","age","21");
  32. Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries("user:400");
  33. System.out.println("entries = " + entries);
  34. }
  35. }
复制代码

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持晓枫资讯。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表