企业级Redis开发运维从入门到实践 (9)— Java客户端Jedis

Jedis是什么

Jedis就是一个基于Java的redis-cli,遵循Redis提供的协议请求Redis实现对其操作。

Maven依赖

Jedis的Maven依赖:

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.9.0</version>
	<type>jar</type>
	<scope>compile</scope>
</dependency>

基于SpringBoot框架下,Redis的Maven依赖:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Jedis直连

  • 生成一个Jedis对象,这个对象负责和指定Redis节点进行通信
Jedis jedis = new Jedis("127.0.0.1", 6379); Jedis jedis = new Jedis("127.0.0.1", 6379);
  • jedis执行set操作
jedis.set("hello", "world"); jedis.set("hello", "world");
  • jedis执行get操作,value=“world”
String value = jedis.get("hello"); String value = jedis.get("hello");

Jedis的构造函数中还有很多其他的参数,除了一下四种外还有很多其他的参数:

Jedis(String host, int port, int connectionTimeout, int soTimeout) Jedis(String host, int port, int connectionTimeout, int soTimeout)
  • host:Redis节点的所在机器的IP。
  • port:Redis节点端口。
  • connectionTimeout:客户端连接超时。
  • soTimeout:客户端读写超时。

使用Jedis操作五种数据结构

string
// string类型写入数据,输出结果:OK jedis.set("hello", "world"); // string类型读出数据,输出结果:world jedis.get("hello"); // string类型自增操作,输出结果:1 jedis.incr("counter"); // string类型写入数据,输出结果:OK jedis.set("hello", "world"); // string类型读出数据,输出结果:world jedis.get("hello"); // string类型自增操作,输出结果:1 jedis.incr("counter");
hash
// hash类型写入数据,输出结果:OK jedis.hset("myhash", "f1", "v1"); jedis.hset("myhash", "f2", "v2"); // hash类型读出数据,输出结果:{f1=v1, f2=v2} jedis,hgetAll("myhash"); // hash类型写入数据,输出结果:OK jedis.hset("myhash", "f1", "v1"); jedis.hset("myhash", "f2", "v2"); // hash类型读出数据,输出结果:{f1=v1, f2=v2} jedis,hgetAll("myhash");
list
// list类型写入数据,输出结果:OK jedis.rpush("mylist", "1"); jedis.rpush("mylist", "2"); jedis.rpush("mylist", "3"); // list类型读出数据,输出结果:[1, 2, 3] jedis.lrange("mylist", 0, -1); // list类型写入数据,输出结果:OK jedis.rpush("mylist", "1"); jedis.rpush("mylist", "2"); jedis.rpush("mylist", "3"); // list类型读出数据,输出结果:[1, 2, 3] jedis.lrange("mylist", 0, -1);
set
// set类型写入数据,输出结果:OK jedis.sadd("myset", "a"); jedis.sadd("myset", "b"); jedis.sadd("myset", "a"); // set类型读出数据,输出结果:[b, a] jedis.smembers("myset"); // set类型写入数据,输出结果:OK jedis.sadd("myset", "a"); jedis.sadd("myset", "b"); jedis.sadd("myset", "a"); // set类型读出数据,输出结果:[b, a] jedis.smembers("myset");
zset
// zset类型写入数据,输出结果:OK jedis.zadd("myzset", 99, "tom"); jedis.zadd("myzset", 66, "peter"); jedis.zadd("myzset", 33, "james"); // zset类型读出数据,输出结果:[[["james"], 33.0], [["peter"], 66.0], [["tom"], 99.0]] jedis.zrangeWithScores("myzset", 0, -1); // zset类型写入数据,输出结果:OK jedis.zadd("myzset", 99, "tom"); jedis.zadd("myzset", 66, "peter"); jedis.zadd("myzset", 33, "james"); // zset类型读出数据,输出结果:[[["james"], 33.0], [["peter"], 66.0], [["tom"], 99.0]] jedis.zrangeWithScores("myzset", 0, -1);

Jedis连接池使用

Jedis直连

在这里插入图片描述

  1. 生成Jedsi对象
  2. Jedis执行命令
  3. 返回执行结果
  4. 关闭Jedis连接
Jedis连接池

在这里插入图片描述

  1. 从资源池调用Jedis对象。
  2. Jedis执行命令。
  3. 返回执行结果。
  4. 返回Jedis对象给连接池。
方案对比

在这里插入图片描述

Jedis连接池简单使用
  1. 引入JedisPool依赖的jar包。
  2. 创建JedisPool的相关相关配置。
// 设置连接池的相关参数配置 GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); // 直接使用JedisPool,将使用配置传入 JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379); // 设置连接池的相关参数配置 GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); // 直接使用JedisPool,将使用配置传入 JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379);
  1. 调用JedisPool获取Jedis对象。
Jedis jedis = null; try { // 1.从连接池获取jedis对象 jedis = jedisPool.getResource(); // 2.执行操作 jedis.set("hello", "world"); } catch (Exception e) { e.printStackTrace(); } finally { if (jedis !=null) // 如果使用JedisPool,close操作不是关闭连接,代表归还连接池 jedis.close(); } Jedis jedis = null; try { // 1.从连接池获取jedis对象 jedis = jedisPool.getResource(); // 2.执行操作 jedis.set("hello", "world"); } catch (Exception e) { e.printStackTrace(); } finally { if (jedis !=null) // 如果使用JedisPool,close操作不是关闭连接,代表归还连接池 jedis.close(); }