redis存储java对象存储_Spring-Data-Redis存储对象(redisTemplate)
先看实例:
...
@Autowired
RedisTemplate redisTemplate;
public void testGetUserByName(){
User user = new User();
user.setUserName("用户1");
redisTemplate.opsForValue().set("user1", user);
Assert.assertEquals(user.getUserName(), ((User) jedisClient.get("user1")).getUserName());
}
//User已经实现了Serializable接口
//配置的是org.springframework.data.redis.serializer.StringRedisSerializer
...
使用StringRedisSerializer直接缓存Object会出现转换错误:
java.lang.ClassCastException: dev.entity.User cannot be cast to java.lang.String
at org.springframework.data.redis.serializer.StringRedisSerializer.serialize(StringRedisSerializer.java:32)
at org.springframework.data.redis.core.AbstractOperations.rawValue(AbstractOperations.java:112)
at org.springframework.data.redis.core.DefaultValueOperations.set(DefaultValueOperations.java:168)
at dev.dao.RedisTest.testGetUserByName(RedisTest.java:22)
...
解决方法
StringRedisTemplate相当于RedisTemplate的实现。
缓存时需要把Object类转为byte[]再存到redis中,反之要从redis中获取byte[]再转成Object。
看了很多人的实现方法,感觉这个实现最优雅便捷。最主要的转换代码如下:
/**
* 描述 : .
*
*
*
*
* @param bytes
* @return
*/
private Object toObject(byte[] bytes) {
Object obj = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
obj = ois.readObject();
ois.close();
bis.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
return obj;
}
private byte[] toByteArray(Object obj) {
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
bytes = bos.toByteArray();
oos.close();
bos.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return bytes;
}
}
相当于封装了一个处理Object缓存的类,之后用这个类与redis做交流。
package dev.dao;
import dev.cache.JedisClient;
import dev.entity.User;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:/spring/spring-redis.xml")
public class RedisTest {
@Autowired
JedisClient jedisClient;
@Test
public void testGetUserByName(){
User user = new User();
user.setUserName("用户1");
jedisClient.put("user1", user);
Assert.assertEquals(user.getUserName(), ((User) jedisClient.get("user1")).getUserName());
}
}
//测试成功
redis存储java对象存储_Spring-Data-Redis存储对象(redisTemplate)相关推荐
- java crud生成_Spring Data CRUD的生成和代码详解
今天介绍一些JHipster生成简单的CRUD代码,完成一个One-to-Many(一对多)关系的增删改查. CRUD是Create.Read.Update.Delete的缩写,就是增删改查.CRUD ...
- Redis能够存储java对象吗?
Redis能够存储java对象吗? 答案:是可以,但是你对象必须要序列化. redis没有办法把一个没有序列化的对象存储到redis中. package com.kuangstudy.entiy;im ...
- Redis存储Java对象方案
使用redis存储Java对象,首先要将Java对象进行序列化 方案一:自定义RedisTemplate的序列化对象 import org.springframework.context.annota ...
- 【SpringBoot】34、SpringBoot整合Redis实现序列化存储Java对象
前面我们已经介绍过[SpringBoot]十七.SpringBoot 中整合 Redis,我们可以看出,在 SpringBoot 对 Redis 做了一系列的自动装配,使用还是非常方便的 一.背景 1 ...
- Redis介绍 Java客户端操作Redis
Redis介绍 && Java客户端操作Redis 本文内容 redis介绍 redis的 shell 客户端简介 redis的 java 客户端简介 环境配置 redis 2.8.1 ...
- Redis介绍 Java客户端操作Redis
分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow Redis介绍 & ...
- 012_Spring Data Redis
1. Spring Data Redis简介 2. Spring Data Redis相关jar包 2.1. Spring相关jar包 2.2. Spring Data Redis相关jar包 2.3 ...
- Redis的Java客户端
目录 1 前言 2 Jedis客户端 2.1 jedis快速入门 2.2Jedis连接池 3 SpringDataRedis 3.1快速入门 3.2ReisTemplate配置序列化工具 3.3 St ...
- Redis 的 Java 客户端(Jedis、SpringDataRedis、SpringCache、Redisson)基本操作指南
Jedis 参考: Jedic 官方文档 Jedis 托管在 github 上的源码 Redis 不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如 java.C.C#.C++.php.N ...
- java 点赞_Java开发利用Redis是如何实现点赞、取消点赞的?
本文基于 SpringCloud, 用户发起点赞.取消点赞后先存入 Redis 中,再每隔两小时从 Redis 读取点赞数据写入数据库中做持久化存储. 点赞功能在很多系统中都有,但别看功能小,想要做好 ...
最新文章
- 人工智能设计芯片,比你想象的更大胆
- “嫦娥上月球挖土”!打破尘封44年的人类历史,中国航天实现“五个首次”...
- 美国地铁列车相撞可能由设备陈旧引发(组图)
- Android SlidingMenu 开源项目 侧拉菜单的使用(详细配置)
- 【解决方案】MySQL-5.7.9 服务无法启动-“NET HELPMSG 3534”
- Oracle Database 21c 十大新特性一览 - New Features
- 计算机组装与维护时dm是指,《计算机组装与维护》试题答案
- Python模拟智能开关设备MQTT接入阿里云物联网平台 - PyCharm paho.mqtt
- 1013. 数素数 (20)-PAT乙级真题
- Andirod——网络连接(HttpURLConnection)
- MindNode 5 for Mac(思维导图)中文版
- paip.log4j 日志系统 参数以及最佳实践
- 极通EWEBS 3.0抢“鲜”发版
- 机器人开发--NDC方案
- BDF 字体文件格式
- 第十六届全国大学生智能车竞赛创意组获奖名单 | 带有学生与指导教师信息
- MPEG-7描述子(0)——颜色空间
- ROS从入门到精通0-2:ROS简介、安装与常见问题
- 问卷星不能复制粘贴?不存在的!
- 为什么用新浪邮箱收不到Github注册的验证邮件???
热门文章
- 51单片机的配p10端口c语言,stc12c5a16s2的单片机的p5口做普通端口怎么定义?
- windows拾取像素坐标_窗口坐标获取 windows
- 服务器怎么查看数据库文件,怎么查看服务器上的数据库文件
- xp改mac地址linux,局域网络必备-mac地址修改
- mysql数据库连接6_c# – 实体框架的动态MySQL数据库连接6
- python小程序:备份文件
- 很多优秀人感觉是:让他实际工作,他可能会考虑得很全面,而答题的时候,他就显得比较马虎,完成要求就算结束...
- Installshield在安装结束时刷新系统
- 几个不错的自己到的少的游戏站
- 《大道至简》的幕后故事