`

微服式务分布云构架-SpringBoot整合Redis 对象序列化操作

 
阅读更多

虽然上一文章的代码实现了 Redis 基础的数据操作,但是遗憾的是在 Java 开发领域内必须要考虑一个实际的问题,那么就是对象 的序列化保存问题,毕竟 Redis 数据库的读写速度是非常快的,但是如果不能够进行对象的存储,这样的存储意义就不大了,这样 就需要准备一个对象的序列化处理程序类,通过对象的形式进行数据的存储。

了解springcloud架构可以加求求:三五三六二四七二五九

1、 如果要想进行 Redis 对象序列化操作则一定要首先准备一个序列化处理程序类,这个程序类有实现要求:

import org.springframework.core.serializer.support.DeserializingConverter;
import org.springframework.core.serializer.support.SerializingConverter;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
// 此时定义的序列化操作表示可以序列化所有类的对象,当然,这个对象所在的类一定要实现序列化接口
public class RedisObjectSerializer implements RedisSerializer<Object> {
    // 为了方便进行对象与字节数组的转换,所以应该首先准备出两个转换器
    private Converter<Object, byte[]> serializingConverter = new SerializingConverter();
    private Converter<byte[], Object> deserializingConverter = new DeserializingConverter();
    private static final byte[] EMPTY_BYTE_ARRAY = new byte[];    // 做一个空数组,不是null
    @Override
    public byte[] serialize(Object obj) throws SerializationException {
        if (obj == null) {    // 这个时候没有要序列化的对象出现,所以返回的字节数组应该就是一个空数组
            return EMPTY_BYTE_ARRAY ;
        }
        return this.serializingConverter.convert(obj);    // 将对象变为字节数组
    }
    @Override
    public Object deserialize(byte[] data) throws SerializationException {
        if (data == null || data.length == ) {    // 此时没有对象的内容信息
            return null ;
        }
        return this.deserializingConverter.convert(data);
    }

}

 2、 此时如果要想让 RedisTemplate 操作模版知道有这样一个序列化程序类存在,那么就不能够采用 RedisTemplate 默认配置形式, 需要准备一个单独的配置类进行处理:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import cn.study.microboot.util.redis.RedisObjectSerializer;

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> getRedisTemplate(
            RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(factory);
        redisTemplate.setKeySerializer(new StringRedisSerializer()); // key的序列化类型
        redisTemplate.setValueSerializer(new RedisObjectSerializer()); // value的序列化类型
        return redisTemplate;
    }
}

 3、 进行程序的测试使用: 

import java.io.Serializable;

@SuppressWarnings("serial")
public class Member implements Serializable {
    private String mid;
    private Integer age;
    public String getMid() {
        return mid;
    }
    public void setMid(String mid) {
        this.mid = mid;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Member [mid=" + mid + ", age=" + age + "]";
    }
}

 

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

import cn.mldn.microboot.vo.Member;
@SpringBootTest(classes = StartSpringBootMain.class)
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class TestRedis {
    @Resource
    private RedisTemplate<String, Object> redisTemplate;
    @Test 
    public void testGet() {
        System.out.println(this.redisTemplate.opsForValue().get("study"));
    }
    @Test
    public void testSet() {
        Member vo = new Member() ;
        vo.setMid("studyjava");
        vo.setAge(19);
        this.redisTemplate.opsForValue().set("study", vo);;
    }
}

 此时可以进行对象的序列化保存处理, 这样整体的数据存储的手段可以更加的丰富

 

分享到:
评论

相关推荐

    Java开发案例-springboot-02-整合Redis-源代码+文档.rar

    Java开发案例-springboot-02-整合Redis-源代码+文档.rar Java开发案例-springboot-02-整合Redis-源代码+文档.rar Java开发案例-springboot-02-整合Redis-源代码+文档.rar Java开发案例-springboot-02-整合Redis-源...

    docker-compose启动springboot项目-springboot+redis实战案例.zip

    docker-compose启动springboot项目-springboot+redis实战案例。可以参考文章:https://blog.csdn.net/Ber_Bai/article/details/119995240

    springboot整合redis代码

    springboot整合redis.算是比较全面的一种整合方式了. springboot整合redis.算是比较全面的一种整合方式了.

    springboot整合redis集群(三种方式)源码

    springboot整合redis集群(三种方式)源码

    springboot整合redis集群零配置

    首先,让我们来看看"Springboot整合Redis集群,零配置方式"。在Spring Boot中,我们可以通过引入`spring-boot-starter-data-redis`依赖来启用Redis支持。但是,要配置Redis集群,通常需要设置多个节点地址、密码、...

    shiro-freemarker-springBoot- redis-mysql

    标题 "shiro-freemarker-springBoot-redis-mysql" 涉及到的是一个基于JavaWeb技术栈的应用开发项目,主要集成了Apache Shiro、FreeMarker模板引擎、Spring Boot框架以及Redis和MySQL数据库。下面将分别详细介绍这些...

    springboot整合redis动态切换每个数据库

    springboot整合redis动态切换每个数据库,

    SpringBoot 整合 Redis、mybatis 完整项目源码下载

    将SpringBoot与Redis和MyBatis整合,可以构建出高效、可维护的后端服务。下面我们将详细探讨这些知识点。 **SpringBoot整合Redis** 1. **配置Redis**: 在SpringBoot项目中,可以通过`application.properties`或`...

    springboot+redis+mybati-springboot-redis-mybatis-swagger.zip

    标题 "springboot+redis+mybati-springboot-redis-mybatis-swagger.zip" 暗示了这个项目是基于Spring Boot、Redis、MyBatis和Swagger构建的一个整合应用。让我们详细了解一下这些技术及其在实际开发中的应用。 1. *...

    Redission分布式锁-本地单机Redis实战-springboot-redis-lock.zip

    本项目“Redission分布式锁-本地单机Redis实战-springboot-redis-lock”旨在教你如何在SpringBoot项目中集成Redisson库,实现基于Redis的分布式锁功能。下面我们将深入探讨相关的知识点。 1. **Redisson**:...

    springboot与redis整合

    - 数据序列化:根据业务需求选择合适的序列化方式,例如JSON、JDK序列化等,以确保数据在Redis和Java对象之间的正确转换。 - 键空间设计:合理设计键的命名规则,避免键冲突,同时便于管理和查找。 - 过期策略:...

    微服务SpringBoot整合Redis基于Redis的Stream消息队列实现异步秒杀下单

    【微服务SpringBoot整合Redis基于Redis的Stream消息队列实现异步秒杀下单】这篇文章主要讲解了如何在微服务架构中使用SpringBoot整合Redis来构建一个基于Redis Stream的消息队列,以此来实现实时、高效的异步秒杀...

    Java开发案例-springboot-29-整合ShedLock实现分布式定时任务(redis版)-源代码+文档.rar

    Java开发案例-springboot-29-整合ShedLock实现分布式定时任务(redis版)-源代码+文档.rar Java开发案例-springboot-29-整合ShedLock实现分布式定时任务(redis版)-源代码+文档.rar Java开发案例-springboot-29-整合...

    07-springboot-redis-idempotent.zip

    标题 "07-springboot-redis-idempotent.zip" 暗示了这是一个关于Spring Boot集成Redis实现幂等性的教程。在分布式系统中,幂等性是一个关键概念,确保同一个请求无论执行多少次,结果始终相同,这对于防止重复操作、...

    springboot_redis

    标题 "springboot_redis" 涉及的是Spring Boot与Redis集成的应用。Spring Boot是Spring框架的一个简化版,它旨在简化创建独立的、生产级别的基于Spring的应用程序。而Redis是一款高性能的键值对数据库,常被用作缓存...

    SpringBoot整合Redis大全

    **SpringBoot整合Redis详解** SpringBoot是一款由Pivotal团队提供的全新框架,它极大地简化了Spring应用的初始搭建以及开发过程。而Redis是一款高性能的键值对存储系统,常用于缓存、消息队列等场景。SpringBoot与...

    springboot整合mongodb+redis+mybatis+mysql

    4. **Redis 配置**:`RedisConfig.java`,配置 Redis 连接池及序列化方式。 5. **MyBatis 配置**:`MybatisConfig.java`,包含 MyBatis 的配置,如 SqlSessionFactory 的创建。 6. **Mapper 接口和 XML 文件**:定义...

    spring-data-redis-2.3.9.RELEASE-API文档-中文版.zip

    赠送jar包:spring-data-redis-2.3.9.RELEASE.jar; 赠送原API文档:spring-data-redis-2.3.9.RELEASE-javadoc.jar; 赠送源代码:spring-data-redis-2.3.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-...

    springboot - 2.7.3版本 - (二)整合Redis

    整合Redis,自定义序列化方式

Global site tag (gtag.js) - Google Analytics