• 2022/08/08 day05:Jedis


    目录

    • 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    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();
        }
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    案例
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71

    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
    
    • 1
    • 2
    • 3
    • 4

    工具类

    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();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    可视化客户端

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

                                                                                     ——此文档为学习笔记!
    
    • 1
  • 相关阅读:
    OSPF笔记(一):OSPF基本特点、自治系统、区域、RID冲突
    java中Collections.addAll方法具有什么功能呢?
    【STM32+cubemx】0029 HAL库开发:HMC5883L磁力计的应用(电子指南针)
    vs如何读取mysql中的数据(顺便通过代码解决了中文乱码问题)
    神经体液调节网络,神经网络能干嘛
    双动子大理石高速直线模组在检测设备中的应用
    某学生宿舍楼设计
    VUE全家桶 (Vue-cli、Vue-route、Vuex)学习笔记
    分享几个bug发现手段-final chk、default test、stress test、fault injection
    【无标题】CTreeCtrl更改-/+展开按钮颜色
  • 原文地址:https://blog.csdn.net/w2079930908/article/details/126488099