在Java中使用Redis之前需要导入 jedis.jar 包,由于Redis是基于key-value进行数据存储,java中的数据存储到Redis中有许多方式,这里笔者介绍采用JSON字符串和对象序列化两种方式。

1,使用JSON方式

  • 首先将Java对象转化为JSON字符串

  • 然后将JSON字符串存储到Redis中

  • 最后把JSON字符串从Redis中取出来,并且转化为Java对象

首先导入和JSON使用相关的包: gson.jar

实体类Person的代码如下:

package cn.wxg.person;import java.io.Serializable;public class Person{private String name;private int age;public Person(String name, int age) {super();this.name = name;this.age = age;}public Person() {super();}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}}

Person.java

(1).将Java对象通过JSON存储到Redis中

        //创建Jedis对象Jedis jedis=new Jedis("127.0.0.1");//添加需要存储的数据Person person=new Person();List<Person> persons=new ArrayList<Person>();persons.add(new Person("jame",3));persons.add(new Person("james",3));persons.add(new Person("ja",3));//将数据转化为JSON字符串,存储到Redis中jedis.set("person",new Gson().toJson(persons));

(2).将Redis中的JSON字符串读取出,然后转化为Java对象

        //创建Jedis对象Jedis jedis=new Jedis("127.0.0.1");//读取数据String str = jedis.get("person");//再将数据转化为Java对象List<Person> fj = new Gson().fromJson(str, List.class);//输出数据Iterator<Person> iterator = fj.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}

这种通过Json的方式比较好理解,关于这种方式的更多信息还可以参见详解JAVA对象JSON的解析

2,使用对象序列化方式

在使用这种方式之前,需要存储到实体类需要序列化,否则就不能存储。

实体类Person的代码如下:

package cn.wxg.person;import java.io.Serializable;public class Person implements Serializable{private static final long serialVersionUID = 1L;private String name;private int age;public Person(String name, int age) {super();this.name = name;this.age = age;}public Person() {super();}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}}

Person.java

工具类的方法SerializeUtil如下:

