【愚公系列】2023年06月 Java教学课程 124-Redis的客户端Jedis
【摘要】 一、JedisJedis是一个Java语言编写的Redis客户端,它允许Java应用程序通过Redis数据库执行各种操作。Jedis提供了简单、直观的API,可以使用Java代码轻松地与Redis数据存储进行交互。Jedis支持多个数据类型和命令,包括字符串、哈希表、列表、集合、有序集合等。Jedis还提供了一些高级功能,例如连接池、数据分片和事务处理等。Jedis源码网址:https://...
一、Jedis
Jedis是一个Java语言编写的Redis客户端,它允许Java应用程序通过Redis数据库执行各种操作。Jedis提供了简单、直观的API,可以使用Java代码轻松地与Redis数据存储进行交互。Jedis支持多个数据类型和命令,包括字符串、哈希表、列表、集合、有序集合等。Jedis还提供了一些高级功能,例如连接池、数据分片和事务处理等。
Jedis源码网址:https://github.com/redis/jedis
1.Jedis简介
1.1 编程语言与redis
Jedis就是提供了Java与redis的连接服务的,里边有各种各样的API接口,你可以去调用它。
1.2 准备工作
1、jar包导入
下载地址:https://mvnrepository.com/artifact/redis.clients/jedis
基于maven
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
2、客户端连接redis
连接redis
Jedis jedis = new Jedis("localhost", 6379);
操作redis
jedis.set("name", "itheima"); jedis.get("name");
关闭redis连接
jedis.close();
API文档:https://www.javadoc.io/doc/redis.clients/jedis/latest/redis/clients/jedis/Jedis.html
1.3 代码实现
创建:com.itheima.JedisTest
public class JedisTest {
public static void main(String[] args) {
//1.获取连接对象
Jedis jedis = new Jedis("localhost", 6379);
//2.执行操作
jedis.set("age","39");
String hello = jedis.get("hello");
System.out.println(hello);
jedis.lpush("list1","a","b","c","d");
List<String> list1 = jedis.lrange("list1", 0, -1);
for (String s:list1 ) {
System.out.println(s);
}
jedis.sadd("set1","abc","abc","def","poi","cba");
Long len = jedis.scard("set1");
System.out.println(len);
//3.关闭连接
jedis.close();
}
}
2.Jedis工具类
前面我们做的程序还是有点儿小问题,就是我们的Jedis对象的管理是我们自己创建的,真实企业开发中是不可能让你去new一个的,那接下来咱们就要做一个工具类,简单来说,就是做一个创建Jedis的这样的一个工具。
2.1 jedisPool.properties
#最大活动对象数
redis.pool.maxTotal=1000
#最大能够保持idel状态的对象数
redis.pool.maxIdle=100
#最小能够保持idel状态的对象数
redis.pool.minIdle=50
#当池内没有返回对象时,最大等待时间
redis.pool.maxWaitMillis=10000
#当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
#“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1
redis.pool.timeBetweenEvictionRunsMillis=30000
#向调用者输出“链接”对象时,是否检测它的空闲超时
redis.pool.testWhileIdle=true
# 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3
redis.pool.numTestsPerEvictionRun=50
#redis服务器的IP
redis.ip=localhost
#redis服务器的Port
redis.port=6379
#连接Redis超时时间秒
redis.timeout=2000
#连接Redis的password,不写则没有密码
redis.password=
jedisPool.properties
2.2 JedisPoolUtils
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.IOException;
import java.io.InputStream;
import java.time.Duration;
import java.util.Properties;
/**
* @Author AnHui_XiaoYang
* @Email 939209948@qq.com
* @Date 2021/10/17 20:44
* @Description Jedis连接池工具
*/
public class JedisPoolUtils {
private static JedisPool jedisPool;
static {
//类加载时,读取配置文件
InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedisPool.properties");
//创建Properties对象并关联对象
Properties pro = new Properties();
try {
pro.load(in);
} catch (IOException e) {
e.printStackTrace();
}
//创建连接池配置并设置值
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("redis.pool.maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("redis.pool.maxIdle")));
config.setMinIdle(Integer.parseInt(pro.getProperty("redis.pool.minIdle")));
config.setMaxWaitMillis(Long.parseLong(pro.getProperty("redis.pool.maxWaitMillis")));
config.setTestOnBorrow(Boolean.parseBoolean(pro.getProperty("redis.pool.testOnBorrow")));
config.setTestOnReturn(Boolean.parseBoolean(pro.getProperty("redis.pool.testOnReturn")));
Duration duration = Duration.ofMinutes(Long.parseLong(pro.getProperty("redis.pool.timeBetweenEvictionRunsMillis")));
config.setTimeBetweenEvictionRuns(duration);
config.setTestWhileIdle(Boolean.parseBoolean(pro.getProperty("redis.pool.testWhileIdle")));
config.setNumTestsPerEvictionRun(Integer.parseInt(pro.getProperty("redis.pool.numTestsPerEvictionRun")));
String host = pro.getProperty("redis.ip");
Integer port = Integer.valueOf(pro.getProperty("redis.port"));
Integer timeout = Integer.valueOf(pro.getProperty("redis.timeout"));
String password = pro.getProperty("redis.password");
if (password == null || "".equals(password))
jedisPool = new JedisPool(config, host, port, timeout);
else
jedisPool = new JedisPool(config, host, port, timeout, password);
}
/**
* @return 返回一个JedisClient
*/
public static Jedis getJedisClient() {
return jedisPool.getResource();
}
}
2.3 使用
public static void main(String[] args) {
//平时使用连接池对象即可,每次都重新创建获取会消耗大量时间
Jedis jedis = JedisPoolUtils.getJedisClient();
jedis.set("name","zhangsan");
String s = jedis.get("name");
System.out.println(s);
jedis.close();//不用时直接close即可
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)