1、 Redis支持消息的订阅与发布

Redis的消息订阅支持:先订阅后发布

订阅:subscribe c1 c2

发布:publish c2 hello-redis

支持通配符的订阅:psubscribe new*

实际开发中没用,RabbitMQ

2、Redis对于事务支持

Redis对于事务也是支持,但是支持的不太好。

multi:开启事务

exec:提交事务

discard:回滚事务

3、Redis的Java客户端Jedis

3.1先导入依赖包

  1. <dependency>
  2. <groupId>redis.clients</groupId>
  3. <artifactId>jedis</artifactId>
  4. <version>2.9.0</version>
  5. </dependency>

3.2,测试代码

  1. public static void main( String[] args ){
  2. //1.创建Jedis客户端,并指定Redis服务器的ip和端口号
  3. Jedis jedis = new Jedis("192.168.58.10",6379);
  4. //2.通过Jedis客户端操作Redis服务器
  5. jedis.set("key1","value1");
  6. String value1 = jedis.get("key1");
  7. System.out.println(value1);
  8. //3.关闭Jedis客户端
  9. jedis.close();
  10. }
    这种还需要一个个创建!!不太好

3.3,创建jedisPool

  1. 这种每用一次都需要创建一个连接池 消耗内存
  2.  
  3. public static void main( String[] args ){
  4. //1.创建JedisPool对象,从JedisPool对象中获取Jedis连接
  5. JedisPool jedisPool = new JedisPool("192.168.58.10",6379);
  6. Jedis jedis = jedisPool.getResource();
  7. //2.通过Jedis客户端操作Redis服务器
  8. String value1 = jedis.get("key1");
  9. System.out.println(value1);
  10. //3.关闭Jedis客户端
  11. jedis.close();
  12. }

四、Jedis和Spring的整合

4.1导入spring 和jedis的包

4.2 :配置配置文件  :这种就不用每次用 就不用创建jedis池了 只创建一次 就行。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
  7. <!-- 最大空闲连接数 -->
  8. <property name="maxIdle" value="1" />
  9. <!-- 最大连接数 -->
  10. <property name="maxTotal" value="5" />
  11. <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
  12. <property name="blockWhenExhausted" value="true" />
  13. <!-- 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1 -->
  14. <property name="maxWaitMillis" value="30000" />
  15. <!-- 在获取连接的时候检查有效性 -->
  16. <property name="testOnBorrow" value="true" />
  17. </bean>
  18.  
  19. <bean class="redis.clients.jedis.JedisPool" destroy-method="close">
  20. <constructor-arg name="host" value="192.168.248.99"/>
  21. <constructor-arg name="port" value="6379"/>
  22. <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
  23. </bean>
  24.  
  25. </beans>

五、Jedis和SSM整合

5.1:导包

5.2:配置ssm和jedis配置文件的整合

5.2:然后redis缓存只能应用在服务层。

第一种

这种是利用自定义的工具类 是使用字符串转化成数组 ,数组幻化成字符串的方式进行缓存。

先创建自定义序列化,反序列化工具类

  1. package com.ujy.maven.utils;
  2. import java.io.*;
  3. public class SerizlizableUtil {
  4.  
  5. //完成序列化
  6. public static byte[] serializable(Object object){
  7. /*
  8. * 接收一个对象,传到writeObject里面,通过对象输出流写入到字节输出流
  9. * ,然后从字节数组输出流的toByteArray获取这个数组,然后返回给调用者
  10. * */
  11. try {
  12. //1.字节数组输出流
  13. ByteArrayOutputStream baos = new ByteArrayOutputStream(); //3
  14. //2.对象输出流
  15. ObjectOutputStream oos = new ObjectOutputStream(baos);//
  16. oos.writeObject(object); //
  17. byte[] bytes = baos.toByteArray();//
  18. return bytes;//
  19. }catch (Exception e){
  20. e.printStackTrace();
  21. }
  22. return null;
  23. }
  24. //完成反序列化
  25. public static Object unSerializable(byte [] bytes){
  26. //先判断是否非空 非空直接返回
  27. if (bytes==null){
  28. return null;
  29. }
  30. try {
  31. //1.字节数组输入流
  32. ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
  33. //2.对象输入流
  34. ObjectInputStream ois = new ObjectInputStream(bais);
  35. Object o = ois.readObject();
  36. return o;
  37. } catch (Exception e) {
  38. e.printStackTrace();
  39. }
  40. return null;
  41. }
  42. }

