先看实例:

...

@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)相关推荐

  1. java crud生成_Spring Data CRUD的生成和代码详解

    今天介绍一些JHipster生成简单的CRUD代码,完成一个One-to-Many(一对多)关系的增删改查. CRUD是Create.Read.Update.Delete的缩写,就是增删改查.CRUD ...

  2. Redis能够存储java对象吗?

    Redis能够存储java对象吗? 答案:是可以,但是你对象必须要序列化. redis没有办法把一个没有序列化的对象存储到redis中. package com.kuangstudy.entiy;im ...

  3. Redis存储Java对象方案

    使用redis存储Java对象,首先要将Java对象进行序列化 方案一:自定义RedisTemplate的序列化对象 import org.springframework.context.annota ...

  4. 【SpringBoot】34、SpringBoot整合Redis实现序列化存储Java对象

    前面我们已经介绍过[SpringBoot]十七.SpringBoot 中整合 Redis,我们可以看出,在 SpringBoot 对 Redis 做了一系列的自动装配,使用还是非常方便的 一.背景 1 ...

  5. Redis介绍 Java客户端操作Redis

    Redis介绍 && Java客户端操作Redis 本文内容 redis介绍 redis的 shell 客户端简介 redis的 java 客户端简介 环境配置 redis 2.8.1 ...

  6. Redis介绍 Java客户端操作Redis

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow Redis介绍 & ...

  7. 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 ...

  8. Redis的Java客户端

    目录 1 前言 2 Jedis客户端 2.1 jedis快速入门 2.2Jedis连接池 3 SpringDataRedis 3.1快速入门 3.2ReisTemplate配置序列化工具 3.3 St ...

  9. Redis 的 Java 客户端(Jedis、SpringDataRedis、SpringCache、Redisson)基本操作指南

    Jedis 参考: Jedic 官方文档 Jedis 托管在 github 上的源码 Redis 不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如 java.C.C#.C++.php.N ...

  10. java 点赞_Java开发利用Redis是如何实现点赞、取消点赞的?

    本文基于 SpringCloud, 用户发起点赞.取消点赞后先存入 Redis 中,再每隔两小时从 Redis 读取点赞数据写入数据库中做持久化存储. 点赞功能在很多系统中都有,但别看功能小,想要做好 ...

最新文章

  1. 人工智能设计芯片,比你想象的更大胆
  2. “嫦娥上月球挖土”!打破尘封44年的人类历史,中国航天实现“五个首次”...
  3. 美国地铁列车相撞可能由设备陈旧引发(组图)
  4. Android SlidingMenu 开源项目 侧拉菜单的使用(详细配置)
  5. 【解决方案】MySQL-5.7.9 服务无法启动-“NET HELPMSG 3534”
  6. Oracle Database 21c 十大新特性一览 - New Features
  7. 计算机组装与维护时dm是指,《计算机组装与维护》试题答案
  8. Python模拟智能开关设备MQTT接入阿里云物联网平台 - PyCharm paho.mqtt
  9. 1013. 数素数 (20)-PAT乙级真题
  10. Andirod——网络连接(HttpURLConnection)
  11. MindNode 5 for Mac(思维导图)中文版
  12. paip.log4j 日志系统 参数以及最佳实践
  13. 极通EWEBS 3.0抢“鲜”发版
  14. 机器人开发--NDC方案
  15. BDF 字体文件格式
  16. 第十六届全国大学生智能车竞赛创意组获奖名单 | 带有学生与指导教师信息
  17. MPEG-7描述子(0)——颜色空间
  18. ROS从入门到精通0-2:ROS简介、安装与常见问题
  19. 问卷星不能复制粘贴?不存在的!
  20. 为什么用新浪邮箱收不到Github注册的验证邮件???

热门文章

  1. 51单片机的配p10端口c语言,stc12c5a16s2的单片机的p5口做普通端口怎么定义?
  2. windows拾取像素坐标_窗口坐标获取 windows
  3. 服务器怎么查看数据库文件,怎么查看服务器上的数据库文件
  4. xp改mac地址linux,局域网络必备-mac地址修改
  5. mysql数据库连接6_c# – 实体框架的动态MySQL数据库连接6
  6. python小程序:备份文件
  7. 很多优秀人感觉是:让他实际工作,他可能会考虑得很全面,而答题的时候,他就显得比较马虎,完成要求就算结束...
  8. Installshield在安装结束时刷新系统
  9. 几个不错的自己到的少的游戏站
  10. 《大道至简》的幕后故事