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先导入依赖包

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>

3.2,测试代码

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

3.3,创建jedisPool

这种每用一次都需要创建一个连接池  消耗内存  

public static void main( String[] args ){
//1.创建JedisPool对象,从JedisPool对象中获取Jedis连接
JedisPool jedisPool = new JedisPool("192.168.58.10",6379);
Jedis jedis = jedisPool.getResource();
//2.通过Jedis客户端操作Redis服务器
String value1 = jedis.get("key1");
System.out.println(value1);
//3.关闭Jedis客户端
jedis.close();
}

四、Jedis和Spring的整合

4.1导入spring 和jedis的包

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

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

五、Jedis和SSM整合

5.1:导包

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

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

第一种

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

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

package com.ujy.maven.utils;
import java.io.*;
public class SerizlizableUtil { //完成序列化
public static byte[] serializable(Object object){
/*
* 接收一个对象,传到writeObject里面,通过对象输出流写入到字节输出流
* ,然后从字节数组输出流的toByteArray获取这个数组,然后返回给调用者
* */
try {
//1.字节数组输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream(); //3
//2.对象输出流
ObjectOutputStream oos = new ObjectOutputStream(baos);//
oos.writeObject(object); //
byte[] bytes = baos.toByteArray();//
return bytes;//
}catch (Exception e){
e.printStackTrace();
}
return null;
}
//完成反序列化
public static Object unSerializable(byte [] bytes){
//先判断是否非空 非空直接返回
if (bytes==null){
return null;
}
try {
//1.字节数组输入流
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
//2.对象输入流
ObjectInputStream ois = new ObjectInputStream(bais);
Object o = ois.readObject();
return o;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

然后在服务层应用:

 @Autowired
private PersonDao personDao;
@Autowired
private JedisPool jedisPool; public List<Person> findAll() {
Jedis jedis = jedisPool.getResource();
List<Person> list=null; long startTime = System.currentTimeMillis();
System.out.println(startTime);
//1.先去缓存中去查数据 ,
byte[] lists = jedis.get(SerizlizableUtil.serializable("personList"));
//2. 如果没有就从数据库查 然后存入缓存 下次可以从缓存取。
if (lists==null){
list = personDao.findAll();
long endTime1 = System.currentTimeMillis();
System.out.println("去数据库中查询数据用的时间为:"+(endTime1-startTime));
jedis.set(SerizlizableUtil.serializable("personList") ,SerizlizableUtil.serializable(list));
}else {
//3.如果缓存中有数据,直接反序列化,返回给控制层
list=(List<Person>) SerizlizableUtil.unSerializable(lists);
System.out.println(list);
long endTime2 = System.currentTimeMillis();
System.out.println("去缓存中查询数据用的时间为:"+(endTime2-startTime));
}
jedis.close();
return list;
}

第二种:

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

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

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

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

无论任意数据类型转换成字符串就通过:JSON.toJSONString()
字符串转换成其他数据类型:
String --->对象类型JSON.parseObj()
String--->数组类型JSON.parseArray()
String --->Map类型JSON.parseObj() @Test
public void test2(){
// String --->对象类型JSON.parseObj()
Person person = new Person(6,"王子",1,22);
String s = JSON.toJSONString(person); Person person1 = JSON.parseObject(s, Person.class);
System.out.println(person1); //String--->数组类型JSON.parseArray()
List<Person> list = new ArrayList<Person>();
list.add(new Person(7,"格格",0,20));
list.add(new Person(8 ,"公主",0,21));
list.add(new Person(9,"逍遥",1,23));
String s1 = JSON.toJSONString(list); List<Person> people = JSON.parseArray(s1, Person.class);
System.out.println(people); //String --->Map类型JSON.parseObj()
Map<String,Object> map = new HashMap<String, Object>();
map.put("小李飞刀","刀无虚发");
map.put("飞檐走壁","乃真人也");
String s = JSON.toJSONString(map); Map map1 = JSON.parseObject(s, Map.class);
System.out.println(map1);
}

然后应用到服务层

  @Autowired
private PersonDao personDao;
@Autowired
private JedisPool jedisPool; public List<Person> findAll() {
Jedis jedis = jedisPool.getResource();
List<Person> list=null; long startTime = System.currentTimeMillis();
System.out.println(startTime);
//1.先去缓存中去查数据 ,
String sss =jedis.get("personList");
//2. 如果没有就从数据库查 然后存入缓存 下次可以从缓存取。
if (sss==null){
list = personDao.findAll();
long endTime1 = System.currentTimeMillis();
System.out.println("去数据库中查询数据用的时间为:"+(endTime1-startTime));
jedis.set(JSON.toJSONString("personList") , JSON.toJSONString(list));
}else {
//3.如果缓存中有数据,直接反序列化,返回给控制层
list=JSON.parseArray(sss,Person.class);
System.out.println(list);
long endTime2 = System.currentTimeMillis();
System.out.println("去缓存中查询数据用的时间为:"+(endTime2-startTime));
}
jedis.close();
return list;
}

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. 在asp.net 中怎样上传文件夹

    以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传  ...

  2. USACO Overplanting ( 线段树扫描线 )

    题意 : 在二维平面上给出 N 个矩形,问你所有矩形构成的图案的面积是多少(相互覆盖的地方只计算一次) 分析 :  求矩形面积并可以模拟来做,不过使用线段树来辅助做扫描线可以更高效地求解 扫描线顾名思 ...

  3. HDU 6616 Divide the Stones

    目录 题面 中文题意 比赛惨状 我的走不通的思路 \(m\)是偶数的情况 \(m\)是奇数的情况 题解的思路 另一些思路 源代码 题面 Time limit 3000 ms Memory limit ...

  4. sh_05_超市买苹果

    sh_05_超市买苹果 # 1. 定义苹果的单价 price = 8.5 # 2. 挑选苹果 weight = 7.5 # 3. 计算付款金额 money = weight * price # 4. ...

  5. BZOJ 1029 建筑抢修(贪心堆)

    原题代号:BZOJ 1029 原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1029 原题描述: 建筑抢修 小刚在玩JSOI提供的一个称之为 ...

  6. layer 弹出层不能居中

    $("#btnAdd").button("loading"); parent.layer.open({ title: '添加菜单', type: 2, maxm ...

  7. 拆系数$FFT$($4$遍$DFT$)

    #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> ...

  8. React Native商城项目实战13 - 首页中间上部分内容

    1.HomeMiddleView.js /** * 首页中间上部分内容 */ import React, { Component } from 'react'; import { AppRegistr ...

  9. vue2.0 之 douban (四)创建Swipe图片轮播组件

    swiper中文文档:http://www.swiper.com.cn 1.我们在components文件夹里创建一个swipe组件,将需要用到的js以及css文件复制到assets/lib文件夹下, ...

  10. 基于GTID模式MySQL主从复制

    基于GTID模式MySQL主从复制 GTID复制原理:基于GTID的复制是MySQL 5.6后新增的复制方式GTID (global transaction identifier) 即全局事务ID, ...