使用Redis数据库(2)(三十四)
除了String类型,实战中我们还经常会在Redis中存储对象,这时候我们就会想是否可以使用类似RedisTemplate<String, User>来初始化并进行操作。但是Spring Boot并不支持直接使用,需要我们自己实现RedisSerializer<T>接口来对传入对象进行序列化和反序列化,下面我们通过一个实例来完成对象的读写操作。
- 创建要存储的对象:User
123456789101112131415
publicclassUserimplementsSerializable {privatestaticfinallongserialVersionUID = -1L;privateString username;privateInteger age;publicUser(String username, Integer age) {this.username = username;this.age = age;}// 省略getter和setter} - 实现对象的序列化接口
123456789101112131415161718192021222324252627282930313233343536
publicclassRedisObjectSerializerimplementsRedisSerializer<Object> {privateConverter<Object,byte[]> serializer =newSerializingConverter();privateConverter<byte[], Object> deserializer =newDeserializingConverter();staticfinalbyte[] EMPTY_ARRAY =newbyte[0];publicObject deserialize(byte[] bytes) {if(isEmpty(bytes)) {returnnull;}try{returndeserializer.convert(bytes);}catch(Exception ex) {thrownewSerializationException("Cannot deserialize", ex);}}publicbyte[] serialize(Object object) {if(object ==null) {returnEMPTY_ARRAY;}try{returnserializer.convert(object);}catch(Exception ex) {returnEMPTY_ARRAY;}}privatebooleanisEmpty(byte[] data) {return(data ==null|| data.length ==0);}} - 配置针对User的RedisTemplate实例
1234567891011121314151617181920
@ConfigurationpublicclassRedisConfig {@BeanJedisConnectionFactory jedisConnectionFactory() {returnnewJedisConnectionFactory();}@BeanpublicRedisTemplate<String, User> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, User> template =newRedisTemplate<String, User>();template.setConnectionFactory(jedisConnectionFactory());template.setKeySerializer(newStringRedisSerializer());template.setValueSerializer(newRedisObjectSerializer());returntemplate;}} - 完成了配置工作后,编写测试用例实验效果
123456789101112131415161718192021222324252627
@RunWith(SpringJUnit4ClassRunner.class)@SpringApplicationConfiguration(Application.class)publicclassApplicationTests {@AutowiredprivateRedisTemplate<String, User> redisTemplate;@Testpublicvoidtest()throwsException {// 保存对象User user =newUser("超人",20);redisTemplate.opsForValue().set(user.getUsername(), user);user =newUser("蝙蝠侠",30);redisTemplate.opsForValue().set(user.getUsername(), user);user =newUser("蜘蛛侠",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。

使用Redis数据库(2)(三十四)的更多相关文章
- spring boot 常见三十四问
Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...
- FreeSql (三十四)CodeFirst 迁移说明
FreeSql 支持 CodeFirst 迁移结构至数据库,这应该是(O/RM)必须标配的一个功能. 与其他(O/RM)不同FreeSql支持更多的数据库特性,而不只是支持基础的数据类型,这既是优点也 ...
- COJ966 WZJ的数据结构(负三十四)
WZJ的数据结构(负三十四) 难度级别:C: 运行时间限制:20000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给一棵n个节点的树,请对于形如"u ...
- NeHe OpenGL教程 第三十四课:地形
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫
JAVA之旅(三十四)--自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫 我们接着来说网络编程,TCP 一.自定义服务端 我们直接写一个服务端,让本机去连接 ...
- Java进阶(三十四)Integer与int的种种比较你知道多少?
Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...
- Gradle 1.12用户指南翻译——第三十四章. JaCoCo 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- SQL注入之Sqli-labs系列第三十四关(基于宽字符逃逸POST注入)和三十五关
开始挑战第三十四关和第三十五关(Bypass add addslashes) 0x1查看源码 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理. if(isset($_ ...
- “全栈2019”Java多线程第三十四章:超时自动唤醒被等待的线程
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- 第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息
第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多 ...
随机推荐
- 小米MAX开发者选项 以及如何连接MAC开发RN
打开开发者选项:设置--我的设备---全部参数-- 多次点击MiUI版本 打开开发者选项 然后返回到设置的主页面里面的更多设置就可以看到开发者选项了 在开发者选项中打开 USB调试/USB安装 将启动 ...
- 负数字符串经过int处理之后还是负数
<?php $v = '-1'; $b = (int)$v; echo $b;
- Vue 中 export及export default的区别
相信很多人都在vue使用过export.export default.import,然而它们到底有什么区别呢? 在ES6中,export与export default均可用于导出常量.函数.文件.模块 ...
- 03-python-装饰器
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权 ...
- pytorch-1.0 踩坑记录
参加百度的一个竞赛,官方要求把提交的代码测试环境pyorch1.0,于是将自己计算机pytorch升级到1.0. 在ubuntu下用conda install pytorch 命令安装时,效果很差,解 ...
- 牛客小白月赛7 B 自杀游戏
自杀游戏 思路: sg函数 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include&l ...
- Codeforces 934D - A Determined Cleanup
934D - A Determined Cleanup 思路: 找规律,和k进制的求法差不多,答案的奇数位是p%k,偶数位如果p%k!=0,那么答案是k-p%k,否则为0. 代码: #include& ...
- Java 发送SOAP请求调用WebService,解析SOAP报文
https://blog.csdn.net/Peng_Hong_fu/article/details/80113196 记录测试代码 SoapUI调用路径 http://localhost:8082/ ...
- toad 快捷键大全
现在在企业中,操作oracle数据库的客户端,除了PL/SQL外,使用的较多的就是TOAD了!toad记得F9执行全部sql和Ctrl + Enter执行选中sql就行了,有啥需要的再查吧.快捷设置在 ...
- LeetCode--371--两整数之和
问题描述: 方法: class Solution(object): def getSum(self, a, b): """ :type a: int :type b: i ...