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

springboot整合redis-RedisTemplate单机模式

springboot整合redis-RedisTemplate单机模式

文档

  1. redis单机安装
  2. redis常用的五种数据类型
  3. redis数据类型-位图bitmap
  4. redis数据类型-基数统计HyperLogLog
  5. redis数据类型-地理空间GEO
  6. redis数据类型-流Stream
  7. redis数据类型-位域bitfield
  8. redis持久化-RDB
  9. redis持久化-AOF
  10. redis持久化-RDB+AOF混合模式
  11. redis持久化-纯缓存模式
  12. redis事务
  13. redis管道 -redis pipeline -redis pipelining
  14. redis发布订阅
  15. redis主从复制
  16. redis哨兵模式
  17. redis集群模式 -分区算法
  18. redis集群模式 -集群搭建
  19. redis集群模式 -节点故障 -节点主从调整
  20. redis集群模式 -扩缩容
  21. redis集群模式 -批量操作
  22. springboot整合redis-Jedis
  23. springboot整合redis-Lettuce

官方文档

  1. 官网操作命令指南页面:https://redis.io/docs/latest/commands/?name=get&group=string
  2. Redis cluster specification

说明

  1. redis版本:7.0.0
  2. springboot版本:3.2.0

springboot整合redis-RedisTemplate单机模式

安装单机版redis
  1. 安装单机版redis参考文档:redis单机安装
引入依赖
  1. 引入依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
    • 版本号:3.2.0,与springboot版本一致
配置连接信息
  1. 修改application.yml配置文件

    spring:data:redis:database: 0host: 192.168.145.132port: 6379password: 123456lettuce:pool:max-active: 8max-wait: -1msmax-idle: 8min-idle: 0
    
  2. 在配置中,默认生效的spring.data.redis.client-typelettuce

  3. 启动服务默认加载的RedisTemplateStringRedisTemplate的Bean对象,使用的RedisConnectionFactoryLettuceConnectionFactory实现类对象。自定义RedisTemplate的Bean时,也使用LettuceConnectionFactory。参考:org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration

示例
  1. 启动springboot服务,通过注入RedisTemplate的对象来操作reids

  2. 添加接口OrderService

    public interface OrderService {void addOrder();String getOrderById(Integer keyId);
    }
    
  3. 添加实现类OrderServiceImpl

    @Service
    public class OrderServiceImpl implements OrderService {public static final Logger logger = LoggerFactory.getLogger(OrderServiceImpl.class);@Autowiredprivate RedisTemplate redisTemplate;@Overridepublic void addOrder() {int keyId = ThreadLocalRandom.current().nextInt(1000) + 1;String serialNo = UUID.randomUUID().toString();String key = "order:" + keyId;String value = "order:" + serialNo;redisTemplate.opsForValue().set(key, value);logger.info("redis key: {}", key);logger.info("redis value: {}", value);String key1 = "order订单:" + keyId;String value1 = "order内容:" + serialNo;redisTemplate.opsForValue().set(key1, value1);logger.info("redis key: {}", key1);logger.info("redis value: {}", value1);}@Overridepublic String getOrderById(Integer keyId) {String key = "order:" + keyId;String value = (String) redisTemplate.opsForValue().get(key);logger.info("redis key: {}", key);logger.info("redis value: {}", value);String key1 = "order订单:" + keyId;String value1 = (String) redisTemplate.opsForValue().get(key1);logger.info("redis key: {}", key1);logger.info("redis value: {}", value1);return value;}
    }
    
  4. 添加Controller类OrderController

    @RestController
    @RequestMapping("order")
    public class OrderController {@Autowiredprivate OrderService orderService;@GetMapping("add")public void addOrder() {orderService.addOrder();}@GetMappingpublic String getOrderById(@RequestParam("keyId") Integer keyId) {return orderService.getOrderById(keyId);}
    }
    
