1. 构建redis连接池,返还到连接池

    private static JedisPool jedisPool = null;
    private static Jedis jedis; static {
    jedis = getJedisPool().getResource();
    } /**
    * 构建redis连接池
    */
    public static JedisPool getJedisPool() {
    if (jedisPool == null) {
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(1024); // 可用连接实例的最大数目,如果赋值为-1,表示不限制.
    config.setMaxIdle(5); // 控制一个Pool最多有多少个状态为idle(空闲的)jedis实例,默认值也是8
    config.setMaxWaitMillis(1000 * 100); // 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时/如果超过等待时间,则直接抛出异常
    config.setTestOnBorrow(true); // 在borrow一个jedis实例时,是否提前进行validate操作,如果为true,则得到的jedis实例均是可用的
    jedisPool = new JedisPool(config, "127.0.0.1", 6379);
    }
    return jedisPool;
    } /**
    * 释放jedis资源
    */
    public static void returnResource(Jedis jedis) {
    if (jedis != null) {
    jedis.close();
    }
    }
  2. jedis使用

    • 典型的jedis使用方法
    public static String get(String key) {
    String value = null;
    Jedis jedis = null;
    try {
    JedisPool pool = getJedisPool();
    jedis = pool.getResource();
    value = jedis.get(key);
    }
    catch (Exception e) {
    returnResource(jedis);
    e.printStackTrace();
    }
    finally {
    returnResource(jedis);
    }
    return value;
    }

    这种写法会经常忘记返回jedis到pool.参考Spting JdbcTemplate的实现方式,优化如下

    • 优化jedis使用方法
    public static String getByTemplate(final String key) {
    RedisTemplate redisTemplate = new RedisTemplate(getJedisPool());
    String value = redisTemplate.execute(new RedisCallback<String>() {
    @Override
    public String handle(Jedis jedis) {
    return jedis.get(key);
    }
    });
    return value;
    }

    RedisTemplate封装了从JedisPool中取jedis以及返回池中

    public class RedisTemplate {
    
        private JedisPool jedisPool;
    
        public RedisTemplate(JedisPool jedisPool) {
    this.jedisPool = jedisPool;
    } public <T> T execute(RedisCallback<T> callback) {
    Jedis jedis = jedisPool.getResource();
    try {
    return callback.handle(jedis);
    }
    catch (Exception e) {
    // throw your exception
    throw e;
    }
    finally {
    returnResource(jedis);
    }
    } private void returnResource(Jedis jedis) {
    if (jedis != null) {
    jedis.close();
    }
    }
    }
    public interface RedisCallback<T> {
    public T handle(Jedis jedis);
    }
    • 常用的jedis方法

    字符串

    @Test
    public void testString() {
    jedis.set("name", "webb"); // 添加数据
    System.out.println("name -> " + jedis.get("name")); jedis.append("name", " , javaer"); // 拼接
    System.out.println("name -> " + jedis.get("name")); jedis.del("name"); // 删除数据
    System.out.println("name -> " + jedis.get("name")); jedis.mset("name", "webb", "age", "24"); // 设置多个键值对
    jedis.incr("age"); // 进行加1操作 System.out.println("name -> " + jedis.get("name") + ", age -> " + jedis.get("age"));
    }

    列表

    @Test
    public void testList() {
    String key = "java framework"; jedis.lpush(key, "spring");
    jedis.lpush(key, "spring mvc");
    jedis.lpush(key, "mybatis"); System.out.println(jedis.lrange(key, 0 , -1)); // -1表示取得所有 jedis.del(key);
    jedis.rpush(key, "spring");
    jedis.rpush(key, "spring mvc");
    jedis.rpush(key, "mybatis"); System.out.println(jedis.lrange(key, 0 , -1)); // -1表示取得所有 System.out.println(jedis.llen(key)); // 列表长度
    System.out.println(jedis.lrange(key, 0, 3));
    jedis.lset(key, 0 , "redis"); // 修改列表中单个值
    System.out.println(jedis.lindex(key, 1)); // 获取列表指定下标的值
    System.out.println(jedis.lpop(key)); // 列表出栈
    System.out.println(jedis.lrange(key, 0 , -1)); // -1表示取得所有
    }

    散列

    @Test
    public void testMap() {
    String key = "user"; Map<String, String> map = new HashMap<>();
    map.put("name", "webb");
    map.put("age", "24");
    map.put("city", "hangzhou"); jedis.hmset(key, map); // 添加数据 List<String> rsmap = jedis.hmget(key, "name", "age", "city"); // 第一个参数存入的是redis中map对象的key,后面跟的是放入map中的对象的key
    System.out.println(rsmap); jedis.hdel(key, "age"); // 删除map中的某个键值 System.out.println(jedis.hmget(key, "age"));
    System.out.println(jedis.hlen(key)); // 返回key为user的键中存放的值的个数
    System.out.println(jedis.exists(key)); // 是否存在key为user的记录
    System.out.println(jedis.hkeys(key)); // 返回map对象中的所有key
    System.out.println(jedis.hvals(key)); // 返回map对象中所有的value Iterator<String> iterator = jedis.hkeys("user").iterator(); while (iterator.hasNext()) {
    String key2 = iterator.next();
    System.out.print(key2 + " : " + jedis.hmget("user", key2) + "\n");
    }
    }

    集合

    @Test
    public void testSet() {
    String key = "userSet";
    String key2 = "userSet2"; jedis.sadd(key, "webb");
    jedis.sadd(key, "webb");
    jedis.sadd(key, "lebo");
    jedis.sadd(key, "lebo0425");
    jedis.sadd(key, "who"); jedis.srem(key, "who"); // 删除 System.out.println(jedis.smembers(key)); // 获取所有加入的value
    System.out.println(jedis.sismember(key, "who")); // 判断value是否在集合中
    System.out.println(jedis.srandmember(key)); // 随机返回一个value
    System.out.println(jedis.scard(key)); // 返回集合的元素个数 jedis.sadd(key2, "webb");
    jedis.sadd(key2, "ssq"); System.out.println(jedis.sinter(key, key2)); // 交集
    System.out.println(jedis.sunion(key, key2)); // 并集
    System.out.println(jedis.sdiff(key, key2)); // 差集
    }

    有序集合

    @Test
    public void testSortedSet() {
    String key = "sortedSet"; jedis.zadd(key, 1999, "one");
    jedis.zadd(key, 1994, "two");
    jedis.zadd(key, 1998, "three");
    jedis.zadd(key, 2000, "four");
    jedis.zadd(key, 2017, "five"); Set<String> setValues = jedis.zrange(key, 0 , -1); // score从小到大
    System.out.println(setValues);
    Set<String> setValues2 = jedis.zrevrange(key, 0, -1); // score从大到小
    System.out.println(setValues2); System.out.println(jedis.zcard(key)); // 元素个数
    System.out.println(jedis.zscore(key, "three")); // 元素下标
    System.out.println(jedis.zrange(key, 0, -1)); // 集合子集
    System.out.println(jedis.zrem(key, "five")); // 删除元素
    System.out.println(jedis.zcount(key, 1000, 2000)); // score在1000-2000内的元素个数
    }

