码迷,mamicode.com
首页 > 数据库 > 详细

Spring Boot教程(三十四)使用Redis数据库(2)

时间:2018-03-08 10:36:32      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:实验   exception   uid   data-   template   setvalue   tar   ret   boot   

除了String类型,实战中我们还经常会在Redis中存储对象,这时候我们就会想是否可以使用类似RedisTemplate<String, User>来初始化并进行操作。但是Spring Boot并不支持直接使用,需要我们自己实现RedisSerializer<T>接口来对传入对象进行序列化和反序列化,下面我们通过一个实例来完成对象的读写操作。

  • 创建要存储的对象:User
    public class User implements Serializable {
    
        private static final long serialVersionUID = -1L;
    
        private String username;
        private Integer age;
    
        public User(String username, Integer age) {
            this.username = username;
            this.age = age;
        }
    
        // 省略getter和setter
    
    }
    

      

     

  • 实现对象的序列化接口
    public class RedisObjectSerializer implements RedisSerializer<Object> {
    
      private Converter<Object, byte[]> serializer = new SerializingConverter();
      private Converter<byte[], Object> deserializer = new DeserializingConverter();
    
      static final byte[] EMPTY_ARRAY = new byte[0];
    
      public Object deserialize(byte[] bytes) {
        if (isEmpty(bytes)) {
          return null;
        }
    
        try {
          return deserializer.convert(bytes);
        } catch (Exception ex) {
          throw new SerializationException("Cannot deserialize", ex);
        }
      }
    
      public byte[] serialize(Object object) {
        if (object == null) {
          return EMPTY_ARRAY;
        }
    
        try {
          return serializer.convert(object);
        } catch (Exception ex) {
          return EMPTY_ARRAY;
        }
      }
    
      private boolean isEmpty(byte[] data) {
        return (data == null || data.length == 0);
      }
    }
     
    

      

  • 配置针对User的RedisTemplate实例
    @Configuration
    public class RedisConfig {
    
        @Bean
        JedisConnectionFactory jedisConnectionFactory() {
            return new JedisConnectionFactory();
        }
    
        @Bean
        public RedisTemplate<String, User> redisTemplate(RedisConnectionFactory factory) {
            RedisTemplate<String, User> template = new RedisTemplate<String, User>();
            template.setConnectionFactory(jedisConnectionFactory());
            template.setKeySerializer(new StringRedisSerializer());
            template.setValueSerializer(new RedisObjectSerializer());
            return template;
        }
    
    
    }
     
    

      

     
  • 完成了配置工作后,编写测试用例实验效果
    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringApplicationConfiguration(Application.class)
    public class ApplicationTests {
    
    	@Autowired
    	private RedisTemplate<String, User> redisTemplate;
    
    	@Test
    	public void test() throws Exception {
    
    		// 保存对象
    		User user = new User("超人", 20);
    		redisTemplate.opsForValue().set(user.getUsername(), user);
    
    		user = new User("蝙蝠侠", 30);
    		redisTemplate.opsForValue().set(user.getUsername(), user);
    
    		user = new User("蜘蛛侠", 40);
    		redisTemplate.opsForValue().set(user.getUsername(), user);
    
    		Assert.assertEquals(20, redisTemplate.opsForValue().get("超人").getAge().longValue());
    		Assert.assertEquals(30, redisTemplate.opsForValue().get("蝙蝠侠").getAge().longValue());
    		Assert.assertEquals(40, redisTemplate.opsForValue().get("蜘蛛侠").getAge().longValue());
    
    	}
    
    }
    

      

    当然spring-data-redis中提供的数据操作远不止这些,本文仅作为在Spring Boot中使用redis时的配置参考,更多对于redis的操作使用,请参考Spring-data-redis Reference

  • 技术分享图片源码来源

Spring Boot教程(三十四)使用Redis数据库(2)

标签:实验   exception   uid   data-   template   setvalue   tar   ret   boot   

原文地址:https://www.cnblogs.com/allalongx/p/8526776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!