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程序相对应的格式来进行展示。

补充:

Jedis API文档


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 具体案例

案例说明

实现思路

  1. 设定一个服务方法,用于模拟实际业务调用的服务,内部采用打印模拟调用。
  2. 在业务调用前服务调用控制单元,内部使用redis进行控制,参照之前的方案。
  3. 对调用超限使用异常进行控制,异常处理设定为打印提示信息。
  4. 主程序启动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的工具)的主要内容,如果未能解决你的问题,请参考以下文章

Jedis(Java+Redis) Pool的使用

06005_Jedis入门

Jedis连接Redis三种模式

redis笔记--------Jedis使用

redis使用问题一:Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisExce

在Java中使用Redis