package cn.wxg.util;import java.io.*;public class SerializeUtil {public static byte[] serialize(Object object) {ObjectOutputStream oos = null;ByteArrayOutputStream baos = null;try {// 序列化baos = new ByteArrayOutputStream();oos = new ObjectOutputStream(baos);oos.writeObject(object);byte[] bytes = baos.toByteArray();return bytes;} catch (Exception e) {e.printStackTrace();return null;}}public static Object unserialize(byte[] bytes) {ByteArrayInputStream bais = null;try {// 反序列化bais = new ByteArrayInputStream(bytes);ObjectInputStream ois = new ObjectInputStream(bais);return ois.readObject();} catch (Exception e) {e.printStackTrace();return null;}}
}

SerializeUtil.java

(1)将对象序列化,并且存储到Redis中

        //创建Jedis对象Jedis jedis=new Jedis("127.0.0.1");//需要存储的数据Person person=new Person();List<Person> persons=new ArrayList<Person>();persons.add(new Person("jame",3));persons.add(new Person("james",3));persons.add(new Person("ja",3));//对存储的数据序列化byte[] bt = SerializeUtil.serialize(persons);//将字节数据存储到Redis中jedis.set("persons".getBytes(),bt);

(2)从Redis中读取数据,然后反序列化,得到Java对象

        //创建Jedis对象Jedis jedis=new Jedis("127.0.0.1");//需要存储的数据Person person=new Person();List<Person> persons=new ArrayList<Person>();persons.add(new Person("jame",3));persons.add(new Person("james",3));persons.add(new Person("ja",3));//对存储的数据序列化byte[] bt = SerializeUtil.serialize(persons);//将字节数据存储到Redis中jedis.set("persons".getBytes(),bt);

这种方式效率比第一种高,推荐第二种。

3,Redis的使用地方

Redis可以用于性能优化,在这篇文章中SpringMVC详解AOP中,说到了如何进行程序性能监听。如果我们发现程序的速度表较慢的话,可以尝试使用Redis进行缓存优化。
使用Redis缓存的思路为:

    @RequestMapping("querybook.do")public ModelAndView querybook(Integer bookId){//查看在Redis中是否有该书籍的信息Jedis jedis=new Jedis();Book book=jedis.get(bookId.toString());if(book!=null){//直接把Redis读取的数据返回return book;}else{//从数据库中读取数据book=Database.query(bookId);//将数据存储到Redis中jedis.set("book".getBytes(),SerializeUtil.serialize(book));//将数据返回return book;}}

这里笔者再总结一下,就是在用户请求的时候,首先查看Redis中是否有该数据(因为从Redis中取数据的速度比从关系型数据库中取要快得多),如果有就直接从Redis中取,如果没有就从数据库中取,然后再把取出来的数据放到Redis中,这样的话下次用户请求的时候就可以直接从Redis中读取数据了。

使用Redis作为中间缓存,会增加很多逻辑控制代码。比如使用Oracle作为关系型数据库,Redis作为中间缓存,那么Oracle和Redis的数据是不同步的,这时候对用户的一些基本操作(增、删、改、查)就会添加很多控制代码,以保证Oracle和Redis中的数据一致性。

转载于:https://www.cnblogs.com/HDK2016/p/7235919.html

【Redis】解析Redis和Java传递数据相关推荐

  1. java 解析 csv_在Java中将数据从CSV解析到数组

    我正在尝试将CS​​V文件导入到可以在 Java程序中使用的数组中. CSV文件已成功导入自身,输出显示在终端上,但它会引发错误: Exception in thread "main&quo ...

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

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

  3. java jint_Android使用JNI实现Java与C之间传递数据

    介绍Java如何将数据传递给C和C回调Java的方法.  java传递数据给C,在C代码中进行处理数据,处理完数据后返回给java.C的回调是Java传递数据给C,C需要用到Java中的某个方法,就需 ...

  4. Fragment传递数据

    文章目录 Fragment与Activity之间 Activity向Fragment传递数据 通过构造方法的参数传递 代码示例 Fragment对外提供设置数据的方法,也就是public类型的方法 代 ...

  5. Java大数据-Redis

    Redis学习结构  Redis基础 Redis概述 Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的应用程序的完美解决方案. Redis从它的许多竞争继承来的三个主要特 ...

  6. 7.1.5 智慧物流【车辆监控Structured Streaming、整合kafka、Redis、Mysql、HBASE 写入数据】

    车辆监控 文章目录 车辆监控 第一节 Structured Streaming 1.1 Structured Streaming发展历史 1.1.1 Spark Streaming 1.1.2 Dat ...

  7. 【Redis】Redis 的 Java 客户端(Jedis、SpringDataRedis)

    文章目录 1. Jedis 1.1 使用步骤 1.2 Jedis 连接池 2. SpringDataRedis 2.1 基本介绍 2.1 使用方式 2.3 SpringDataRedis 的序列化方式 ...

  8. spring的redis注解清除指定前缀的数据@CacheEvict

      在redis中我们有时候需要清除掉指定前缀的数据.但是在spring的redis注解默认配置使用上好像并没有清除指定前缀的数据,如下我们来举例如何使用@CacheEvict清除指定前缀的数据. @ ...

  9. java redis集群操作,java操作redis3.0集群

    java(JedisCluster)操作redis集群 这里只是几个简单的demo,直接上代码吧,没啥好说的 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

最新文章

  1. 阿里JAVA 开发手册----整理
  2. import cycle not allowed_Cycle药物介绍醋酸群勃龙(2)
  3. 090620 刚才修复一个fat32分区的经历
  4. 链表表示八进制加法c语言,用单链表实现八进制加法操作,恳请大家看看Add( )函数的问题...
  5. 返回多维数组中某一维的最大值
  6. 【最后测试点超时】1063 Set Similarity (25 分)_22行代码AC
  7. c# 通过内存映射实现文件共享内存
  8. java郝斌_郝斌Java自学教程全集打包
  9. 【英语学习】 - 君若不离不弃,吾当生死相依
  10. python动态图片转字符画_Python实现图片转字符画
  11. matlab 怎么解ode方程,Matlab解微分方程(ODE+PDE).pdf
  12. 机器学习、数据挖掘、神经网络、人工智能和模式识别之间,主要是什么关系
  13. Google 谷歌网页搜索, 学术搜索
  14. get请求报404 NOT FOUND问题的原因及解决。
  15. [Realtek sdk-4.4.x ]RTL8198D+RTL8192F+RTL8812F WiFi 信道、频宽、加密方式、SSID设置(WPA/WPA/WPA3加密方式)
  16. Excel-VBA文件操作
  17. [cstc2021]wp
  18. python读入tsv_PYTHON读取TXT/CSV/TSV 数据
  19. 我的奋斗之黑马第一天
  20. 纯前端实现模糊查询 或和且

热门文章

  1. vc6开发一个抓包软件_惊奇软件[21]:这是一个程序员开发的背单词网站,可好用了!...
  2. mysq5.7 主主同步
  3. vyos User Guide
  4. Deepgreen数据库日志清理脚本
  5. 深度理解 Virtual DOM
  6. linux6.4 安装oracle11g 出现错误ORA-01078和LRM-00109错误
  7. 借助xxl-sso实现SSO
  8. Struts2的通配符配置方式
  9. Android 将图片网址url转化为bitmap,drawable转bitmap,file转bitmap,bitmap转file
  10. jenkins是什么_使用 Jenkins 自动发布服务到 Kubernetes