增加池的配置文件redis-pool.properties:

  1. #最大能够保持idel状态的对象数
  2. redis.pool.maxIdle=200
  3. #当池内没有返回对象时,最大等待时间
  4. redis.pool.maxWait=1000
  5. #当调用borrow Object方法时,是否进行有效性检查
  6. redis.pool.testOnBorrow=true
  7. #当调用return Object方法时,是否进行有效性检查
  8. redis.pool.testOnReturn=true
  9. #IP
  10. redis.ip=127.0.0.1
  11. #Port
  12. redis.port=6379

RedisApp.java

  1. package com.yzl;
  2.  
  3. import java.util.ResourceBundle;
  4.  
  5. import org.apache.log4j.Logger;
  6.  
  7. import redis.clients.jedis.Jedis;
  8. import redis.clients.jedis.JedisPool;
  9. import redis.clients.jedis.JedisPoolConfig;
  10.  
  11. /**
  12. * Reids之jedis的CRUD操作
  13. *
  14. * @author yangzhilong
  15. * @see [相关类/方法](可选)
  16. * @since [产品/模块版本] (可选)
  17. */
  18. public class RedisApp {
  19. public Logger log = Logger.getLogger(this.getClass());
  20.  
  21. private static JedisPool pool;
  22. private static ResourceBundle bundle;
  23.  
  24. static{
  25. bundle = ResourceBundle.getBundle("redis-pool");
  26. if(bundle == null){
  27. //假设直接抛出Exception咋必须进行处理,不然编译不会通过
  28. throw new IllegalArgumentException("redis-pool.properties file is not found");
  29. }
  30. JedisPoolConfig config = new JedisPoolConfig();
  31. //设置pool的一些参数,可选,详细配置项参见GenericObjectPoolConfig类
  32. config.setMaxIdle(Integer.valueOf(bundle.getString("redis.pool.maxIdle")));
  33. config.setMaxWaitMillis(Long.valueOf(bundle.getString("redis.pool.maxWait")));
  34. config.setTestOnBorrow(Boolean.valueOf(bundle.getString("redis.pool.testOnBorrow")));
  35. config.setTestOnReturn(Boolean.valueOf(bundle.getString("redis.pool.testOnReturn")));
  36.  
  37. //使用默认配置时可以使用如下方法初始化池
  38. //pool = new JedisPool(bundle.getString("redis.ip"), Integer.valueOf(bundle.getString("redis.port")));
  39. pool = new JedisPool(config, bundle.getString("redis.ip"), Integer.valueOf(bundle.getString("redis.port")));
  40. }
  41.  
  42. /**
  43. *
  44. * 功能描述: <br>
  45. * CRUD操作之hello world
  46. *
  47. * @see [相关类/方法](可选)
  48. * @since [产品/模块版本](可选)
  49. */
  50. public void crudFromRedisWidthSimple(){
  51. Jedis jedis = new Jedis(bundle.getString("redis.ip"), Integer.valueOf(bundle.getString("redis.port")));
  52. log.info("get connection with simple ");
  53. crudMethod(jedis);
  54. //关闭连接
  55. jedis.close();
  56. }
  57.  
  58. /**
  59. *
  60. * 使用common-pool操作redis
  61. *
  62. * @see [相关类/方法](可选)
  63. * @since [产品/模块版本](可选)
  64. */
  65. public void crudFromRedisWidthPool(){
  66. Jedis jedis = pool.getResource();
  67. log.info("get connection from pool , obect is:" + jedis);
  68. crudMethod(jedis);
  69. //释放链接
  70. pool.returnResourceObject(jedis);
  71. }
  72.  
  73. /**
  74. *
  75. * crud基本操作单元
  76. *
  77. * @param jedis
  78. * @see [相关类/方法](可选)
  79. * @since [产品/模块版本](可选)
  80. */
  81. private void crudMethod(Jedis jedis){
  82. log.info("insert value to redis~~~");
  83. jedis.set("name", "hello jedis");
  84.  
  85. log.info("get value from redis, value:" + jedis.get("name"));
  86.  
  87. log.info("delete key from redis~~~");
  88. jedis.del("name");
  89.  
  90. log.info("get value from redis, value:" + jedis.get("name"));
  91. }
  92. }

RedisAppTest.java

  1. package com.yzl;
  2.  
  3. import org.junit.Test;
  4.  
  5. /**
  6. * RedisApp的测试类
  7. *
  8. * @author yangzhilong
  9. * @see [相关类/方法](可选)
  10. * @since [产品/模块版本] (可选)
  11. */
  12. public class RedisAppTest {
  13.  
  14. @Test
  15. public void crudFromRedisWidthSimpleTest(){
  16. RedisApp app = new RedisApp();
  17. app.crudFromRedisWidthSimple();
  18. }
  19.  
  20. @Test
  21. public void crudFromRedisWidthPoolTest(){
  22. RedisApp app = new RedisApp();
  23. app.crudFromRedisWidthPool();
  24. }
  25. }

