springboot 整合redis 遇到取出对象为空

场景:我是出现在多系统对同一个redis取值,简单点就是A系统存了upi对象,B系统取upi对象。取不到了返回空。当时是一点错都没有心中一万个草拟吗

解决方案:代码实例化redisTemplent的时候讲序列化类型改成存储时的序列化类型。

redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());

没错我们的两个系统架构不一样,系统从传统的springmvc向springboot走。

springboot是好东西,好到觉得它是万能的。实际是各种坑搞的我所以差点放弃他,其实还是自己没吃透。

犯错过程:我们原有项目的redisTemplate是这样配置的,没错用的是spring.data.redis的stringRedisSerializer

<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
		<property name="connectionFactory" ref="jedisConnectionFactory" />
		<!-- 防止出现序列值 -->
		<property name="keySerializer">
			<bean
				class="org.springframework.data.redis.serializer.StringRedisSerializer" />
		</property>

		<property name="valueSerializer">
			<bean
				class="org.springframework.data.redis.serializer.StringRedisSerializer" />
		</property>
		<property name="hashKeySerializer">
			<bean
				class="org.springframework.data.redis.serializer.StringRedisSerializer" />
		</property>
		<property name="hashValueSerializer">
			<bean
				class="org.springframework.data.redis.serializer.StringRedisSerializer" />
		</property>
	</bean>

最后整体解释一下:这个问题其实和springboot和redis没有太大关系,主要是负责序列化和反序列化的东东的是一个。没错就是pring.data.redis的stringRedisSerializer ,顺便说一句不配置的话默认用的是java自己的java.io.Serializable 所以懂了吧

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot提供了对Redis的自动配置,并且可以通过使用`RedisTemplate`来操作Redis数据库。下面是一个简单的示例,展示如何使用Spring Boot整合Redis工具类来存储对象。 首先,在`pom.xml`文件中添加Redis和Spring Boot的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 然后,在`application.properties`文件中配置Redis连接信息: ```properties spring.redis.host=127.0.0.1 spring.redis.port=6379 ``` 接下来,创建一个Redis工具类`RedisUtil`,用于对Redis数据库进行操作。下面是一个简单的实现: ```java @Configuration public class RedisConfig { @Autowired private RedisConnectionFactory redisConnectionFactory; @Bean public RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); return template; } } @Component public class RedisUtil { @Autowired private RedisTemplate<String, Object> redisTemplate; public void setObject(String key, Object object) { redisTemplate.opsForValue().set(key, object); } public Object getObject(String key) { return redisTemplate.opsForValue().get(key); } } ``` 在上面的示例中,我们首先通过`@Configuration`注解将`RedisTemplate`配置为一个Bean,然后通过`@Autowired`注解将其注入到`RedisUtil`类中。 最后,我们可以在任何地方注入`RedisUtil`类来使用Redis的存储功能。下面是一个使用示例: ```java @Service public class UserService { @Autowired private RedisUtil redisUtil; public User getUserById(String userId) { User user = (User) redisUtil.getObject(userId); if (user == null) { // 从数据库中取出User对象并存入Redis user = userDao.getUserById(userId); redisUtil.setObject(userId, user); } return user; } } ``` 在上面的示例中,我们首先尝试从Redis获取指定的用户对象,如果不存在,则从数据库中获取,并将其存入Redis供下次使用。这样可以提高数据访问的速度和效率。 通过上述方法,我们可以方便地使用Spring Boot整合Redis来存储对象。希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值