Java 客户端操作 Redis 命令(端口号映射方法,命令演示,注意事项)

news2024/11/11 23:08:31

文章目录

  • 开放端口号问题
  • 引入依赖
  • 验证连接
  • 通用命令使用
    • set 和 get 命令的使用
    • exists 和 del 命令的使用
    • keys 命令的使用
    • expire 和 ttl 命令
    • type 命令的使用
  • String 类型命令使用
    • mset 和 mget 命令
    • getrange 和 setrange 命令
    • append 命令
    • incr 和 decr 命令
  • list 类型命令使用
    • lpush 和 lrange 命令
    • lpop 和 rpop
    • llen
  • hash 类型命令使用
    • hset 和 hget 命令
    • hexists 命令
    • hdel 命令
    • hkeys 和 hvals 命令
    • hmget 和 hmset 命令
  • set 类型命令使用
    • sadd 和 smembers
    • sismember
    • scard
    • spop
    • sinter 和 sinterstore
  • zset 类型命令使用
    • zadd 和 zrange 命令
    • zcard 和 zrem 命令
    • zscore 和 zrank命令

开放端口号问题

使用 Java 开发代码时,使用的时 IDEA,这个软件是在 Windows 系统上运行的,而我们的 Redis 是在 Linux云服务器上的,如下图:

在这里插入图片描述

此时,要想通过我们开发的Redis客户端访问 Linux 云服务器,就要通过”外网ip“进行访问,而且,光修改外网IP还是不够的,因为 Redis 所使用的 6379 端口,默认是被云服务器的防火墙给保护起来了 ,如果要想访问,就需要公开这个端口号,但是注意,这个防火墙最好不要放开,因为,Redis 的端口一旦公开到公网上,就特别容易被入侵,所以,在不开放 Redis 端口号的前提下,又想要跨主机访问,就有以下两种方式:

① 直接让 Java 程序,也在linux上运行,但是这就需要把咱们写好的代码打成可执行的 jar 包,然后把 jar 包部署到 Linux 系统上执行。

② 配置 ssh 端口转发,把云服务的 Redis 端口,映射到本地主机(推荐),这种方案,就可以保证我们既能通过外网访问,又不会产生危险。

我们在 window 系统上,连接 Linux 服务器,都是通过一些终端远程登录到 Linux 服务器上的,例如:xshell ,而在登录时或者是操作Linux服务器时,会用到协议 ssh,通过这个协议/程序,就可以使两台主机进行远程访问。

ssh 协议默认是 22 端口,ssh 协议的功能是非常强大的,其中有一个功能就是能够支持端口转发,相当于通过 ssh 的 22 端口,来传递其他端口的数据

例如,本来我们想要通过 Windows 主机访问云服务器的 6379 端口,于是就构造了一个特殊的 ssh 数据报,把要访问 redis 的请求,放到 ssh 数据报中,通过 22 端口发送给服务器,服务器的 ssh 服务器程序,就能够解析出上述的数据报,然后再把数据报中的数据,交给 6379端口的程序。这个 ssh 就相当于中介。

而在 Linux 主机上,存在的服务器有很多,ssh 程序也可能需要给多个端口传递数据,所以,为了能够区分出给不同的端口传递数据 ,就可以在本地定义一个新的端口号,用来与linux主机上某个端口号产生映射关系,如下图:

在这里插入图片描述

通过上述的方式,此时在我们的Java客户端代码上,访问 127.0.0.1:8888 ,就相当于访问 Linux 主机上的 6379 端口了,这个 8888 端口就是 ssh 程序监听的端口。

具体操作如下:

在这里插入图片描述

在这里插入图片描述

引入依赖

进入maven仓库查找jedis依赖

在这里插入图片描述

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.4.6</version>
</dependency>

验证连接

① 连接 Redis 服务器

        //1. 连接 Redis
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");

url中,tcp 表示 reids 在网络通信过程中,使用的是 tcp 协议,并且此处的 url 如果没有使用端口号映射的话,就需要将端口号写成 redis 监听的端口号 6379

② 从连接池中取出一个连接,发送一个 ping 命令,检查 redis 服务器是否在正常运作

        //2. 从 redis 池中取出一个连接
        try(Jedis resource1 = jedisPool.getResource()) {
		    String ping = jedis.ping();
            System.out.println(ping);
        }

在这里插入图片描述

Redis ping 命令用于客户端向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG 。 PING 命令不带参数返回 PONG 。 带参数则返回参数 message 。 PING 通常用来测试连接是否存活,或者测试延迟。

