【愚公系列】2023年06月 Java教学课程 124-Redis的客户端Jedis

举报
愚公搬代码 发表于 2023/06/30 22:38:55 2023/06/30
【摘要】 一、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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。