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. less可以做什么?less详解!(less嵌套选择器实现纯CSS二级导航)

    前端技术众多,作为一名前端工程师,我们每接触新技术首先要懂得此技术的优势和劣势,这是最基本的.往深入了说还需要懂得技术的应用场景,配合的技术等,方便为以后架构做准备.而less作为一门CSS预处理语言 ...

  2. Windows 10 IoT Serials 8 – 如何改变UWP应用的目标平台

    Windows Insider计划直接加速了Windows系统的迭代,缩短了系统发布的周期.就Windows 10 IoT Core而言,迭代的速度和Windows 10 for PC.Windows ...

  3. Error--解决使用Application Loader提交ipa包审核时的报错:ERROR ITMS-90168: "The binary you uploaded was invalid."

    在提交iTunes Connect审核时,使用Application Loader提交ipa包时报错:ERROR ITMS-90168: "The binary you uploaded w ...

  4. javaweb浏览器随机输出一张验证码图片

    一.在web.xml中的配置如下: <?xml version="1.0" encoding="UTF-8"?><web-app xmlns: ...

  5. Solr6.5在Centos6上的安装与配置 (一)

    这篇文章主要是介绍在Centos6上Solr6.5的安装与配置. 一.安装准备及各软件使用版本说明: 1.JDK8,版本jdk1.8.0_121下载地址:jdk-8u121-linux-x64.tar ...

  6. as3中去掉字符串两边的空格,换行符

     as3 去掉字符串两边的空格,换行符,方法一  ActionScript Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20   pub ...

  7. TextView的几个属性

    1. android:autoLink 自动识别文本中包含的链接,如网址.邮箱.电话.地图等:属性值有如下几种: web------------ ------只识别网址 email---------- ...

  8. 性能优化之AJAX

    明天就放假啦~哈哈.四月份好像还没有输出呢,吓得我赶紧写点东西... Ajax是高性能JavaScript的基础. Ajax,从最基本的层面来说,是一种与服务器通信而无需重载页面的方法.数据可以从服务 ...

  9. [讨论] Window XP 安装msxml6后,load xml时提示schema验证失败

    现象:在windows XP x64下,使用用户安装的msxml6库加载xml文件时失败. 进一步说明: 该xml文档使用了W3C的名称空间 xmlns:xsi= "http://www.w ...

  10. 修改Gradle 和Maven本地仓库的位置 方法

    关于Maven的配置: 用过Maven的兄弟应该知道Maven可以通过配置 conf文件夹下面的settings.xml文件来修改maven下载的包,默认是下在c盘的用户文件夹下的.m2中,日积月累. ...