session缓存到Redis报错序列化异常问题

ERROR 16652 — [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] threw exception

org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.InvalidClassException: com.example.myblog.entity.UserInfo; class invalid for deserialization
at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:84) ~[spring-data-redis-2.7.14.jar:2.7.14]
at
看上面红色部分报错SerializationException序列化异常,在session缓存到redis中时,要缓存的 Java 对象必须实现 Serializable 接口,因为 Spring 会将对象先序列化再存入 Redis。

1.引入依赖框架

 		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

2.在properties或yml中Redis配置

#此处为properties文件语法格式
#Redis配置连接信息
#服务器ip
spring.redis.host=Redis所在服务器ip
#redis默认端口6379
spring.redis.port=6379
#存储到DB5
spring.redis.database=5
spring.session.store-type=redis
#session过期时间1800s
server.servlet.session.timeout=1800
spring.session.redis.flush-mode=on_save
spring.session.redis.namespace=spring:session

3.启动文件中加入注解@EnableCaching

@EnableCaching//设置全局redis注解
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
public class MyBlogSsmApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyBlogSsmApplication.class, args);
    }
}

4.对象序列化

@Data
//实现Serializable接口,将Userinfo对象序列化
public class UserInfo implements Serializable{
    //Integer可以接收普通数值和null值,int接收null会报错
    private Integer id;
    private String username;
    public String password;
    private String photo;
    private LocalDateTime createtime;
    private LocalDateTime updatetime;
    private Integer state;
}

通过上述配置在设置session对象时会自动将session对象缓存到Redis,也可以自动在Redis获取session对象值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值