除了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 {@BeanJedisConnectionFactory jedisConnectionFactory() {return new JedisConnectionFactory();}@Beanpublic 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 {@Autowiredprivate RedisTemplate<String, User> redisTemplate;@Testpublic 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。

  • 源码来源

转载于:https://www.cnblogs.com/allalongx/p/8526776.html

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

  1. Spring Boot教程(十四)快速入门

    快速入门 本章主要目标完成Spring Boot基础项目的构建,并且实现一个简单的Http请求处理,通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单.开发快速的特性. 系统要求: ...

  2. 企业级 Spring Boot 教程 (十四)用restTemplate消费服务

    构架工程 创建一个springboot工程,去消费RESTFUL的服务.这个服务是 http: ///gturnquist-quoters.cfapps.io/api/random ,它会随机返回Js ...

  3. Spring Boot教程(二十):Spring Boot使用String Task定时任务

    一.JAVA常见的几种定时任务比较 Timer:jdk自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让程序按照某一个频度执行, ...

  4. Spring Boot教程(十五)使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程...

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

  5. Vue + Spring Boot 项目实战(四):数据库的引入

    这一篇的主要内容是引入数据库并实现通过数据库验证用户名与密码. 本篇目录 一.引入数据库 1.安装数据库 2.使用 Navicat 创建数据库与表 二.使用数据库验证登录 1.项目相关配置 2.登录控 ...

  6. 学习Spring Boot:(十四)spring-shiro的密码加密

    前言 前面配置了怎么使用 shiro ,这次研究下怎么使用spring shiro的密码加密,并且需要在新增.更新用户的时候,实现生成盐,加密后的密码进行入库操作. 正文 配置凭证匹配器 @Beanp ...

  7. tensorflow入门教程(三十四)疲劳检测之开眼闭眼识别

    # #作者:韦访 #博客:https://blog.csdn.net/rookie_wei #微信:1007895847 #添加微信的备注一下是CSDN的 #欢迎大家一起学习 # ------韦访 2 ...

  8. Spring Boot教程(十二)整合elk(1)

    elk 简介 Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等. Logstash是 ...

  9. Spring Boot Ajax实例(十六)

    这篇博文主要用于新手学习Spring Boot,同时也记录自己学习的过程- 文章内容主要来源于易百教程 本文将展示如何使用jQuery.ajax将HTML表单请求发送到Spring REST API并 ...

  10. Spring Boot教程(四十)使用Flyway来管理数据库版本

    在上面的使用JdbcTemplate一文中,主要通过spring提供的JdbcTemplate实现对用户表的增删改查操作.在实现这个例子的时候,我们事先在MySQL中创建了用户表.创建表的过程我们在实 ...

最新文章

  1. Linux学习之setjmp和longjmp函数
  2. lighttpd安装及secdownload,fastcgi,proxy配置
  3. Log4J xml配置
  4. 迷难的北京行 – 2012.08.19
  5. linux查看passwd最后一行,Linux命令总结
  6. zoj 3211 - Dream City
  7. ubuntu 12.04 mysql_Ubuntu 12.04 mysql 源码安装--mysql.5.5.x
  8. Spring Cloud中的@EnableDiscoveryClient注解和@EnableEurekaClient注解
  9. c java 引用类型_java中的引用类型
  10. (三) 弦截法(试位法)求根
  11. 关于自学的又一点思考
  12. Android的Task和Activity相关
  13. 西威SIEI电梯变频器维修图纸
  14. Jira管理员配置手册
  15. 软件测试周刊(第50期):归结起来,焦虑的原因就两条:想同时做很多事情,又想立即看到效果。
  16. vue2.x和3.x中mock数据方式
  17. java 资格证_程序员从业资格证
  18. PHP面试-复习知识点整理
  19. 在aws云将本地虚拟机镜像上传
  20. shiro的基本认识

热门文章

  1. 归因分析计算因子贡献度常见的方法
  2. TK 技术学习日记(一)
  3. Geodetic 集合
  4. 上班族致富五大途径解密
  5. 复习电商笔记-21-linux版主从复制
  6. Python数据处理中 pd.concat 与 pd.merge 区别
  7. 用好Clear功能 让你感官不疲劳——rzxt.com
  8. linux 禁用IPv 6
  9. pentile 子像素_三星和索尼OLED子像素排列方式对比 有哪些差异?
  10. 阿里云服务器远程连接