添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

springboot集成redis存对象乱码

其实本质上不算是一种乱码,只是序列化之后存储的东西而已,当我们使用redistemplete存储对象,时,如果该对象没有被序列化则会报错,序列化之后得到的不是自己想要的数据,为了解决这种方法,我们可以使用 stringredistemplete

话不多说上代码

默认使用redistemplete时

/**
 * title: list
 *  当我们保存到redis中的是一个对象时,我们会发现会报错,提示我们需要序列化 ,
 *  当我们继承了序列化接口之后,查看设置的值时,我们发现设置的值不是原来的样字,
 *  此时我们可以通过两种方式解决
 *      1.
 * @author : ZHeng
@SpringBootTest
public class RedisListTest01 {
//    @Autowired
//    StringRedisTemplate stringRedisTemplate;
    @Autowired
    RedisTemplate redisTemplate;
    @Test
    public void test(){
        redisTemplate.opsForValue().set("user1",new User(2,"lisi",19));
        System.out.println(redisTemplate.opsForValue().get("user1"));
}
登录后复制

当我们运行时会发现报错了!提示我们User对象没有序列化。

org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [com.xxx.redis01.model.User]

.....
Caused by: java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [com.xxx.redis01.model.User]
at org.springframework.core.serializer.DefaultSerializer.serialize(DefaultSerializer.java:43)
at org.springframework.core.serializer.Serializer.serializeToByteArray(Serializer.java:56)
at org.springframework.core.serializer.support.SerializingConverter.convert(SerializingConverter.java:60)
... 72 more


Process finished with exit code -1

当我们给User对象序列化之后运行

public class User implements Serializable {
    private Integer id;
    private String name;
    private Integer age;
    //省略getter setter toString等
}
登录后复制

天啦噜,竟然不乱码了!!! ,但是–当你使用linux 远程连接后查看keys 时你会发现,欸? 这里乱码了。。。

2022-04-01 20:32:07.666 INFO 18640 --- [ main] com.xxx.redis01.RedisListTest01 : No active profile set, falling back to 1 default profile: "default"
2022-04-01 20:32:07.998 INFO 18640 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2022-04-01 20:32:08.000 INFO 18640 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2022-04-01 20:32:08.018 INFO 18640 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 5 ms. Found 0 Redis repository interfaces.
2022-04-01 20:32:08.752 INFO 18640 --- [ main] com.xxx.redis01.RedisListTest01 : Started RedisListTest01 in 1.488 seconds (JVM running for 2.517)
User{id=2, name='lisi', age='19'}

Process finished with exit code 0

这是什么鬼? 明明是user1 这是啥啊

127.0.0.1:6379> keys *
¬쳵ser1
登录后复制

可以考虑使用StringRedisTemplete

解决方式肯定不是只有一种,只是自己学习记录,,仅供参考

@SpringBootTest
public class RedisListTest01 {
    @Autowired
    StringRedisTemplate stringRedisTemplate;
    @Test
    public void test(){
        stringRedisTemplate.opsForValue().set("user1",new User(2,"lisi",19).toString());
        System.out.println(stringRedisTemplate.opsForValue().get("user1"));
}
登录后复制

成功拿到

User{id=2, name='lisi', age='19'}
登录后复制

我们在linux下看看,同样ok

127.0.0.1:6379> keys *
user1
127.0.0.1:6379> get user1
User{id=2, name='lisi', age='19'}
127.0.0.1:6379>
登录后复制

当然还有另一种方式,存入JSON格式,这里就不放代码了.

解决redis乱码问题

直接添加一个配置类就行了

/**解决redis中文乱码
 * Created by dgx on 2019/8
@Configuration
public class Config {
    @Autowired
    private RedisTemplate redisTemplate;
    @Bean
    public RedisTemplate redisTemplateInit() {
        //设置序列化Key的实例化对象
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置序列化Value的实例化对象
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return redisTemplate;
}
登录后复制

以上就是springboot集成redis存对象乱码如何解决的详细内容,更多请关注php中文网其它相关文章!

PHP函数输出结果显示为Array,而非预期的值 我有一个php脚本,我需要将日期格式从CYYMMDD更新为MM/DD/YYYY,我写了一个函数来帮我做这个,但是当我打印它时,结果显示为'Array'。//将日期格式从CYYMMD... P粉722409996来自于2024-02-04 11:38:12 为什么我无法将 const 变量传输到不同的 React 文件 所以我试图将const变量从一个文件传输到另一个文件。由于某种原因,我无法访问它,并且它不允许我在文本文件中显示它。下面分别是homepage.js代码和pay.js文件。我正在尝... P粉593118425来自于2024-02-04 11:46:16 MySQL:无法更新存储函数/触发器中的表“订单”,因为它已被调用此存储函数/触发器的语句使用 我在MySQL数据库中有一个名为orders的表。在我们收到资金之前,payment_date属性为Null,此时它会更新为日期。一旦更新了payment_date属性,order... P粉282627613来自于2024-02-04 11:46:04 寻求 MySQL 查询帮助 - 计算分组范围内的时间戳计数 有人会认为这很简单,但一整晚都在拼命努力。我有一个传感器警报日志,想要生成一个表格,其中包含每个不同传感器24小时、168小时(1周)和336小时(2周)内的事件的简单计数。我对M... P粉026665919来自于2024-02-04 11:20:54 当用户提交图像时,是否可以动态更新图像“图库”? 我正在创建一个网站,展示我祖父的所有照片。由于我没有所有照片,而且还会有其他人来来去去,我认为有一个网站让他们可以提交照片然后查看它们的“数据库”会很不错。目前,我有一个Infin... P粉715228019来自于2024-02-04 11:28:23 Buttons 标签对于 Jquery Attr 的工作至关重要 atrr函数没有给出所需的响应,我有一个小代码,可以从外部API中获取数据,该API在dict中有几个数据。<divid="facet-knowledge-pane... P粉141035089来自于2024-02-04 11:27:56 如何测试微服务中的功能拆分 我有一个功能,分为3个使用kubernetes运行的微服务。根据第一个的输入,第二个执行操作并自动创建一个kubernette来处理最后的结果。我想做一个测试来检查整个过程,但我不... P粉517814372来自于2024-02-04 10:58:15 Taildwind css 底部对齐 您好,我只是尝试发送到其父级的底部:<formclass="flexflex-colw-full"(submit)="updatePhoto(t... P粉343408929来自于2024-02-04 11:06:37 如何根据特定条件在PHPMailer中选择SMTP帐户? 在我的WordPressv6.0中,我配置了通过$phpmailer发送SMTP邮件([email protected]),工作正常。我想使用另一个SMTP电子邮件帐户(co... P粉315680565来自于2024-02-04 10:43:11 文件重组导致选择、超链接和导入模板出现问题? 我正在使用jQuery将通用模板文件导入到页面的某些部分。一切都很完美,直到我以不同的方式组织我的文件结构。现在,除了标题之外,我的SELECT下拉列表无法正常工作,而且即使VSC... P粉436410586来自于2024-02-04 10:37:52