在这里插入图片描述

注意:这里的代码之所以能够跑通,除了配置 ssh 端口映射外,还有一个要点就是 要配置绑定的 ip 及 关闭保护模式,在 redis 的配置文件中进行设置,如下图:

  1. 找到 redis 的配置文件 redis.conf

在这里插入图片描述

  1. 编辑配置文件

    在这里插入图片描述

在新安装的 redis 中,默认绑定的 ip 是 127.0.0.1,此时只能本机访问本机,不能跨主机访问,所以需要进行修改,并且,保护模式默认是 yes,也要改成 no

通用命令使用

下面,我们演示一些 redis 命令在代码中的使用,这里的命令演示,只会演示一部分命令,其他的命令也都是一样的用法。

set 和 get 命令的使用

代码:

public class JedisDemo {
    public static void main(String[] args) {
        //1. 连接 Redis
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        //2. 从 redis 池中取出一个连接
        try(Jedis jedis = jedisPool.getResource()) {
            test1(jedis);
        }
    }

    private static void test1(Jedis jedis) {
        //在进行测试之前,先清空redis数据库,防止残留上一组测试的数据
        jedis.flushAll();
        //使用 set 和 get 命令
        System.out.println("测试 get 和 set 命令");
        jedis.set("k1", "111");
        String value = jedis.get("k1");
        System.out.println("value:" + value);
    }
}

在这里插入图片描述

set 命令除了上述的基本使用外,还可以配置一些选项,如:设置key的过期时间,设置 nx / xx ,代码如下:

    private static void test1(Jedis jedis) {
        //在进行测试之前,先清空redis数据库,防止残留上一组测试的数据
        jedis.flushAll();
        //使用 set 和 get 命令
        System.out.println("测试 get 和 set 命令");
        SetParams params = new SetParams();
        //设置过期时间
        params.ex(10);

        jedis.set("k1", "111");
        String value = jedis.get("k1");
        System.out.println("value:" + value);
    }

在调用 set 方法时,可以看到多个重载方法,其中就有包含 SetParams 类型的参数,通过该类型对象来进行 选项的设置

在这里插入图片描述
在这里插入图片描述

exists 和 del 命令的使用

代码:

    private static void test2(Jedis jedis) {
        System.out.println("演示 exists 和 del 命令");
        jedis.set("key1", "111");
        //检查 key1 是否存在
        boolean result = jedis.exists("key1");
        System.out.println("result:" + result);

        //删除 key1
        long result2 = jedis.del("key1");
        System.out.println("result2:" + result2);
        
        //再次检查 key1 是否存在
        System.out.println(jedis.exists("key1"));

    }

在这里插入图片描述

del 命令不仅可以删除一个 key ,也可以删除多个 key

    private static void test2(Jedis jedis) {
        System.out.println("演示 exists 和 del 命令");
        jedis.set("key1", "111");
        jedis.set("key2","222");
        jedis.set("key3","333");
        
        //删除 key1 key2 key3
        long result2 = jedis.del("key1", "key2", "key3");
        System.out.println("result2:" + result2);
    }

在这里插入图片描述

keys 命令的使用

代码:

    private static void test3(Jedis jedis) {
        System.out.println("演示 keys 命令");
        jedis.set("key1", "111");
        jedis.set("key2", "222");
        jedis.set("key3", "333");
        jedis.set("kay", "555");
        jedis.set("kby", "666");
        //keys 里面的参数就是通配符,按照keys命令的规则获取指定样式的key
        Set<String> set = jedis.keys("*");
        System.out.println(set.toString());
        set = jedis.keys("k[ab]y");
        System.out.println(set.toString());
    }

在这里插入图片描述

expire 和 ttl 命令

代码:

    private static  void test4(Jedis jedis) throws InterruptedException {
        System.out.println("演示 expire 和 ttl 命令");
        jedis.flushAll();
        jedis.set("key1", "111");
        jedis.expire("key1", 10);
        Thread.sleep(3000);
        long time = jedis.ttl("key1");
        System.out.println("time:" + time);
    }

在这里插入图片描述

type 命令的使用

代码:

    private static void test5(Jedis jedis) {
        System.out.println("演示 type 命令");
        jedis.flushAll();
        jedis.set("key1", "111");
        String type = jedis.type("key1");
        System.out.println("type: " + type);

        //设置list类型
        jedis.lpush("key2", "111", "222");
        type = jedis.type("key2");
        System.out.println("type: " + type);

        //设置hash类型
        jedis.hset("key3", "k1", "1");
        type = jedis.type("key3");
        System.out.println("type: " + type);
    }

