Rumah >pangkalan data >Redis >Bagaimana SpringBoot menyepadukan Redis untuk mensiri dan menyimpan objek Java

Bagaimana SpringBoot menyepadukan Redis untuk mensiri dan menyimpan objek Java

WBOY
WBOYke hadapan
2023-05-29 08:43:101493semak imbas

1. Latar belakang

1. Berfikir

Melalui pembelajaran kami sebelum ini, kami sudah boleh menyimpan rentetan dalam Redis, jadi apa yang perlu kami lakukan untuk menyimpan objek Java dalam Redis?

2. Penyelesaian

Kami boleh menukar objek Java kepada objek JSON, kemudian menjadi rentetan JSON, dan menyimpannya dalam Redis Kemudian apabila kami mengeluarkan data daripada Redis, kami hanya boleh mengeluarkannya rentetan dan menukarnya menjadi objek Java Adakah siri operasi ini kelihatan agak menyusahkan?

2. Analisis kod sumber

Bagaimana SpringBoot menyepadukan Redis untuk mensiri dan menyimpan objek Java

  • Di atas ialah coretan kod sumber dalam kelas RedisAutoConfiguration itu mengkonfigurasi Redis secara automatik Pada masa itu, redisTemplate dan stringRedisTemplate

  • telah disuntik ke dalam bekas, antaranya, RedisTemplate Objek, tetapi yang sering kita perlukan ialah RedisTemplate, ini memerlukan kita menyuntik semula RedisTemplate Bean, jenis generiknya ialah RedisTemplate, dan tetapkan kaedah siri kunci dan nilai

  • Selepas melihat anotasi @ConditionalOnMissingBean ini, anda tahu bahawa jika terdapat objek RedisTemplate dalam bekas Spring, RedisTemplate yang dikonfigurasikan secara automatik ini tidak akan dijadikan instantiated. Oleh itu, kami mempunyai keupayaan untuk menulis kelas konfigurasi tersuai untuk mengkonfigurasi RedisTemplate.

3. Inject RedisTemplate

1 Perkenalkan tanggungan

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

Di atas memperkenalkan kebergantungan redis, sila tambahkan tanggungan lain dengan sendiri

2. Maklumat sambungan Redis

spring:
  # Redis配置
  redis:
    host: 127.0.0.1
    port: 6379
    database: 10
    jedis:
      pool:
        # 连接池最大连接数(使用负值表示没有限制)
        max-active: 50
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: 3000ms
        # 连接池中的最大空闲连接数
        max-idle: 20
        # 连接池中的最小空闲连接数
        min-idle: 5
    # 连接超时时间(毫秒)
    timeout: 5000ms

3. Kelas konfigurasi teras Redis

Kami meletakkan konfigurasi teras Redis dalam fail RedisConfig.java

rreee

Kami menyuntik fail bernama redisTemplate, Bean jenis RedisTemplate, kunci menggunakan kaedah siri StringRedisSerializer dan nilainya menggunakan kaedah siri Jackson2JsonRedisSerializer

4 kelas alat Redis

Kami akan menjalankan satu siri Redis Siri operasi diletakkan dalam fail RedisUtils.java

package com.zyxx.redistest.common;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @ClassName RedisConfig
 * @Description
 * @Author Lizhou
 * @Date 2020-10-22 9:48:48
 **/

@Configuration
public class RedisConfig {

    /**
     * RedisTemplate配置
     */
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
		// 配置redisTemplate
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 设置序列化
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        // key序列化
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // value序列化
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        // Hash key序列化
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        // Hash value序列化
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

Kami menulis kaedah dapatkan dan tetapkan untuk ujian

Pengujian

1. Buat kelas entiti Java UserInfo

package com.zyxx.redistest.common;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

/**
 * @ClassName RedisUtils
 * @Description
 * @Author Lizhou
 * @Date 2020-10-22 10:10:10
 **/
@Slf4j
@Component
public class RedisUtils {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 根据key读取数据
     */
    public Object get(final String key) {
        if (StringUtils.isBlank(key)) {
            return null;
        }
        try {
            return redisTemplate.opsForValue().get(key);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 写入数据
     */
    public boolean set(final String key, Object value) {
        if (StringUtils.isBlank(key)) {
            return false;
        }
        try {
            redisTemplate.opsForValue().set(key, value);
            log.info("存入redis成功,key:{},value:{}", key, value);
            return true;
        } catch (Exception e) {
            log.error("存入redis失败,key:{},value:{}", key, value);
            e.printStackTrace();
        }
        return false;
    }
}

2 Test case

package com.zyxx.redistest.common;

import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * @ClassName UserInfo
 * @Description
 * @Author Lizhou
 * @Date 2020-10-22 10:12:12
 **/
@Data
public class UserInfo implements Serializable {
    /**
     * id
     */
    private Integer id;
    /**
     * 姓名
     */
    private String name;
    /**
     * 创建时间
     */
    private Date createTime;
}

Kami menyimpan kunci sebagai "pengguna" dan nilai sebagai data objek UserInfo ke dalam Redis, dan kemudian dapatkan data mengikut ke kunci

3. Keputusan ujian

Bagaimana SpringBoot menyepadukan Redis untuk mensiri dan menyimpan objek Java

Dapat dilihat bahawa kami berjaya menyimpan data objek Java dalam Redis dan berjaya memperoleh objek tersebut.

Atas ialah kandungan terperinci Bagaimana SpringBoot menyepadukan Redis untuk mensiri dan menyimpan objek Java. 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