Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk menyelesaikan objek bercelaru yang disimpan dalam redis bersepadu springboot

Bagaimana untuk menyelesaikan objek bercelaru yang disimpan dalam redis bersepadu springboot

王林
王林ke hadapan
2023-05-28 09:25:051714semak imbas

Springboot menyepadukan redis untuk menyimpan kod kacau objek

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

Tidak banyak yang perlu diperkatakan tentang kod

Apabila menggunakan redistemplete secara lalai

/**
 * 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]

.....

Disebabkan 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 lagi

Proses selesai dengan kod keluar -1

Apabila kita mensirikan objek Pengguna dan menjalankannya

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"

2022-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!
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'}

Proses selesai dengan kod keluar 0

Apa kejadahnya ini? Jelas sekali pengguna1. Apakah ini? >Berjaya mendapatkan Pergi ke

127.0.0.1:6379> keys *
¬쳵ser1

dan 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"));
    }
}

Sudah tentu ada cara lain untuk menyimpannya dalam format JSON, jadi saya tidak akan meletakkannya. kod di sini.

Selesaikan masalah kacau redis

Hanya tambah kelas konfigurasi secara langsung

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam