Redis系列2-Jedis客户端的使用

  1. Jedis是什么

Jedsi是基于java语言开发,去链接Redis服务的的客户端。

  1. 下载地址

https://mvnrepository.com/artifact/redis.clients/jedis/4.3.1

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.3.1</version>
</dependency>
  1. 字符串(string)

package com.test;
import redis.clients.jedis.Jedis;
public class JedisTest {
    public static void main(String[] args) {
        /**
         * host 地址
         * port 端口
         * connectionTimeout 链接超时,单位毫秒
         * soTimeout 读写超时,单位毫秒
         */
        Jedis jedis = new Jedis("127.0.0.1",6379,2000,100);
        jedis.set("key","value");
        String value = jedis.get("key");
        System.out.println(value);
    }
}
// 控制台输出
value
Process finished with exit code 0
  1. 哈希类型(hash)

package com.test;
import redis.clients.jedis.Jedis;
import java.util.Map;
public class JedisTest {
    public static void main(String[] args) {
        /**
         * host 地址
         * port 端口
         * connectionTimeout 链接超时,单位毫秒
         * soTimeout 读写超时,单位毫秒
         */
        Jedis jedis = new Jedis("127.0.0.1",6379,2000,100);
        jedis.hset("hash","id","1");
        jedis.hset("hash","name","zhangsan");
        Map<String,String> hash = jedis.hgetAll("hash");
        System.out.println(hash);
    }
}
// 控制台输出
{name=zhangsan, id=1}

Process finished with exit code 0
  1. 列表(list)

package com.test;
import redis.clients.jedis.Jedis;
import java.util.List;
import java.util.Map;
public class JedisTest {
    public static void main(String[] args) {
        /**
         * host 地址
         * port 端口
         * connectionTimeout 链接超时,单位毫秒
         * soTimeout 读写超时,单位毫秒
         */
        Jedis jedis = new Jedis("127.0.0.1",6379,2000,100);
        jedis.rpush("list","a","b","c");
        List<String> list = jedis.lrange("list",0,-1);
        System.out.println(list);
    }
}
// 控制台输出
[a, b, c]

Process finished with exit code 0
  1. 集合(set)

package com.test;
import redis.clients.jedis.Jedis;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class JedisTest {
    public static void main(String[] args) {
        /**
         * host 地址
         * port 端口
         * connectionTimeout 链接超时,单位毫秒
         * soTimeout 读写超时,单位毫秒
         */
        Jedis jedis = new Jedis("127.0.0.1",6379,2000,100);
        jedis.sadd("set","a","b","a");
        Set<String> set = jedis.smembers("set");
        System.out.println(set);
    }
}
// 控制台输出
[a, b]

Process finished with exit code 0
  1. 有序集合(sorted set)

package com.test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.resps.Tuple;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class JedisTest {
    public static void main(String[] args) {
        /**
         * host 地址
         * port 端口
         * connectionTimeout 链接超时,单位毫秒
         * soTimeout 读写超时,单位毫秒
         */
        Jedis jedis = new Jedis("127.0.0.1",6379,2000,100);
        jedis.zadd("zset",2,"zhangsan");
        jedis.zadd("zset",1,"lisi");
        jedis.zadd("zset",3,"wangwu");
        List<Tuple> zset = jedis.zrangeWithScores("zset",0,-1);
        System.out.println(zset);
    }
}
// 控制台输出
[[lisi,1.0], [zhangsan,2.0], [wangwu,3.0]]

Process finished with exit code 0
  1. Jedis链接池

  • 优点

  • 减少每一次执行命令都需要3次握手、4次挥手的网络时间。

  • 合理的控制链接资源。

package com.test;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.time.Duration;

public class JedisPoolTest {
    public static void main(String[] args) {
        GenericObjectPoolConfig config = new GenericObjectPoolConfig();
        /**
         * 该值可以通过命令的平均执行时间,单节点的最大qps,计算出理论值,在理论值的基础上偏大即可。
         * 例如:平均命令执行时间1ms=0.001s,最大qps50000
         * max/0.001 = 50000
         * 50个即可
         * 也与redis服务端可支持的最大连接数相关,node count * max < redis server max
         */
        config.setMaxTotal(50);
        // 建议maxIdle = maxTotal,减少创建新链接的开销
        config.setMaxIdle(50);
        // 是否开启jmx监控
        config.setJmxEnabled(true);
        // 当资源池用尽后,调用者是否要等待资源,默认为true,只有该值为true时setMaxWait才会生效
        config.setBlockWhenExhausted(true);
        // 等待的最大时间
        config.setMaxWait(Duration.ofSeconds(1));
        // 向资源池借用链接是是否做有效性检测(ping),默认是false
        config.setTestOnBorrow(false);
        // 向资源池归还链接是是否做有效性检测(ping),默认是false
        config.setTestOnReturn(false);
        JedisPool pool = new JedisPool(config,"127.0.0.1",6379);
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            jedis.set("key","value");
            String value = jedis.get("key");
            System.out.println(value);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(jedis != null){
                jedis.close();
            }
        }
    }
}
// 控制台输出
value

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值