在这里插入图片描述

String 类型命令使用

mset 和 mget 命令

代码:

    private static void test6(Jedis jedis) {
        System.out.println("mset 和 mget 命令的使用");
        jedis.mset("key1","111", "key2", "222", "key3","333");
        List<String> values = jedis.mget("key1", "key2", "key3");
        System.out.println("values: " + values.toString());
    }

在这里插入图片描述

注意:此处的获取多个key中的value的顺序和设置key时的顺序都是匹配的,如果某个key不存在,则使用 null 表示。

getrange 和 setrange 命令

代码:

    private static void test7(Jedis jedis) {
        System.out.println("getrange 和 setrange");
        jedis.set("key1", "abcdefgh");
        String result = jedis.getrange("key1", 0, 3);
        System.out.println("result: " + result);
        jedis.setrange("key1", 0, "qqq");
        result = jedis.getrange("key1", 0, -1);
        System.out.println("result: " + result);
    }

在这里插入图片描述

append 命令

代码:

    private static void test8(Jedis jedis) {
        System.out.println("append 命令");
        jedis.flushAll();
        jedis.set("key1", "abc");
        String result = jedis.get("key1");
        System.out.println("result: " + result);

        jedis.append("key1", "111");
        result = jedis.get("key1");
        System.out.println("result: " + result);
    }

在这里插入图片描述

incr 和 decr 命令

代码:

    private static void test9(Jedis jedis) {
        System.out.println("incr 和 decr 命令");
        jedis.flushAll();
        jedis.set("key1", "100");
        
        jedis.incr("key1");
        String value = jedis.get("key1");
        System.out.println("value: " + value);

        jedis.decr("key1");
        value = jedis.get("key1");
        System.out.println("value: " + value);
    }

在这里插入图片描述

list 类型命令使用

lpush 和 lrange 命令

代码:

    private static void test10(Jedis jedis) {
        System.out.println("lpush 和 rpush");
        jedis.flushAll();
        jedis.lpush("key1", "111", "222", "333");
        List<String> reslut = jedis.lrange("key1", 0, -1);
        System.out.println("result: " + reslut);

        jedis.rpush("key2", "111", "222", "333");
        reslut = jedis.lrange("key2", 0, -1);
        System.out.println("result: " + reslut);
    }

在这里插入图片描述

lpop 和 rpop

代码:

    private static void test11(Jedis jedis) {
        System.out.println("lpop 和 rpop");
        jedis.flushAll();

        jedis.lpush("key1", "111", "222", "333");
        jedis.lpop("key1");
        List<String> result = jedis.lrange("key1", 0, -1);
        System.out.println("result: " + result);

        jedis.rpop("key1");
        result = jedis.lrange("key1", 0, -1);
        System.out.println("result: " + result);
    }

在这里插入图片描述

llen

代码:

    private static void test12(Jedis jedis) {
        System.out.println("llen 命令");
        jedis.flushAll();

        jedis.lpush("key1", "111", "222", "333");
        long key1 = jedis.llen("key1");
        System.out.println("key1: " + key1);a
    }

在这里插入图片描述

hash 类型命令使用

hset 和 hget 命令

代码:

    private static void test18(Jedis jedis) {
        System.out.println("hset 和 hget");
        jedis.flushAll();

        //插入元素
        jedis.hset("key", "f1", "111");
        jedis.hset("key", "f2", "222");
        jedis.hset("key", "f3", "333");
        //获取元素
        String f1 = jedis.hget("key", "f1");
        String f2 = jedis.hget("key", "f2");
        System.out.println("f1: " + f1);
        System.out.println("f2: " + f2);
    }

在这里插入图片描述

hexists 命令

代码:

    private static void test19(Jedis jedis) {
        System.out.println("hexists 命令");
        jedis.flushAll();

        //插入元素
        jedis.hset("key", "f1", "111");
        jedis.hset("key", "f2", "222");
        jedis.hset("key", "f3", "333");
        //检查 f1 字段是否存在
        boolean f1 = jedis.hexists("key", "f1");
        System.out.println("f1: " + f1);

    }

在这里插入图片描述

hdel 命令

代码:

    private static void test20(Jedis jedis) {
        System.out.println("hdel 命令");
        jedis.flushAll();

        //插入元素
        jedis.hset("key", "f1", "111");
        jedis.hset("key", "f2", "222");
        jedis.hset("key", "f3", "333");
        //删除字段
        long result = jedis.hdel("key", "f1", "f2");
        System.out.println("成功删除: " + result);
        System.out.println("是否存在: " + jedis.hexists("key", "f1"));
    }