使用RedisTemplate产生的序列化问题
  1. OrderServiceImpl类中注入的是RedisTemplate,并且没有泛型,将出现序列化问题

    @Autowired
    private RedisTemplate redisTemplate;
    
  2. 调用接口http://localhost:8080/redis01/order/add,redis设置key、value,控制台打印日志如下:

    2025-10-19T16:23:01.573+08:00  INFO 3176 --- [nio-8080-exec-5] x.y.r.service.impl.OrderServiceImpl      : redis key: order:966
    2025-10-19T16:23:01.573+08:00  INFO 3176 --- [nio-8080-exec-5] x.y.r.service.impl.OrderServiceImpl      : redis value: order:1db5b3cc-dac2-4cdc-952f-2800a887249f
    2025-10-19T16:23:01.574+08:00  INFO 3176 --- [nio-8080-exec-5] x.y.r.service.impl.OrderServiceImpl      : redis key: order订单:966
    2025-10-19T16:23:01.575+08:00  INFO 3176 --- [nio-8080-exec-5] x.y.r.service.impl.OrderServiceImpl      : redis value: order内容:1db5b3cc-dac2-4cdc-952f-2800a887249f
    
  3. 调用接口http://localhost:8080/redis01/order?keyId=966,根据redis的key获取value,控制台打印日志如下:

    2025-10-19T16:24:04.086+08:00  INFO 3176 --- [nio-8080-exec-7] x.y.r.service.impl.OrderServiceImpl      : redis key: order:966
    2025-10-19T16:24:04.086+08:00  INFO 3176 --- [nio-8080-exec-7] x.y.r.service.impl.OrderServiceImpl      : redis value: order:1db5b3cc-dac2-4cdc-952f-2800a887249f
    2025-10-19T16:24:04.086+08:00  INFO 3176 --- [nio-8080-exec-7] x.y.r.service.impl.OrderServiceImpl      : redis key: order订单:966
    2025-10-19T16:24:04.086+08:00  INFO 3176 --- [nio-8080-exec-7] x.y.r.service.impl.OrderServiceImpl      : redis value: order内容:1db5b3cc-dac2-4cdc-952f-2800a887249f
    
  4. 从日志可以看出,并不是中文乱码导致的问题

  5. 在redis命令行,使用命令./redis-cli -p 6379 -a 123456查看

    127.0.0.1:6379> keys *
    1) "\xac\xed\x00\x05t\x00\x0forder\xe8\xae\xa2\xe5\x8d\x95:966"
    2) "\xac\xed\x00\x05t\x00\torder:966"
    127.0.0.1:6379> get "\xac\xed\x00\x05t\x00\x0forder\xe8\xae\xa2\xe5\x8d\x95:966"
    "\xac\xed\x00\x05t\x000order\xe5\x86\x85\xe5\xae\xb9:1db5b3cc-dac2-4cdc-952f-2800a887249f"
    127.0.0.1:6379> 
    
  6. 在redis命令行,使用命令./redis-cli -p 6379 -a 123456 --raw查看

    127.0.0.1:6379> keys *
    ¬쳯rder订单:966
    ¬	order:966
    127.0.0.1:6379> get "\xac\xed\x00\x05t\x00\x0forder订单:966"
    ¬첰order内容:1db5b3cc-dac2-4cdc-952f-2800a887249f
    
  7. 从命令行可以看出,中文是可以正常显示的

  8. 可以看出,使用RedisTemplate,会在key和value上都增加了前缀\xac\xed\x00\x05t\x00,这是序列化问题导致的

  9. 如果OrderServiceImpl类中注入的是RedisTemplate<String, String>,有String泛型,则该注入的对象为StringRedisTemplate类型,可以解决序列化问题

    @Autowired
    private RedisTemplate<String, String> redisTemplate;
    
使用StringRedisTemplate解决序列化问题
  1. 如果OrderServiceImpl类中注入的是StringRedisTemplate,可以解决序列化问题

    @Autowired
    private StringRedisTemplate redisTemplate;
    
  2. StringRedisTemplate重写了序列化方法,参考:org.springframework.data.redis.core.StringRedisTemplate

    public StringRedisTemplate() {this.setKeySerializer(RedisSerializer.string());this.setValueSerializer(RedisSerializer.string());this.setHashKeySerializer(RedisSerializer.string());this.setHashValueSerializer(RedisSerializer.string());
    }
    
自定义RedisTemplate的Bean
  1. 自定义RedisTemplate的Bean后,默认的RedisTemplate的Bean将失效

  2. 添加配置类RedisConfig,自定义RedisTemplate的Bean

    @Configuration
    public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);// 设置key序列化方式stringredisTemplate.setKeySerializer(new StringRedisSerializer());// 设置value的序列化方式json,使用GenericJackson2JsonRedisSerializer替换默认序列化redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.afterPropertiesSet();return redisTemplate;}
    }
    
    • 这里使用的RedisConnectionFactoryLettuceConnectionFactory实现类对象
  3. 此时OrderServiceImpl类中注入RedisTemplate对象为自定义的Bean

    @Autowired
    private RedisTemplate redisTemplate;
    
  4. 注意,自定义的RedisTemplate改变了序列化方式,比如value序列化方法变成了json形式,获取旧数据时可能会报错

http://www.dtcms.com/a/503379.html

相关文章:

  • 【Redisson】分布式锁原理和使用姿势
  • linux学习笔记(43)网络编程——HTTPS (补充)
  • HTTP Client/Server 理论
  • 怎么申请域名建立网站宁波网站建设开发
  • C++:内存管理 |内存分布|回顾|new/delete底层|实现原理|拓展|定位new|池化技术|总结区别对比
  • 上街网站建设做语文高考题网站
  • 前端基础二、CSS(一)、CSS基础知识
  • 【MySQL】第三章 运算符
  • 智能机器人梯控系统(含二维码/刷卡/人脸识别)安装布线指南,结合工程规范与安全要点进行结构化优化,内容清晰、可操作性强
  • 突破 @Valid 局限!Spring Boot 编程式验证深度解析与复杂场景实战
  • 盐城市规划建设局网站做北美市场用哪个网站
  • 【攻防实战】系列二-使用metasploit打穿某集团(下)
  • 单词搜索 II · Word Search II
  • css `dorp-shadow`
  • 做网站内容管理器要吗免费的网站制作
  • 有限理性的边界与超越:人类如何在认知局限中走向更明智的决策
  • 【参赛心得】从“碰一碰”到“服务流转”:HarmonyOS创新赛金奖作品“智游文博”全流程复盘!
  • 网站推广服务报价表动态门户网站建设价格
  • 网站建设公司的排名濮阳市做网站
  • 【金仓数据库产品体验官】实战测评:电科金仓数据库接口兼容性深度体验
  • RabbitMQ 入门:基于 AMQP-CPP 的 C++ 实践指南与二次封装
  • google外贸网站推广企业的网站公告怎么制作
  • Spring 源码学习(十四)—— HandlerMethodArgumentResolver
  • Git拉取代码报无权限的错误处理方案
  • 棋牌网站管理后台嗅探查找方法(2025最新)
  • 沈阳微信网站建设大连网站建设开发
  • 中英文企业网站模板wordpress插件 标签
  • 生成式引擎优化(GEO):五大 AI 引擎赋能多场景的技术与实践指南
  • 从邮票到Labubu:四十年中国收藏与潮流风潮的演变逻辑
  • 天猫网站左侧导航是怎么做的青岛建站推广