除了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

  • 源码来源

最新文章

  1. Operational Amplifiers
  2. java 22 - 8 多线程之线程生命周期图解
  3. 【小月博客】用HTML5的File API做上传图片预览功能
  4. java打包遇到问题java.io.IOException: invalid header field
  5. extjs4.0下的日期控件的星期显示为y的解决办法
  6. Oracle 11g新参数USE_LARGE_PAGES与AMM使用 (转载)
  7. logstash 贪婪匹配
  8. atitit.提升稳定性---hibernate 添加重试retry 机制解决数据库连接关闭
  9. 获取URL中的参数值
  10. 如何在MyEclipse中配置jre的编译运行环境
  11. Python---socket库
  12. 使用NVM管理Node - Windows
  13. dic and set
  14. Python -- 网络编程 -- 简单抓取网页
  15. jQuery UI API - 可拖拽小部件(Draggable Widget)(转)
  16. Confluence 6 使用 LDAP 授权连接一个内部目录概述
  17. spring中@Scope作用域的注解
  18. Android 监听按钮的点击事件
  19. PostgreSQL 连接问题 FATAL: no pg_hba.conf entry for host
  20. NSArray最简单的倒序

热门文章

  1. 03docker镜像
  2. 在Win10上运行ESXI-Comstomer
  3. O056、Extend Volume 操作
  4. java实现spark常用算子之Take
  5. 构建虚拟工控环境系列 - 西门子虚拟PLC
  6. 内置函数 lambda sorted filter map 递归
  7. springboot集成Spring Session
  8. 异步消息处理机制相关面试问题-handlerThread面试问题详解
  9. 第八章 watch监听 83 名称案例-使用watch监听文本框数据的变化
  10. AVL树的介绍和实现