在这里插入图片描述

hkeys 和 hvals 命令

代码:

    private static void test21(Jedis jedis) {
        System.out.println("hkeys 和 hvals 命令");
        jedis.flushAll();

        //插入元素
        jedis.hset("key", "f1", "111");
        jedis.hset("key", "f2", "222");
        jedis.hset("key", "f3", "333");
        //获取所有的字段
        Set<String> fields = jedis.hkeys("key");
        System.out.println("fields: " + fields);
        //获取所有字段对应的value
        List<String> values = jedis.hvals("key");
        System.out.println("values: " + values);

    }

在这里插入图片描述

hmget 和 hmset 命令

    private static void test22(Jedis jedis) {
        System.out.println("hmset 和 hmget 命令");
        jedis.flushAll();

        Map<String, String> map = new HashMap<>();
        map.put("f1", "111");
        map.put("f2", "222");
        map.put("f3", "333");

        jedis.hmset("key", map);
        //获取指定字段对应的value
        List<String> result = jedis.hmget("key", "f1", "f2", "f3");
        System.out.println("result: " + result);
    }

在这里插入图片描述

set 类型命令使用

sadd 和 smembers

代码:

    private static void test13(Jedis jedis) {
        System.out.println("sadd 和 smemgbers 命令");
        jedis.flushAll();
		//插入元素
        jedis.sadd("key1", "111", "222", "333");
        //获取set中所有元素
        Set<String> result = jedis.smembers("key1");
        System.out.println("result: " + result);

    }

在这里插入图片描述

sismember

代码:

    private static void test16(Jedis jedis) {
        System.out.println("sismembers 命令");
        jedis.flushAll();

        jedis.sadd("key1", "111", "222", "333", "444", "555");
        //检查 333 在列表中是否存在
        boolean result = jedis.sismember("key1", "333");
        System.out.println("reslut: " + result);

    }

scard

代码:

    private static void test14(Jedis jedis) {
        System.out.println("scard 命令");
        jedis.flushAll();

        jedis.sadd("key1", "111", "222");
        //获取列表中的长度
        long result = jedis.scard("key1");
        System.out.println("result: " + result);
    }

在这里插入图片描述

spop

代码:

    private static void test15(Jedis jedis) {
        System.out.println("spop 命令");
        jedis.flushAll();
        jedis.sadd("key1", "111", "222", "333", "444", "555");
        //随机删除
        String result1 = jedis.spop("key1");
        System.out.println("result1: " + result1) ;
        String result2 = jedis.spop("key1");
        System.out.println("result2: " + result2);
        String result3 = jedis.spop("key1");
        System.out.println("result3: " + result3);
    }

在这里插入图片描述

sinter 和 sinterstore

代码:

    private static void test17(Jedis jedis) {
        System.out.println("sinter 和 sinterstore 命令");
        jedis.flushAll();

        jedis.sadd("key1", "111", "222", "333");
        jedis.sadd("key2", "111", "222", "444");
        //求交集
        Set<String> result = jedis.sinter("key1", "key2");
        System.out.println("result: " + result);

        //求完交集后,存放到key3中
        jedis.sinterstore("key3", "key1", "key2");
        Set<String> resultOfkey3 = jedis.smembers("key3");
        System.out.println("reslultOfKey3: " + resultOfkey3);

    }

在这里插入图片描述

zset 类型命令使用

zadd 和 zrange 命令

代码:

private static void test23(Jedis jedis) {
        System.out.println("zadd 和 zrange 命令");
        jedis.flushAll();

        //添加元素
        jedis.zadd("key", 10, "张三");
        //添加多个元素
        //添加多个元素时,要先把多个元素放到Map中,并且,在Map中存放分数时,类型必须是double类型
        Map<String, Double> map = new HashMap<>();
        map.put("李四", 20.0);
        map.put("王五", 30.0);
        jedis.zadd("key", map);

        //获取有序列表中的元素
        List<String> result = jedis.zrange("key", 0, -1);
        System.out.println("result: " + result);

        //获取有序列表中的元素+分数
        List<Tuple> result2 = jedis.zrangeWithScores("key", 0, -1);
        System.out.println("result2: " + result2);

        //获取某一个指定的成员和分数
        String member = result2.get(0).getElement();
        double score = result2.get(0).getScore();
        System.out.println("member: " + member + ",score: " + score);
    }

在这里插入图片描述

zcard 和 zrem 命令

代码:

    private static void test24(Jedis jedis) {
        System.out.println("zadd 和 zrange 命令");
        jedis.flushAll();

        //添加多个元素
        //添加多个元素时,要先把多个元素放到Map中,并且,在Map中存放分数时,类型必须是double类型
        Map<String, Double> map = new HashMap<>();
        map.put("张三", 10.0);
        map.put("李四", 20.0);
        map.put("王五", 30.0);
        jedis.zadd("key", map);

        //获取元素个数
        long members = jedis.zcard("key");
        System.out.println("members: " + members);

        //删除元素
        long n = jedis.zrem("key", "张三", "李四");
        System.out.println("n: " + n);
        List<String> result = jedis.zrange("key", 0, -1);
        System.out.println("result: " + result);
    }

在这里插入图片描述

zscore 和 zrank命令

 private static void test25(Jedis jedis) {
        System.out.println("ascore 和 zrank 命令");
        jedis.flushAll();

        //添加多个元素
        //添加多个元素时,要先把多个元素放到Map中,并且,在Map中存放分数时,类型必须是double类型
        Map<String, Double> map = new HashMap<>();
        map.put("张三", 10.0);
        map.put("李四", 20.0);
        map.put("王五", 30.0);
        jedis.zadd("key", map);

        //根据member获取分数
        Double zscore = jedis.zscore("key", "张三");
        System.out.println("zscore: " + zscore);

        //获取当前指定member的排名
        Long zrank = jedis.zrank("key", "张三");
        System.out.println("zrank: " + zrank);
    }

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1927238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI会不会让更多人失业?

最近网上热议的内容&#xff1a;武汉市萝卜快跑无人驾驶的网约车与出租车抢生意&#xff0c;惹来了很多人的非议。 有的人说AI科技应该是帮助人们去做一些高危险的事情&#xff0c;或者是一些比较脏&#xff0c;累的工作&#xff0c;比如救灾&#xff0c;排爆&#xff0c;航天探…

docker emqx 配置密码和禁用匿名连接

mqtt版本emqx/emqx:4.4.3 1.首先把镜像内目录/opt/emqx/etc拷贝到本地 2.做映射 3.allow_anonymous&#xff0c; false改成true 4. 5.MQTTX连不上的话看看下图的有没有打开

电商数据分析在品牌控价中的关键作用

品牌在进行控价操作时&#xff0c;会运用电商价格监测系统来监测线上数据&#xff0c;这些数据可能涵盖本品牌以及竞品的数据&#xff0c;其数据量无疑是巨大的。倘若只是单纯地进行品牌数据监测&#xff0c;并输出所监测到的低价数据&#xff0c;对于数据的价值挖掘而言&#…

【线程安全】关于死锁问题

文章目录 死锁的基本概念死锁的四个必要条件避免死锁避免死锁的算法死锁检测算法 死锁的基本概念 死锁是指在一组进程中的各个进程均占有不会释放的资源&#xff0c;但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。当然&#xff0c;线程之间同样也有死…

Chrome浏览器的Profile数据内容简介

前文简介了Chrome存储的账密/Cookie数据&#xff1a;一段代码读取Chrome存储的所有账号密码和Cookie 本文再扩展介绍一下Chrome存储的其它一些隐私数据。 注&#xff1a;因为业务需要&#xff0c;简单调研了一些基本内容和存储路径&#xff0c;没有深入去研究&#xff0c;有啥…

C 语言指针进阶

1.0 指针的定义 指针是内存中一个最小单元的编号&#xff08;内存单元的编号称之为地址【地址就是指针指针就是地址】&#xff09;指针通常是用来存放内存地址的一个变量。本质上指针就是地址&#xff1a;口语上说的指针起始是指针变量&#xff0c;指针变量就是一个变量&#…

本地部署,Flash Diffusion: 加速条件扩散模型实现快速图像生成

目录 引言 技术背景 Flash Diffusion 的架构与原理 Flash Diffusion 的主要特点 本地部署 运行结果 实验结果与分析 应用实例 结论 GitHub - gojasper/flash-diffusion: Official implementation of ⚡ Flash Diffusion ⚡: Accelerating Any Conditional Diffusion M…

uniapp:国家、省市区,4级联动

使用uview的Select 列选择器 选择器完成国家&#xff0c;省市区&#xff0c;4级联动 要求后台数据格式&#xff1a; list: [{label: 中国,value: 1,children: [{label: 河南省,value: 2,children: [{label: 郑州市,value: 3,children: [{label: 中原区,value: 4},{label: 郑东…