然后在服务层应用:

  1. @Autowired
  2. private PersonDao personDao;
  3. @Autowired
  4. private JedisPool jedisPool;
  5.  
  6. public List<Person> findAll() {
  7. Jedis jedis = jedisPool.getResource();
  8. List<Person> list=null;
  9.  
  10. long startTime = System.currentTimeMillis();
  11. System.out.println(startTime);
  12. //1.先去缓存中去查数据 ,
  13. byte[] lists = jedis.get(SerizlizableUtil.serializable("personList"));
  14. //2. 如果没有就从数据库查 然后存入缓存 下次可以从缓存取。
  15. if (lists==null){
  16. list = personDao.findAll();
  17. long endTime1 = System.currentTimeMillis();
  18. System.out.println("去数据库中查询数据用的时间为:"+(endTime1-startTime));
  19. jedis.set(SerizlizableUtil.serializable("personList") ,SerizlizableUtil.serializable(list));
  20. }else {
  21. //3.如果缓存中有数据,直接反序列化,返回给控制层
  22. list=(List<Person>) SerizlizableUtil.unSerializable(lists);
  23. System.out.println(list);
  24. long endTime2 = System.currentTimeMillis();
  25. System.out.println("去缓存中查询数据用的时间为:"+(endTime2-startTime));
  26. }
  27. jedis.close();
  28. return list;
  29. }

第二种:

这种是利用FastJson这种定义好的工具类 ,是转换成字符串,然后字符串转换成对象或者集合或者map。

先来两个测试代码:这种是任意类型转换成String类型。

  1. @Test
  2. public void test1(){
  3. //对象--->字符串
  4. Person person = new Person(6,"王子",1,22);
  5. String s = JSON.toJSONString(person);
  6. System.out.println(s);
  7.  
  8. //对象列表(集合)--->字符串
  9. List<Person> list = new ArrayList<Person>();
  10. list.add(new Person(7,"格格",0,20));
  11. list.add(new Person(8 ,"公主",0,21));
  12. list.add(new Person(9,"逍遥",1,23));
  13. String s1 = JSON.toJSONString(list);
  14. System.out.println(s1);
  15.  
  16. //Map--->字符串
  17. Map<String,Object> map = new HashMap<String, Object>();
  18. map.put("小李飞刀","刀无虚发");
  19. map.put("飞檐走壁","乃真人也");
  20. String s = JSON.toJSONString(map);
  21. System.out.println(s);
  22.  
  23. }

这种是String转换成 对象,List ,数组,Map

  1. 无论任意数据类型转换成字符串就通过:JSON.toJSONString()
  2. 字符串转换成其他数据类型:
  3. String --->对象类型JSON.parseObj()
  4. String--->数组类型JSON.parseArray()
  5. String --->Map类型JSON.parseObj()
  6.  
  7. @Test
  8. public void test2(){
  9. // String --->对象类型JSON.parseObj()
  10. Person person = new Person(6,"王子",1,22);
  11. String s = JSON.toJSONString(person);
  12.  
  13. Person person1 = JSON.parseObject(s, Person.class);
  14. System.out.println(person1);
  15.  
  16. //String--->数组类型JSON.parseArray()
  17. List<Person> list = new ArrayList<Person>();
  18. list.add(new Person(7,"格格",0,20));
  19. list.add(new Person(8 ,"公主",0,21));
  20. list.add(new Person(9,"逍遥",1,23));
  21. String s1 = JSON.toJSONString(list);
  22.  
  23. List<Person> people = JSON.parseArray(s1, Person.class);
  24. System.out.println(people);
  25.  
  26. //String --->Map类型JSON.parseObj()
  27. Map<String,Object> map = new HashMap<String, Object>();
  28. map.put("小李飞刀","刀无虚发");
  29. map.put("飞檐走壁","乃真人也");
  30. String s = JSON.toJSONString(map);
  31.  
  32. Map map1 = JSON.parseObject(s, Map.class);
  33. System.out.println(map1);
  34. }

然后应用到服务层

  1. @Autowired
  2. private PersonDao personDao;
  3. @Autowired
  4. private JedisPool jedisPool;
  5.  
  6. public List<Person> findAll() {
  7. Jedis jedis = jedisPool.getResource();
  8. List<Person> list=null;
  9.  
  10. long startTime = System.currentTimeMillis();
  11. System.out.println(startTime);
  12. //1.先去缓存中去查数据 ,
  13. String sss =jedis.get("personList");
  14. //2. 如果没有就从数据库查 然后存入缓存 下次可以从缓存取。
  15. if (sss==null){
  16. list = personDao.findAll();
  17. long endTime1 = System.currentTimeMillis();
  18. System.out.println("去数据库中查询数据用的时间为:"+(endTime1-startTime));
  19. jedis.set(JSON.toJSONString("personList") , JSON.toJSONString(list));
  20. }else {
  21. //3.如果缓存中有数据,直接反序列化,返回给控制层
  22. list=JSON.parseArray(sss,Person.class);
  23. System.out.println(list);
  24. long endTime2 = System.currentTimeMillis();
  25. System.out.println("去缓存中查询数据用的时间为:"+(endTime2-startTime));
  26. }
  27. jedis.close();
  28. return list;
  29. }

