Rumah > Artikel > pangkalan data > Bagaimana untuk menyelesaikan objek bercelaru yang disimpan dalam redis bersepadu springboot
Sebenarnya, ia bukan sejenis kod kacau pada dasarnya, ia hanyalah sesuatu yang disimpan selepas bersiri Apabila kita menggunakan RedisTemplete untuk menyimpan objek, jika objek itu belum bersiri, Ralat akan dilaporkan, dan data yang diperoleh selepas bersiri bukanlah data yang anda mahukan Untuk menyelesaikan kaedah ini, kami boleh menggunakan StringRedisTemplete
/** * 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")); } }Apabila kami menjalankannya, kami akan mendapati ralat! Minta kami bahawa objek Pengguna tidak bersiri.
org.springframework.data.redis.serializer.SerializationException: Tidak boleh bersiri; pengecualian bersarang ialah org.springframework.core.serializer.support.SerializationFailedException: Gagal menyerikan objek menggunakan DefaultSerializer pengecualian ialah java; .lang.IllegalArgumentException: DefaultSerializer memerlukan muatan Serializable tetapi menerima objek jenis [com.xxx.redis01.model.User] .....Apabila kita mensirikan objek Pengguna dan menjalankannyaDisebabkan oleh: java.lang.IllegalArgumentException: DefaultSerializer memerlukan muatan Serializable tetapi menerima objek jenis [com.xxx.redis01.model.User]
di org.springframework.core.serializer.DefaultSerializer.serialize(DefaultSerializer.java:43)
di org. springframework.core.serializer.Serializer.serializeToByteArray(Serializer.java:56)
di org.springframework.core.serializer.support.SerializingConverter.convert(SerializingConverter.java:60)
... 72 lagiProses selesai dengan kod keluar -1
public class User implements Serializable { private Integer id; private String name; private Integer age; //省略getter setter toString等 }Ya tuhan, ia tidak kacau lagi!!! , tetapi apabila anda menggunakan linux untuk menyambung dari jauh dan menyemak kekunci, anda akan mendapati, ya? Ia bercelaru di sini. . .
2022-04-01 20:32:07.666 INFO 18640 --- [ utama] com.xxx.redis01.RedisListTest01 : Tiada profil aktif ditetapkan, kembali kepada 1 profil lalai: "lalai"Apa kejadahnya ini? Jelas sekali pengguna1. Apakah ini? >Berjaya mendapatkan Pergi ke2022-04-01 20:32:07.998 INFO 18640 --- [ utama] .s.d.r.c.RepositoryConfigurationDelegate: Berbilang modul Spring Data ditemui, memasuki mod konfigurasi repositori yang ketat!
Proses selesai dengan kod keluar 0
2022-04-02:01 2022-04-02:01 INFO 18640 --- [ utama] .s.d.r.c.RepositoryConfigurationDelegate: Bootstrap Spring Data Redis repositori dalam mod DEFAULT.
2022-04-01 20:32:08.018 INFO 18640 --- [utama] .s.d.Repository Data Spring.s.d. pengimbasan repositori dalam 5 ms. Menemui 0 antara muka repositori Redis.
2022-04-01 20:32:08.752 INFO 18640 --- [ utama] com.xxx.redis01.RedisListTest01 : Mulakan RedisListTest481 dalam masa 1.JVM 2.517 )
Pengguna{id=2, name='lisi', age='19'}
127.0.0.1:6379> keys * ¬쳵ser1dan mari kita lihat di bawah Linux Ia juga ok
@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'}
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan objek bercelaru yang disimpan dalam redis bersepadu springboot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!