系统架构师考点--系统安全

大家好。今天我来总结一下系统安全相关的考点&#xff0c;这类考点每年都会考到&#xff0c;一般是在上午场客观题&#xff0c;占2-4分。 一、信息安全基础知识 信息安全包括5个基本要素&#xff1a;机密性、完整性、可用性、可控性与可审查性 (1)机密性&#xff1a;确保信息…

嵌入式智能手表项目实现分享

简介 这是一个基于STM32F411CUE6和FreeRTOS和LVGL的低成本的超多功能的STM32智能手表~ 推荐 如果觉得这个手表的硬件难做,又想学习相关的东西,可以试下这个新出的开发板,功能和例程demo更多!FriPi炸鸡派STM32F411开发板: 【STM32开发板】 FryPi炸鸡派 - 嘉立创EDA开源硬件平…

IMS架构中的注册与会话流程:RTPEngine集成及消息路由详解

目录 S-CSCF 调用 RTPengine 整体路由 注意 IMS 注册流程 和 IMS 会话流程 的区别 IMS注册流程 IMS会话流程(如INVITE请求) 这种设计的原因 P-CSCF 调用 RTPengine S-CSCF 调用 RTPengine 整体路由 UA a生成SDP offer&#xff0c;发送SIP INVITE请求(包含SDP offer)&…

MySql 数据库 - 下载安装

MySQL数据库 简单介绍 数据库 数据存储的仓库数据库管理系统 操作和管理数据库的大型软件SQL 操作关系型数据库的变成语言&#xff0c;是一套标准 版本 MySQL官方提供了两种不同的版本&#xff1a; 社区版 免费&#xff0c;MySQL不提供任何的技术支持商业版 收费&#xff0c…

数据结构(单链表(1))

前言 线性表中有着许多的结构&#xff0c;如顺序表和链表。而单链表则是链表的最基础的一种形式&#xff0c;下面就让我们对其做一个了解。 概念 概念&#xff1a;链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次…

【python】Pandas中`ValueError: cannot reindex from a duplicate axis`错误分析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

构建GitLab代码私有仓库

构建代码私有仓库 公司代码仓库一般都放在git上&#xff0c;但为了安全一般都不会放在开放的git上&#xff0c;都会搭建自己的仓库&#xff0c;今天就记录一下git搭建的过程。以下安装过程以centos7为例&#xff1a; 步骤一&#xff1a;安装并配置依赖项&#xff0c;同时打开ht…

解决gitlab报502的问题

external_url http://10.7.24.6:10002 puma[port] 8091 sudo gitlab-ctl reconfigure sudo gitlab-ctl restart 设置管理员密码&#xff1a; 1. 切换目录&#xff1a;cd 安装目录gitlab的bin目录下 2. 以root执行 &#xff1a;gitlab-rails console命令&#xff0c;等待…

HTTP背后的故事:理解现代网络如何工作的关键(一)

一.HTTP是什么 概念 &#xff1a; 1.HTTP ( 全称为 " 超文本传输协议 ") 是一种应用非常广泛的 应用层协议。 2.HTTP 诞生与1991年. 目前已经发展为最主流使用的一种应用层协议. 3.HTTP 往往是基于传输层的 TCP 协议实现的 . (HTTP1.0, HTTP1.1, HTTP2.0 均为 T…

Linux离线安装Mysql5.7

Linux之Mysql安装配置 第一种&#xff1a;Linux离线安装Mysql&#xff08;提前手动下载好tar.gz包&#xff09; 第二种&#xff1a;通过yum安装配置Mysql&#xff08;服务器有网络&#xff09; 之前在阿里云上采用yum安装过一次&#xff08;请看这里&#xff09;&#xff0c;…

文心一言 VS 讯飞星火 VS chatgpt (303)-- 算法导论22.2 1题

一、请计算出在有向图22-2(a)上运行广度优先搜索算法后的d值和π值。这里假定结点3为算法所用的源结点。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 在Go语言中实现广度优先搜索&#xff08;BFS&#xff09;以计算有向图上的距离&#xff08;d值&#xff09…

【Java--数据结构】队列与栈的相互成就

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 用队列实现栈 用栈实现队列 用队列实现栈 oj链接 一个队列是无法实现栈的 入栈push&#xff1a;把数据放到不为空的队列当中。 注意&#xff1a;第一次入栈时&…