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

Posted allalongx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot教程(三十四)使用Redis数据库相关的知识,希望对你有一定的参考价值。

除了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数据库的主要内容,如果未能解决你的问题,请参考以下文章

企业级 SpringBoot 教程 (十四)在springboot中用redis实现消息队列

Spring Boot入门教程(三十一): 自定义Starter

spring boot 学习(十四)SpringBoot+Redis+SpringSession缓存之实战

Spring Boot 2.x(十四):整合Redis,看这一篇就够了

Spring Boot教程(三十五)使用MongoDB数据库

Spring Boot入门教程(三十六):支付宝集成-当面付