Redis的客户端Jedis的更多相关文章

  1. Redis JAVA客户端 Jedis常用方法

    Jedis 是 Redis 官方首选的 Java 客户端开发包 (redis的java版本的客户端实现) #MAVEN配置 <dependency> <groupId>redi ...

  2. Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍

    jedis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务.管道及有jedis自身实现的分布式. 在这里对jedis关于事务.管道和分布式 ...

  3. 使用Redis的Java客户端Jedis

    转载自:http://aofengblog.blog.163.com/blog/static/631702120147298317919/ 前一篇文章<Redis命令指南>讲解了通过命令行 ...

  4. [转载] 使用Redis的Java客户端Jedis

    转载自http://aofengblog.blog.163.com/blog/static/631702120147298317919/ 在实际的项目开发中,各种语言是使用Redis的客户端库来与Re ...

  5. Redis客户端——Jedis的使用

    本文介绍基于Java语言的Redis客户端——Jedis的使用,包括Jedis简介.获取Jedis.Jedis直连.Jedis连接池以及二者的对比的选择. Jedis简介 Jedis 是 Redis  ...

  6. 【转载】Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍

    转载地址:http://blog.csdn.net/truong/article/details/46711045 关键字:Redis的Java客户端Jedis的八种调用方式(事务.管道.分布式…)介 ...

  7. Redis(九):Redis的Java客户端Jedis

    Redis的Java客户端Jedis导航目录: 安装JDK 安装Eclipse Jedis所需要的Jar包 Jedis常用操作 JedisPool 安装JDK tar -zxvf jdk-7u67-l ...

  8. 9.Redis的Java客户端Jedis

    Redis的Java客户端Jedis Jedis所需jar包   commons-pool-1.6.jar jedis-2.1.0.jar 1.Jedis常用操作(jedis中的api 和 我们在 l ...

  9. redis 学习(8)-- redis 客户端 -- Jedis

    redis 客户端 -- Jedis 1. Jedis 直连 本质是 TCP 连接. 执行流程 创建Jedis对象 通过Jedis执行命令 返回Jedis执行结果 关闭Jedis连接 demo 要使用 ...

随机推荐

  1. 洛谷p3955 图书管理员(NOIP2017 t2)

    蒟蒻的最后一篇pas题解...目前转c++ ing 回顾了一下,发现c++的string真的好繁啊(主要我这个蒟蒻太菜不会用) 还是pas的string操作简洁 做法 我这种蒟蒻不像别的dalao,懒 ...

  2. Software-Defined Networking: A Comprehensive Survey

    文章名称:Software-Defined Networking: A Comprehensive Survey 文章来源:Proceedings of the IEEE ( Volume: 103  ...

  3. 小程序swiper实现订单页面

    小程序swiper实现订单页面 myOrder.wxml <!--pages/myorder/myorder.wxml--> <view class="swiper-tab ...

  4. VMware 虚拟化编程(6) — VixDiskLib 虚拟磁盘库详解之二

    目录 目录 前文列表 VixDiskLib 虚拟磁盘库 VixDiskLib_Open 打开 VMDK File VixDiskLib_Read 读取 VMDK File 数据 VixDiskLib_ ...

  5. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第5节 String类_7_字符串的转换相关方法

    sequence n.顺序:次序:一系列:一连串 v.按顺序排列:测定(整套基因或分子成分的)序列 网络连续:数列:时序 butes.fori出循环 replace Ctrl+字母N也可以打开 输入s ...

  6. delphi 访问 protected 属性 哈哈

    unit Unit39; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syste ...

  7. Java 与 C++ 的比较

    参考 Java 中,一切皆是类 Java 中,所有数据或方法都要放在类中.如果想获得与全局函数等价的功能,可将static方法和static数据放在类里.而 C++ 中有 struct 结构.enum ...

  8. 基于PyQt5的Python-Gui开发

    环境搭建 电脑环境 win10 64位系统 Python3.5安装 从Python官网下载python3.5安装文件,选择windows 64位版本python-3.6.5-amd64.exe.双击安 ...

  9. python正则表达式整理

    正则表达式在处理字符串时很大的作用,爬虫中也经常用到,下面就将一些常用正则表达式做一整理记录,方便以后查看. ^d   表示匹配以d开头的字符串 .      表示匹配任意字符串 *     表示前面 ...

  10. 【SD系列】SAP 退货冲账过账成本更新

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SD系列]SAP 退货冲账过账成本更新   前 ...