2022/08/08 day05:Jedis

发布于:2023-01-06 ⋅ 阅读:(468) ⋅ 点赞:(0)

目录

  • Jedis简介
  • HelloWorld(Jedis)版
  • Jedis读写Redis数据
  • Jedis简易工具类开发
  • 可视化客户端

Jedis简介

编程语言与Redis

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uuiHV9Va-1661244000174)(en-resource://database/5008:1)]
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vasMVoFz-1661244000175)(en-resource://database/5012:1)]

HelloWorld(Jedis)版

准备工作
前提条件:必须有对应的工具,因此得先去下jar包或者以主流Maven的形式

  • jar包导入:
    • 下载地址:https://mvnrepository.com/artifact/redis.clients/jedis
  • 基于maven
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uarQnjF2-1661244000176)(en-resource://database/5014:1)]

客户端连接Redis

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mq6RNsUk-1661244000176)(en-resource://database/5016:1)]

maven的形式:
第一:创建maven文件
第二,配置pom文件:

<?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>


  <properties>
    <!--  maven在构建项目,使用UTF-8编码,避免中文乱码  -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- 编译java代码使用的jdk版本,默认是1.7,视频中用1.8 ,我应该用9   -->
    <maven.compiler.source>9</maven.compiler.source>
    <!--  你的java项目应该运行在什么样的jdk版本 与上面保持一致 -->
    <maven.compiler.target>9</maven.compiler.target>
  </properties>




  <groupId>com.itheima</groupId>
  <artifactId>jedis</artifactId>
  <version>1.0-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
  </dependencies>

</project>
import org.junit.Test;
import redis.clients.jedis.Jedis;

/**
 * java操作Redis
 */
public class JedisTest {

    /**
     * 启动Redis服务器再运行
     */
    @Test
    public void testJedis(){
        //1. 连接Redis
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //2. 操作Redis
//        jedis.set("name","itheima");
        String name = jedis.get("name");
        System.out.println(name);
        //3. 关闭连接
        jedis.close();
    }


}

Jedis读写Redis数据

其他演示

import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.List;
import java.util.Map;

public class JedisTest {
    @Test
    public void testJedis(){
        //1 连接Redis
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //2 操作Redis
//        jedis.set("name","itheima");
        String name = jedis.get("name");
        System.out.println(name);
        //3 关闭连接
        jedis.close();
    }


    @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"));
        //3 关闭连接
        jedis.close();
    }

    @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);
        //查看hash1中有多少数据
        System.out.println(jedis.hlen("hash1"));
        //3 关闭连接
        jedis.close();
    }
}

案例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ijziDC2-1661244000177)(en-resource://database/5121:1)]
我们做实验不能做分钟级的,应该做秒级的。

案例:需求分析

  1. 设定一个服务方法,用于模拟实际业务调用的服务,内部采用打印模拟调用
  2. 在业务调用前服务调用控制单元,内部使用Redis进行控制,参照之前的方案
  3. 对调用超限使用异常进行控制,异常处理设定为打印提示信息
  4. 主程序启动3个线程,分别表示3种不同用户的调用

实现步骤

  1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NDDkYojZ-1661244000177)(en-resource://database/5123:1)]
  2. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4g9L4vC8-1661244000178)(en-resource://database/5125:1)]
  3. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-icmcex7G-1661244000178)(en-resource://database/5127:1)]
  4. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VbALT9uF-1661244000178)(en-resource://database/5131:1)]
package com.itmeima;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.exceptions.JedisDataException;

public class Service {
    private String id;
    private int num;
    public Service(String id,int num){
        this.id = id;
        this.num = num;
    }
    //控制单元
    public void service(){
        //连接Redis
        Jedis jedis = new Jedis("127.0.0.1",6379);
        //操作Redis
        //1. 获取值
        String value = jedis.get("compid:" + id);
        //2. 判断该值是否存在
        try{
        if(value == null){
            //不存在,创建该值  20s
            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("使用已经到达次数上限,请升级会员级别");
            return;
        }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();
            }
        }
    }

    public static void main(String[] args) {
        MyThread mt1 = new MyThread("初级用户",10);
        mt1.start();

        MyThread mt2 = new MyThread("高级用户",30);
        mt2.start();
    }
}

Jedis简易工具类开发

基于连接池获取连接
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EMMzd2io-1661244000179)(en-resource://database/5133:1)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VYAtxtU8-1661244000179)(en-resource://database/5135:1)]

工具类的制作

配置文件redis.properties:

redis.host=127.0.0.1
redis.port=6379
redis.maxTotal=30
redis.maxIdle=10

工具类

package com.itmeima.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 JedisPool jp = null;
    private static String host = null;
    private static int port;
    private static int maxTotal;
    private static 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);
    }
    public static Jedis getJedis(){
        return jp.getResource();
    }

    public static void main(String[] args) {
        JedisUtils.getJedis();
    }
}

可视化客户端

redis-desktop-manager2019.1.0
在这里插入图片描述

                                                                                 ——此文档为学习笔记!
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到