Redis 基础 Jedis -- Jedis(Java程序操作Redis的工具)
Posted CodeJiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 基础 Jedis -- Jedis(Java程序操作Redis的工具)相关的知识,希望对你有一定的参考价值。
1. Jedis – Jedis(Java程序操作Redis的工具)
需要掌握的东西
1.1 Jedis简介
1.2 HelloWorld(Jedis版)
1.2.1 准备工作
导入相关依赖:
jar包导入:下载地址
基于maven:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
启动redis服务:
1.2.2 编写Java程序
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tian</groupId>
<artifactId>jedis</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
</project>
JedisTest.java
import redis.clients.jedis.Jedis;
/**
* ClassName: JedisTest
* Description: 利用Jedis操作Redis数据库
*
* @author Tianjiao
* @date 2022/1/25 15:50
*/
public class JedisTest
public static void main(String[] args)
// 1. 连接Redis 127.0.0.1是本机的地址 6379是redis默认的端口号
Jedis jedis = new Jedis("127.0.0.1", 6379);
// 2. 操作Redis
jedis.set("myStr", "HelloWorld");
System.out.println(jedis.get("myStr"));
// 3. 关闭连接
jedis.close();
运行结果:
1.2.3 说明
jedis里面的方法名和redis的指令是一致的,只要你熟悉Redis的常用指令,那么你在操作Jedis的时候一定是得心应手的。在Jedis取出来的数据都会展示称为Java程序相对应的格式来进行展示。
补充:
1.3 Jedis读写redis数据,Jedis简易工具类的开发
说明:为了方便测试,我在pom.xml文件新加了一个单元测试的依赖
<!-- 这里我新加了一个单元测试的依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
1.3.1 测试用例
测试程序:
import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.List;
import java.util.Map;
public class JedisTest
/**
* 测试List类型数据
*/
@Test
public void testList()
//1.连接redis
Jedis jedis = new Jedis("127.0.0.1", 6379);
//2.操作redis
jedis.lpush("list1", "a", "b", "c");
jedis.rpush("list1", "x");
List<String> list1 = jedis.lrange("list1", 0, -1);
for (String s : list1)
System.out.println(s);
System.out.println(jedis.llen("list1"));
System.out.println();
//3.关闭连接
jedis.close();
/**
* 测试Hash类型数据
*/
@Test
public void testHash()
//1.连接redis
Jedis jedis = new Jedis("127.0.0.1", 6379);
//2.操作redis
jedis.hset("hash1", "a1", "b1");
jedis.hset("hash1", "a2", "a2");
jedis.hset("hash1", "a3", "b3");
Map<String, String> hash1 = jedis.hgetAll("hash1");
System.out.println(hash1);
System.out.println(jedis.hlen("hash1"));
System.out.println();
//3.关闭连接
jedis.close();
运行结果:
1.3.2 具体案例
案例说明
实现思路
- 设定一个服务方法,用于模拟实际业务调用的服务,内部采用打印模拟调用。
- 在业务调用前服务调用控制单元,内部使用redis进行控制,参照之前的方案。
- 对调用超限使用异常进行控制,异常处理设定为打印提示信息。
- 主程序启动3个线程,分别表示3种不同用户的调用。
具体实现
redis.properties
这是redis的配置文件,可以减少系统的耦合度。
# redis主机地址
redis.host=127.0.0.1
# redis端口号
redis.port=6379
# 高级用户的下载上限
redis.maxTotal=30
# 初级用户的下载上限
redis.maxIdle=10
Jedis简易工具类的开发
JedisUtils.java
package util;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.ResourceBundle;
public class JedisUtils
private static final JedisPool jp;
private static final String host;
private static final int port;
private static final int maxTotal;
private static final int maxIdle;
// 静态代码块初始化资源
static
//读取配置文件 获得参数值
ResourceBundle rb = ResourceBundle.getBundle("redis");
host = rb.getString("redis.host");
port = Integer.parseInt(rb.getString("redis.port"));
maxTotal = Integer.parseInt(rb.getString("redis.maxTotal"));
maxIdle = Integer.parseInt(rb.getString("redis.maxIdle"));
JedisPoolConfig jpc = new JedisPoolConfig();
jpc.setMaxTotal(maxTotal);
jpc.setMaxIdle(maxIdle);
jp = new JedisPool(jpc, host, port);
/**
* 对外访问接口,提供jedis连接对象,连接从连接池获取
*/
public static Jedis getJedis()
return jp.getResource();
业务类
Service.java
import redis.clients.jedis.Jedis;
import redis.clients.jedis.exceptions.JedisDataException;
import util.JedisUtils;
public class Service
private final String id;
private final int num;
public Service(String id, int num)
this.id = id;
this.num = num;
//控制单元
public void service()
Jedis jedis = JedisUtils.getJedis();
String value = jedis.get("compid:" + id);
//判断该值是否存在
try
if (value == null)
//不存在,创建该值
jedis.setex("compid:" + id, 5, Long.MAX_VALUE - num + "");
else
//存在,自增,调用业务
Long val = jedis.incr("compid:" + id);
business(id, num - (Long.MAX_VALUE - val));
catch (JedisDataException e)
System.out.println("使用已经到达次数上限,请升级会员级别");
finally
jedis.close();
//业务操作
public void business(String id, Long val)
System.out.println("用户:" + id + " 业务操作执行第" + val + "次");
class MyThread extends Thread
Service sc;
public MyThread(String id, int num)
sc = new Service(id, num);
public void run()
while (true)
sc.service();
try
Thread.sleep(300L);
catch (InterruptedException e)
e.printStackTrace();
class Main
public static void main(String[] args)
MyThread mt1 = new MyThread("初级用户", 10);
MyThread mt2 = new MyThread("高级用户", 30);
mt1.start();
mt2.start();
运行结果
1.4 Redis可视化客户端(Redis Desktop Manager)
Redis可视化客户端(Redis Desktop Manager)
以上是关于Redis 基础 Jedis -- Jedis(Java程序操作Redis的工具)的主要内容,如果未能解决你的问题,请参考以下文章
redis使用问题一:Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisExce