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