运行单元测试的结果:

  1. 2015-08-12 16:03:24,449 [com.yzl.RedisApp]-[INFO] get connection from pool , obect is:redis.clients.jedis.Jedis@cee47f1
  2. 2015-08-12 16:03:24,449 [com.yzl.RedisApp]-[INFO] insert value to redis~~~
  3. 2015-08-12 16:03:24,449 [com.yzl.RedisApp]-[INFO] get value from redis, value:hello jedis
  4. 2015-08-12 16:03:24,449 [com.yzl.RedisApp]-[INFO] delete key from redis~~~
  5. 2015-08-12 16:03:24,449 [com.yzl.RedisApp]-[INFO] get value from redis, value:null

下一篇:5、redis之使用spring集成commons-pool

4、redis之使用commons-pool的更多相关文章

  1. Apache Commons Pool 故事一则

    Apache Commons Pool 故事一则 最近工作中遇到一个由于对commons-pool的使用不当而引发的问题,习得正确的使用姿势后,写下这个简单的故事,帮助理解Apache Commons ...

  2. 池化 - Apache Commons Pool

    对于那些创建耗时较长,或者资源占用较多的对象,比如网络连接,线程之类的资源,通常使用池化来管理这些对象,从而达到提高性能的目的.比如数据库连接池(c3p0, dbcp), java的线程池 Execu ...

  3. JedisCluster中应用的Apache Commons Pool对象池技术

    对象池技术在服务器开发上应用广泛.在各种对象池的实现中,尤其以数据库的连接池最为明显,可以说是每个服务器必须实现的部分.   apache common pool 官方文档可以参考:https://c ...

  4. Apache Commons Pool 故事一则 专题

    Apache Commons Pool 故事一则 最近工作中遇到一个由于对commons-pool的使用不当而引发的问题,习得正确的使用姿势后,写下这个简单的故事,帮助理解Apache Commons ...

  5. Tomcat 开发web项目报Illegal access: this web application instance has been stopped already. Could not load [org.apache.commons.pool.impl.CursorableLinkedList$Cursor]. 错误

    开发Java web项目,在tomcat运行后报如下错误: Illegal access: this web application instance has been stopped already ...

  6. NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool

    错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/pool/impl ...

  7. Spring + Tomcat 启动报错java.lang.ClassNotFoundException: org.apache.commons.pool.impl.GenericObjectPool

    错误如下: -- ::,-[TS] INFO http-- org.springframework.beans.factory.support.DefaultListableBeanFactory - ...

  8. org/apache/commons/pool/impl/GenericObjectPool异常的解决办法

    org/apache/commons/pool/impl/GenericObjectPool异常的解决办法 webwork+spring+hibernate框架的集成, 一启动Tomcat服务器就出了 ...

  9. 对象池化技术 org.apache.commons.pool

    恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率.Jakarta Commons Pool组件提供了一整套用于实现对象池化的框架,以及若干种各具特色的对象池实现,可以 ...

  10. Cache Lucene IndexReader with Apache Commons Pool

    IndexReaderFactory.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2 ...

随机推荐

  1. 为什么你的session不见了

    一:现象 有小伙伴写了下面一段代码,然后发现,随着每次关闭浏览器,count的值重新开始计数了,如下: protected void doGet(HttpServletRequest request, ...

  2. idea创建springcloud项目图文教程(EurekaServer注册中心)

    http://blog.csdn.net/hcmony/article/details/77854999 idea创建springcloud项目图文教程(EurekaServer注册中心)(六) 1, ...

  3. iCOM组件(iComponent,应用或学习组件)

    iCOM(英文全称:i + component,应用或学习组件,或iCOM组件),为学习资源的一种表现形式,是面向不同类型的学习对象(某一知识点或某一类知识点,如词汇.句子)专门开发的.在外部可重用的 ...

  4. git如何删除远端不存在的本地分支?

    问题:远端分支删除后,如何删除之前拉取的本地分支? 答案: git fetch -p git remote show origin 可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息 ...

  5. The node (XXX.XXX.XXX.XXX,XXX.XXX.XXX.XXX)has already some ScaleIO components installed

    安装ScaleIO 1.32遇到如下报错, 怎么办?   很简单, 在控制面板里把ScaleIO的软件删掉即可.

  6. 让App中增加LruCache缓存,轻松解决图片过多造成的OOM

    上次有过电话面试中问到Android中的缓存策略,当时模糊不清的回答,如今好好理一下吧. Android中普通情况下採取的缓存策略是使用二级缓存.即内存缓存+硬盘缓存->LruCache+Dis ...

  7. 转:查看linux系统版本号

    转自: http://blog.csdn.net/zhuying_linux/article/details/6859286 lsb_release -a

  8. 在javascript中substr和substring的区别是什么

      1.substring 用于提取字符串中介于两个指定下标之间的字符 substring(start,end) 开始和结束的位置,从零开始的索引 substring 方法返回的子串包括 start ...

  9. 2017年11月8日最新仿互站导航t5友价商城-9套模板首页都增加微信登陆

    今天测试效果如下,直接看图吧,入口在下方,点击图片直达 把9套餐模板都添加了微信首页登陆,仿互站的导航,操作比互站还要方便,官方一直对https 支持不太友好,索性把所有的https bug都修复了, ...

  10. ecshop二次开发 使用ecshop电子商务系统的100个小问题

    自己从事B4C电子商务开发一段时间了,特别对ecshop深有体会,刚接触的时候不容易理解,下面将根据自己的经验,来总结100条关于操作ecshop电子商务系统的小问题. 1:如何修改网站"欢 ...