Jedis的使用,Jedis连接池,JedisPool

使用Redis官方推荐的 Jedis,在 java应用中操作 Redis。 Jedis几乎涵盖了 Redis的所有命令。操作 Redis的命令在 Jedis中以方法的形式出现。 jedis完全兼容 redis 2.8.x and 3.x.x

  1.  Jedis源码: https://github.com/xetorthio/jedis
  2.  api文档: http://xetorthio.github.io/jedis/
  3.  下载: http://search.maven.org/,搜索 jedis

1. 添加Jedis和Commons-Pool的maven依赖

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.4.2</version>
</dependency>

2. 使用Jedis对象直接操作String数据类型的数据

public class RedisString {
    public static void main(String[] args){
        // 创建Jedis对象,连接redis服务器
        String host = "212.64.71.127";
        int port = 6379;
        Jedis jedis = new Jedis(host, port);
        // 身份认证
        jedis.auth("123123");

        // 操作redis数据库
        jedis.set("course", "java");

        String val = jedis.get("course");

        // 一次性设置多个值
        jedis.mset("break", "油条", "lunch", "盖饭");

        // 一次性获取多个key对应的值
        List<String> vals = jedis.mget("course", "break", "lunch");
        for (String va: vals) {
            System.out.println(va);
        }
    }
}

3. 由于Jedis是通过网络访问Redis数据库,并且Jedis的链接类似于JDBC的链接,也是很耗费资源的,如果我们每次操作数据库都重新创建Jedis对象显然是不明智的。所以我们参考JDBC的连接池技术,为Jedis也实现了连接池技术,在Jedis连接池中预先创建多个Jedis对象,每次使用Jedis对象的时候直接从链接池中获取,使用完毕后再放入连接池即可。

3.1 使用Jedis连接池技术,从连接池中获取到Jedis对象操作Hash类型的数据

①创建一个工具类,负责Jedis连接池的管理

public class RedisPoolUtil {
        private static JedisPool pool;
    
        public static JedisPool open(String host, int port){
            if(pool == null){
                // 创建JedisPool配置对象,配置Jedis池的配置项
                JedisPoolConfig poolConfig = new JedisPoolConfig();
                // 设置Jedis池中最大的Jedis实例数(pool中存放的是Jedis对象实例,默认为8个)
                poolConfig.setMaxTotal(20);
                // 最大空闲redis实例数,设置这个可以保留足够的Jedis实例,可以保证快速获取到Jedis实例
                poolConfig.setMaxIdle(3);
                // 提前检查Jedis对象,为true的Jedis一定是可用的
                poolConfig.setTestOnBorrow(true);
    
                // 创建Jedis池对象
                pool = new JedisPool(poolConfig, host, port, 3000, "123123");
            }
            return pool;
        }
    
        public static void close(){
            if(pool != null){
                pool.close();
            }
        }
    }

②从Jedis连接池中获取Jedis对象,操作数据

public class RedisHashPool {
    public static void main(String[] args){
        String host = "212.64.71.127";
        int port = 6379;

        // 获取JedisPool
        JedisPool pool = RedisPoolUtil.open(host, port);
        // 从Jedis Pool中获取Jedis实例
        Jedis jedis = pool.getResource();
        try{
            jedis.hset("student", "name", "张三");
            String name = jedis.hget("student", "name");
            System.out.println(name);

            Map<String, String> map = new HashMap<String, String>();
            map.put("age", "20");
            map.put("address", "beijing");
            jedis.hmset("student", map);
            Map<String, String> stuMap = jedis.hgetAll("student");
            for (String key:
                 stuMap.keySet()) {
                System.out.println("key: "+ key + " val: " + stuMap.get(key));
            }
        }finally{
            // 将Jedis实例对象放回到Jedis Pool中
            if(jedis != null){
                jedis.close();
            }
        }
    }
}

4. 通过Jedis完成Redis的事务支持

public class RedisTransaction {
    public static void main(String[] args) {
        String host = "212.64.71.127";
        int port = 6379;
        JedisPool pool = RedisPoolUtil.open(host, port);
        Jedis jedis = pool.getResource();

        try{
            // 开启事务
            Transaction trans = jedis.multi();
            // 添加redis命令,通过事务对象
            trans.lpush("course", "html", "java", "css");
            trans.lrange("course", 0, -1);
            // 提交事务,返回事务的执行结果
            final List<Object> res = trans.exec();
            for (Object obj:
                 res) {
                System.out.println(obj);
            }
        }finally {
            if(jedis != null){
                jedis.close();
            }
        }
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值