IOTool类:

package com.lq.tool;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;/*** IO流工具类* * @author GaoHuanjie*/
public class IOTool {/*** 将对象转换为二进制数据,即序列化对象* * @author GaoHuanjie*/public static 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;}/*** 将二进制数据转为对象,即反序列化对象* * @author GaoHuanjie*/public static 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;}
}

RedisTool类:

package com.lq.tool;import java.net.SocketTimeoutException;import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.exceptions.JedisConnectionException;/*** RedisTool工具类* * @author GaoHuanjie*/
public class RedisTool {private static Logger logger = LoggerFactory.getLogger(RedisTool.class);private static JedisPool pool = null;{if (pool == null) {JedisPoolConfig config = new JedisPoolConfig();// 控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;// 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。// config.setMaxActive(500);config.setMaxTotal(40);// 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。config.setMaxIdle(20);// 表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;config.setMaxWaitMillis(1000 * 2);// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;config.setTestOnBorrow(true);// 10000为timeout,由于没有为redis设置密码,所以这里调用该构造函数pool = new JedisPool(config, "127.0.0.1", 6379, 10000);}}/*** 获取Jedis对象,一个对象代表一次Java代码与Redis的连接* * @author GaoHuanjie*/private Jedis getJedis() {int timeoutCount = 0;while (true) {// 如果是网络超时则多试几次try {return pool.getResource();} catch (Exception e) {// 底层原因是SocketTimeoutException,不过redis已经捕捉且抛出JedisConnectionException,不继承于前者 e.printStackTrace();if (e instanceof JedisConnectionException || e instanceof SocketTimeoutException) {timeoutCount++;logger.warn("getJedis timeoutCount={}", timeoutCount);System.out.println("getJedis timeoutCount={}" + timeoutCount);if (timeoutCount > 3) {break;}} else {logger.warn("jedisInfo。NumActive=" + pool.getNumActive() + ", NumIdle=" + pool.getNumIdle()+ ", NumWaiters=" + pool.getNumWaiters() + ", isClosed=" + pool.isClosed());logger.error("getJedis error", e);System.out.println("jedisInfo。NumActive=" + pool.getNumActive() + ", NumIdle=" + pool.getNumIdle()+ ", NumWaiters=" + pool.getNumWaiters() + ", isClosed=" + pool.isClosed());break;}}}return null;}/*** 释放连接资源* * @param pool* @param redis*/private void close(Jedis jedis) {if (jedis != null) {jedis.quit();jedis.close();}}/*** 添加数据* * @author GaoHuanjie*/public boolean save(String key, Object obj) {Jedis jedis = null;try {jedis = getJedis();final String result = jedis.set(IOTool.toByteArray(key), IOTool.toByteArray(obj));return StringUtils.equals(result, "OK");} catch (Exception e) {return false;} finally {close(jedis);}}/*** 删除数据* * @author GaoHuanjie*/public boolean delete(String key) {Jedis jedis = null;try {jedis = getJedis();jedis.del(IOTool.toByteArray(key));return true; // 暂时未知判断成功与否} finally {close(jedis);}}/*** 获取对象* * @author GaoHuanjie*/public Object get(String key) {Jedis jedis = null;try {jedis = getJedis();if (!jedis.exists(IOTool.toByteArray(key))) {return null;}return IOTool.toObject(jedis.get(IOTool.toByteArray(key)));} catch (Exception e) {return null;} finally {close(jedis);}}
}

Test类:

package com.lq.test;import java.io.Serializable;import com.lq.tool.RedisTool;public class Test {public static void main(String[] args) {RedisTool redisTool = new RedisTool();redisTool.save("name", "gaohuanjie");System.out.println("删除前:"+redisTool.get("name"));redisTool.delete("name");System.out.println("删除后:"+redisTool.get("name"));System.out.println("~~~~~~~~~~~~~~~~~~~~~~~操作自定义对象~~~~~~~~~~~~~~~~~~~~~~~~~~~");Student student = new Student();redisTool.save("student", student);//此时Student类必须实现Serializable接口student = (Student)redisTool.get("student");student.say();}
}class Student implements Serializable{private static final long serialVersionUID = -2093251712448621079L;public void say() {System.out.println("Hello Redis");}
}

效果:

Redis应用(三)——在非框架中的应用相关推荐

  1. CSS面试复习(三):预处理器、工程化方案、三大框架中的CSS

    一.预处理器 1.介绍 基于CSS的另一种语言.通过工具编译成CSS.添加了很多CSS不具备的特性.能提升CSS文件的组织 2.less嵌套 3 .sass嵌套 4. less变量 5.sass变量 ...

  2. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  3. java中三个基本框架_对于Java基础者应该如何理解Java中的三大框架!

    三大框架:Struts+Hibernate+Spring Java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作 ...

  4. 非三族非五族元素在硅和锗中的作用

    实验结果: 1.非三族非五族元素在硅和锗的禁带当中,往往引入的施主能级距离导带底很远,而引入的受主能级距离价带顶很远,这样的杂质能级称为深杂质能级,对应的杂质称为深能级杂质 2.深能级杂质可以产生多次 ...

  5. springboot(三):Spring boot中Redis的使用

    转自www.ityouknow.com spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memc ...

  6. delphi接口带上请求头是什么意思_Gin框架中使用JWT进行接口验证

    背景: 在如今前后端分离开发的大环境中,我们需要解决一些登陆,后期身份认证以及鉴权相关的事情,通常的方案就是采用请求头携带token的方式进行实现.本篇文章主要分享下在Golang语言下使用jwt-g ...

  7. Redis详解及在项目中应用

    文章目录 前言 一.关于Redis 二.Redis的简单操作 三.在Spring Boot项目中读写Redis Redis测试 四.在项目中应用Redis 五.关于缓存预热 六.关于自动更新缓存 总结 ...

  8. PHP框架中的日志系统

    引言 接触过php框架的朋友们可能都知道,日志在项目中的重要作用了,他可以帮助我们定位错误的位置,让程序更友好(处理得当的话不会直接抛出一大堆只有程序猿才真正动的英文),调试的时候也会很方便,还可以记 ...

  9. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  10. 一文探讨 RPC 框架中的服务线程隔离

    Kirito 推荐语:最近秋招开始了,很多学生开始准备起了秋招,有很多人想知道进一些有名的互联网公司实习有什么要求,正好最近跟一位阿里春招的实习小伙子聊了一些 RPC 相关的知识点,于是我把这篇他的思 ...

最新文章

  1. Django搭建简单的站点
  2. 基于django的视频点播网站开发-step2-搭建环境
  3. MemoryStream的一些问题
  4. 服务器系统日志有哪些centos,CentOS 分析服务器日志命令
  5. workunit 的指的工作单元是什么_分频器是做什么用的?
  6. UI代码练习-视图的层次关系
  7. 【ThinkingInC++】66、pointer Stash的使用
  8. CountDownLatch和CyclicBarrier的区别
  9. 移动APP开发的五个重要步骤
  10. 遥感大辞典_学遥感必读的十本书
  11. 分享(转载)跟大家分享一下牛人常用的资源类,供大家参考、学习。
  12. 【HAVENT原创】Salesforce 给字段加上链接
  13. postgresql 转 mysql_PostgreSQL转换为Mysql
  14. hoolilaw特别分享:在美国喝多少酒就算酒驾
  15. 1.16 常用电平标准(TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL)
  16. postman传布尔类型的值传不进去
  17. 电化学: 电解池,原电池
  18. BD(蓝光)的LPCM格式到PCM格式的转换
  19. 安装vs2015_community()社区版+win10,安装之后,打开项目显示不兼容,应用程序未能正确安装
  20. Docker构建Shipyard

热门文章

  1. 无敌打印(适用各种浏览器自带打印功能)
  2. “requireJs前传”之为什么要用前端模块化?
  3. Eclipse 导入项目与 svn 插件关联全过程记录
  4. 用request.getParameterMap()获得jsp页面元素的集合出现[Ljava.lang.String;@的问题解决
  5. Windows7与Window2008 64位IIS7上面配置操作Excel
  6. apache的mpm工作模式
  7. iOS-代码实现TableViewCell创建多个样式的Cell
  8. 解决Weblogic与Hibernate的jar冲突
  9. Discuz!NT3.0博客扩展
  10. 详解FSMO的五种角色