使用Redis数据库(2)(三十四)

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

  • 创建要存储的对象:User
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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
     
    }

      

  • 实现对象的序列化接口
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    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实例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    @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;
         }
     
     
    }

      

     
  • 完成了配置工作后,编写测试用例实验效果
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    @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

猜你喜欢

转载自www.cnblogs.com/MaxElephant/p/10239775.html