Melalui pembelajaran kami sebelum ini, kami sudah boleh menyimpan rentetan dalam Redis, jadi apa yang perlu kami lakukan untuk menyimpan objek Java dalam Redis?
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?
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
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.
<!-- 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
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
Kami meletakkan konfigurasi teras Redis dalam fail RedisConfig.java
rreeeKami menyuntik fail bernama redisTemplate, Bean jenis RedisTemplate
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
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; } }
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
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!