Jedis是什么
Jedsi是基于java语言开发,去链接Redis服务的的客户端。
下载地址
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>
字符串(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
哈希类型(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
列表(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
集合(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
有序集合(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
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