参考文章:

1.https://my.oschina.net/u/866190/blog/389543

2.http://blog.csdn.net/edagarli/article/details/21887111

Jedis连接池使用的更多相关文章

  1. Java与redis交互、Jedis连接池JedisPool

    Java与redis交互比较常用的是Jedis. 先导入jar包: commons-pool2-2.3.jar jedis-2.7.0.jar 基本使用: public class RedisTest ...

  2. Jedis连接池

    jedis是官方首选的java客户端开发包 Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java.C.C#.C++.php.Node.js.Go等. 在官方网站里列一些Ja ...

  3. 详解Jedis连接池报错处理

    在使用Jedis连接池模式下,比较常见的报错如下: redis.clients.jedis.exceptions.JedisConnectionException:Could not get a re ...

  4. 为什么要用Jedis连接池+浅谈jedis连接池使用

    为什么要使用Jedis连接池 Redis作为缓存数据库理论上和MySQL一样需要客户端和服务端建立起来连接进行相关操作,使用MySQL的时候相信大家都会使用一款开源的连接池,例如C3P0.因为直连会消 ...

  5. Jedis与Jedis连接池

    1.Jedis简介 实际开发中,我们需要用Redis的连接工具连接Redis然后操作Redis, 对于主流语言,Redis都提供了对应的客户端: https://redis.io/clients 2. ...

  6. 三、redis学习(jedis连接池)

    一.jedis连接池 二.jedis连接池+config配置文件 三.jedis连接池+config配置文件+util工具类 util类 public class JedisPoolUtils { / ...

  7. Java Redis系列3(Jedis的使用+jedis连接池技术)

    Jedis的使用 什么是Jedis? 一款Java操作redis数据库的工具 使用步骤 1.下载redis所需的java包 2.使用步骤 import org.junit.Test; public c ...

  8. Jedis 连接池的基本使用

    jedis直连 每次操作都会创建一个jedis对象,执行完毕后关闭连接后释放,对应的就是一次Tcp连接. jedis连接池 预先生成一批jedis连接对象放入连接池中,当需要对redis进行操作时从连 ...

  9. jedis连接池详解(Redis)

    转自:http://tianxingzhe.blog.51cto.com/3390077/1684306 原子性(atomicity): 一个事务是一个不可分割的最小工作单位,事务中包括的诸操作要么都 ...

随机推荐

  1. Docker remote API简单配置使用

    1.启动docker remote API的方式如下: docker -d -H uninx:///var/run/docker.sock -H tcp://0.0.0.0:5678 2.但是为了伴随 ...

  2. (转)CentoS 下报的 Requires: perl(:MODULE_COMPAT_5.8.8)

    vim /etc/yum.repos.d/epel.repo 把 mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5& ...

  3. TypeScript入门-基本数据类型

    ▓▓▓▓▓▓ 大致介绍 TypeScript是由C#语言之父Anders Hejlsberg主导开发的一门编程语言,TypeScript本质上是向JavaScript语言添加了可选的静态类型和基于类的 ...

  4. Mysql数据库读写分离Amoeba

    1.理解读写分离的原理 随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状.读写分离现在被大量应 ...

  5. smartGWT DataSource数据动态加载

    昨天和今天早上,用DataSource从数据库后台动态加载数据,我的业务是这样的: 我有两个SelectItem选择框,第一个选择框里面的数据是单位,第二个选择框中的数据是对应单位的人,因为人可能有重 ...

  6. SQL Server 备份所有数据库代码

    今天让我备份一下网上所有数据库,猛地一看,几百个呢, 坑爹呢,只好网上找找有没有简便的,没想到还真有 记下来,以后好用,哈哈... use master declare @DbName varchar ...

  7. Ubuntu 分辨率调整及操作问题解决

    步骤: 1.在控制窗口上:点击  设备--->安装则鞥强功能:如图1: 若点击后出现图2的情况,则在左边找到光盘图标,右键-->弹出(图3): 然后再重复本步骤: 图1 图2 图3 2.在 ...

  8. c#FTP操作类,包含上传,下载,删除,获取FTP文件列表文件夹等Hhelp类

    有些时间没发表文章了,之前用到过,这是我总结出来关于ftp相关操作一些方法,网上也有很多,但是没有那么全面,我的这些仅供参考和借鉴,希望能够帮助到大家,代码和相关引用我都复制粘贴出来了,希望大家喜欢 ...

  9. --save 和 --save-dev的区别

    --save是对生产环境所需依赖的声明(开发应用中使用的框架,库,比如jquery,bootstrap等) --save-dev是对开发环境所需依赖的声明(构建工具,测试工具,比如babel,gulp ...

  10. Doxygen + Graphviz windows下安装配置(图解)

    查看一些开源代码经常被一些函数的调用关系给绕进去,经过网上查阅资料,发现了这个好用的方法,拿出来和大家分享下安装和应用的过程. 本人常用windows系统,所以主要讲解下windows下相关的内容 要 ...