您的位置:首页 > 数据库 > Redis

Springboot 整合redis 案例

2019-01-11 18:01 295 查看

转载自:https://www.geek-share.com/detail/2743403773.html

首先是pom依赖:

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-redis</artifactId>
         <version>2.0.0.RELEASE</version>
    </dependency>

1.假设我们操作的是User类,其代码如下:

    public class User implements Serializable {
     
        private String username;
        private String password;
        private String nickname;
        private String age;
        private String gender;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getNickname() {
            return nickname;
        }
        public void setNickname(String nickname) {
            this.nickname = nickname;
        }
        public String getAge() {
            return age;
        }
        public void setAge(String age) {
            this.age = age;
        }
        public String getGender() {
            return gender;
        }
        public void setGender(String gender) {
            this.gender = gender;
        }
    }

注意一定要实现serializable接口。

2.序列化和反序列化工具类:

    public class ObjectRedisSerializer implements RedisSerializer<Object> {
        
        /**
         * 定义序列化和反序列化转化类
         */
        private Converter<Object, byte[]> serializer = new SerializingConverter();
        private Converter<byte[], Object> deserializer = new DeserializingConverter();
        
        /**
         * 定义转换空字节数组
         */
        private static final byte[] EMPTY_ARRAY = new byte[0];
        
        @Override
        public byte[] serialize(Object obj) throws SerializationException {
            byte[] byteArray = null;
            if (null == obj) {
                System.err.println("----------------------------->:Redis待序列化的对象为空.");
                byteArray = EMPTY_ARRAY;
            } else {
                try {
                    byteArray = serializer.convert(obj);
                } catch (Exception e) {
                    System.err.println("----------------------------->Redis序列化对象失败,异常:"+e.getMessage());
                    byteArray = EMPTY_ARRAY;
                }
            }
            return byteArray;
        }
     
        @Override
        public Object deserialize(byte[] datas) throws SerializationException {
            Object obj = null;
            if((null == datas)|| (datas.length == 0)){
                System.out.println("---------------------------------->Redis待反序列化的对象为空.");
            }else{
                try {
                    obj = deserializer.convert(datas);
                } catch (Exception e) {
                    System.out.println("------------------------------------->Redis反序列化对象失败,异常:"+e.getMessage());
                }
            }
            return obj;
        }
    }

此处我们使用spring的SerializingConverter和DeserializingConverter类来实现java对象的序列化和反序列化,这两个类实现了Converter接口。使用这个类相比getBytes()方法的好处是可以将大的对象也可以序列化,性能相比getBytes()做了优化。

3.redis的springboot配置类:

    @Configuration
    public class RedisConfig {
     
        @Bean
        public RedisTemplate<Serializable, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
            RedisTemplate<Serializable, Object> template = new RedisTemplate<Serializable, Object>();
            template.setConnectionFactory(connectionFactory);
            template.afterPropertiesSet();
            // redis存取对象的关键配置
            template.setKeySerializer(new StringRedisSerializer());
            // ObjectRedisSerializer类为java对象的序列化和反序列化工具类
            template.setValueSerializer(new ObjectRedisSerializer());
            return template;
        }
    }

连接和配置redis的类。

4.application.properties配置文件:

    # REDIS
    # Redis数据库索引(默认为0)
    spring.redis.database=0
    # Redis服务器地址 (默认为127.0.0.1)
    spring.redis.host=127.0.0.1
    # Redis服务器连接端口 (默认为6379)
    spring.redis.port=6379
    # Redis服务器连接密码(默认为空)
    spring.redis.password=
    # 连接超时时间(毫秒)
    spring.redis.timeout=2000ms

5.在TestController类中编写接口方法,测试redis:

    @RestController
    public class TestController {
     
        @Autowired
        private RedisTemplate<Serializable, Object> redisTemplate;
     
        @RequestMapping("/set")
        public String setPOJO(){
     
            User user = new User();
            user.setAge("18");
            user.setGender("男");
            user.setNickname("cherish");
            user.setPassword("123456");
            user.setUsername("admin");
            redisTemplate.opsForValue().set("user1", user);
            return "存储对象";
        }
     
        @RequestMapping("/get")
        public Object getPOJO(){
     
            return redisTemplate.opsForValue().get("user1");
        }
     
    }

6.测试,首先访问"/set"接口设置user对象:

再访问"/get"接口获取刚刚存储的user对象:

springboot整合redis成功。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: