三分钟学会一个新技能——使用Java操作Redis

news2025/5/26 12:59:41

目录

1、前置准备操作

1.1、为什么要进行前置准备操作 

1.2、本地如何访问到云服务上Redis的6379端口号

1.3、配置步骤:

2、配置后本地主机如何操作 

3、常用命令举例

3.1、通用命令举例

3.2、string相关命令举例

3.3、hash相关命令举例

3.4、list相关命令举例

3.5、set相关命令举例

3.6、zset相关命令举例


1、前置准备操作

1.1、为什么要进行前置准备操作 

        我们之前学习Redis命令时,直接在Linux服务器中所提供的redis客户端上使用的,也就是说Redis服务器和客户端在同一台主机上。而现在我们使用Java去操作Redis,一般Java开发都是在Windows上,也就是在自己的电脑上的,就会导致一个问题,客户端和服务器不在同一台主机上。        

        对于这种问题:

  • 第一,我们连接Redis服务器时要修改为外网IP
  • 第二,Redis的默认端口是6379,这个端口是默认会被云服务器的防火墙保护起来,不能从外部进行访问。这里又会导致一个问题,我们自己也访问不了了~

这种情况下,切记可不敢去云服务器上把这个端口开放哈!!!

因为太容易被攻击了~

这个情况,我们有两个解决办法~

1.2、本地如何访问到云服务上Redis的6379端口号

方案一:

        就使用6379端口,但不能在本地运行,将Java程序编写成功后,打成jar部署到云服务器上来运行。这种方法,就会有些复杂,需要我们频繁地打包-部署,太麻烦了~

方案二:【推荐】

        使用SSH来解决——配置SSH端口转发,把云服务器的Redis端口,映射到本地主机~

        例如,我们配置的本地主机端口号:6666 

        当本地主机访问6666端口时【SSH程序是一直在监听6666这个端口,SSH默认端口号是22】,会通过ssh的22端口来将6666的端口数据发送到云服务上,配置时也会让你选组云服务器的端口号,正常情况下,你就选择redis的默认端口6379即可。ssh就会将本地主机端口号6666数据转发到云服务器上的端口号6379的程序~

1.3、配置步骤:

我这里是使用xshell举例:

在此之前,进入Redis自带的客户端,在配置中,修改Redis的绑定的ip和关闭保护模式,具体操作可看我以前的博客:http://t.csdn.cn/OdKZJ

(1):连接回话后,点击属性选项

(2):

(3):

(4):检查是否连接:

看到这句话即可~


2、配置后本地主机如何操作 

第一步:新建一个Maven项目

第二步:去中央仓库搜索jedis,选择【例如我选择的是jedis4.4.2,选稳定的版本~】:

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

把这段代码放入到pom.xml中~

第三步:新建一个Java文件:

贴上代码:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-09-14
 * Time:14:28
 */
public class redisPing {
    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:6666");
        try(Jedis jedis = jedisPool.getResource()) {
            testPint(jedis);
        }
    }

    private static void testPint(Jedis jedis) {
        String result = jedis.ping();
        System.out.println("result:" + result);
    }
}

 代码解释:

  • jedispool就类似于与线程池,它属于redis的一个连接池,后面的参数,我们能看到是tcp,也就是我们建立的是tcp连接,后面的6666就是我们刚才指定的端口~
  • try后面的括号中,则是从redis连接池中取出一个连接来使用
  • 连接使用完成后需要释放这个连接,但这里的释放并不是说要断开tcp,而是将其放回到池子中~
  • try花括号中便可以开始操作Redis了~
  • 下面这个方法,则是redis中的命令ping,输入ping,返回pong
  • 执行程序,查看结果:

        补充说明:为什么是使用jedis,使用其他工具当然也可以,但jedis中提供的命令几乎和redis的原生命令一样,降低了学习成本~ 


3、常用命令举例

        没有Redis基础的小伙伴可以看看我之前的博客,稍微了解一下Redis中常用的数据类型的常用的命令~ 更有助于后的学习~ 

3.1、通用命令举例

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.Set;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-09-14
 * Time:14:18
 */
public class redisCommonDemo {
    public static void main(String[] args) throws InterruptedException {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:6666");
        try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("set/get举例:");
            commonDemo1(jedis);
            System.out.println("exists举例:");
            commonDemo2(jedis);
            System.out.println("del举例:");
            commondemo3(jedis);
            System.out.println("keys举例:");
            commondemo4(jedis);
            System.out.println("expire/ttl举例:");
            commondemo5(jedis);
            System.out.println("type举例:");
            commondemo6(jedis);
        }
    }

    private static void commondemo6(Jedis jedis) {
        jedis.flushAll();
        jedis.set("key1","1");
        String res = jedis.type("key1");
        System.out.println("key1的类型:" + res);
        res = jedis.objectEncoding("key1");
        System.out.println("key1的内部编码:" + res);
    }

    private static void commondemo5(Jedis jedis) throws InterruptedException {
        jedis.flushAll();
        jedis.set("key1","1");
        jedis.expire("key1",100);
        Thread.sleep(1000);
        Long res = jedis.ttl("key1");
        System.out.println("剩余时长:" + res);

    }

    private static void commondemo4(Jedis jedis) {
        jedis.flushAll();//删除,避免干扰
        jedis.mset("key1","1","key2","2","key3","3");
        Set<String> res = jedis.keys("*");
        System.out.println(res);

    }

    private static void commondemo3(Jedis jedis) {
        Long res = jedis.del("key1");
        System.out.println("成功删除key的个数:" + res);
        Boolean result = jedis.exists("key1");
        System.out.println("key1已经不存在了:" +result);
    }

    private static void commonDemo2(Jedis jedis) {
        Boolean res = jedis.exists("key1");
        System.out.println("res存在:" + res);
        res = jedis.exists("key10000");
        System.out.println("res不存在:"+ res);
    }

    private static void commonDemo1(Jedis jedis) {
        //先清空,避免干扰
        //jedis.flushAll();
        String result = jedis.set("key1","111");
        System.out.println("result:" + result);

        String res = jedis.get("key1");
        System.out.println("key1-value:"+res);

    }
}

小技巧,你不知返回值有什么来接收时,将鼠标放在函数上:

结果:

3.2、string相关命令举例

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.List;
import java.util.Set;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-09-14
 * Time:15:36
 */
public class redisStringDemo {
    public static void main(String[] args) {
        JedisPool jedispool = new JedisPool("tcp://127.0.0.1:6666");
        try(Jedis jedis = jedispool.getResource()) {
            System.out.println("get/set举例");
            stringDemo1(jedis);
            System.out.println("mget/mset举例:");
            stringDemo2(jedis);
            System.out.println("getrange/setrange");
            stringdemo3(jedis);
            System.out.println("append举例:");
            stringDemo4(jedis);
            System.out.println("incr举例:");
            stringDemo5(jedis);

        }
    }

    private static void stringDemo5(Jedis jedis) {
        Long res = jedis.incr("key2");
        System.out.println("key2自增后:" + res);
    }

    private static void stringDemo4(Jedis jedis) {
        Long result = jedis.append("key1","xxxxx");
        System.out.println("append的返回值" + result);

        String res = jedis.getrange("key1",0,-1);
        System.out.println("key1:" + res);

    }

    private static void stringdemo3(Jedis jedis) {
        //先不删除,使用上一个方法遗留的key1 2 3
        //jedis.flushAll();
        String res = jedis.getrange("key1",0,-1);
        System.out.println("keys:" + res);
        Long result = jedis.setrange("key1",1,"hhhhhh");
        System.out.println("setrange的返回值:" + result);

        res = jedis.getrange("key1",0,-1);
        System.out.println("keys:" + res);


    }

    private static void stringDemo2(Jedis jedis) {
        jedis.flushAll();
        String res = jedis.mset("key1","1","key2","2","key3","3");
        System.out.println("新增是否成功:" + res);
        //取出当中key,检查对应值是否正确
        List<String> result = jedis.mget("key1","key2","key3","key4");
        System.out.println("result" + result);
    }

    private static void stringDemo1(Jedis jedis) {
        //先清空,避免干扰
        jedis.flushAll();
        String result = jedis.set("key1","111");
        System.out.println("result:" + result);

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

结果:

3.3、hash相关命令举例

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-09-14
 * Time:15:57
 */
public class redisHashDemo {
    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:6666");
        try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("hset/hget举例:");
            hashDemo1(jedis);
            System.out.println("hexists举例:");
            hashDemo2(jedis);
            System.out.println("hdel举例:");
            hashDemo3(jedis);
            System.out.println("hkeys/hvals");
            hashDemo4(jedis);
        }
    }

    private static void hashDemo4(Jedis jedis) {
        jedis.flushAll();
        jedis.hset("key1","f1","111");
        jedis.hset("key1","f2","222");
        jedis.hset("key2","f1","333");

        Set<String> res = jedis.hkeys("key1");
        System.out.println("hkeys的返回值:" + res);
        List<String> list = jedis.hvals("key1");
        System.out.println("hvals的返回值:" + list);

    }

    private static void hashDemo3(Jedis jedis) {
        Long res = jedis.hdel("key1","f1");
        System.out.println("hdel的返回值:" + res);
    }

    private static void hashDemo2(Jedis jedis) {
        Boolean res = jedis.hexists("key1","f1");
        System.out.println("key1的f1存在:" + res);
    }

    private static void hashDemo1(Jedis jedis) {
        jedis.flushAll();
        Long res = jedis.hset("key1","f1","111");
        System.out.println("hset的返回值:" + res);
        String result = jedis.hget("key1","f1");
        System.out.println("key1的f1对应的value值:" + result);

    }
}

结果:

3.4、list相关命令举例

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import sun.rmi.runtime.Log;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-09-14
 * Time:16:26
 */
public class rediListDemo {
    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:6666");
        try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("lpsuh/rpush举例:");
            listDemo1(jedis);
            System.out.println("lrange举例:");
            listDemo2(jedis);
            System.out.println("rpop/lpop举例:");
            listDemo3(jedis);
            System.out.println("blpop/brpop举例:");
            listDemo4(jedis);
            System.out.println("llen举例:");
            listDemo5(jedis);
        }
    }

    private static void listDemo5(Jedis jedis) {
        Long res = jedis.llen("key1");
        System.out.println("key1此时的长度:" + res);
    }

    private static void listDemo4(Jedis jedis) {
        //这里具体使用可以看我以前的文章,这里不详细阐述
        List<String> res = jedis.blpop(1000,"key1","key2");
        System.out.println("key左:" + res);
        res = jedis.brpop(1000,"key1","key2");
        System.out.println("key右:" + res);
    }

    private static void listDemo3(Jedis jedis) {
        //继续使用第一个方法的残留
        String res = jedis.lpop("key1");
        System.out.println("key1左侧弹出:" + res);
        res = jedis.rpop("key1");
        System.out.println("key2右侧弹出:" + res);
    }

    private static void listDemo2(Jedis jedis) {
        //使用上一个方法中新增的list
        //1 2 3 4是lpush,5 6 7 是rpush 因此列表的顺序为:4 3 2 1 5 6 7
        List<String> res = jedis.lrange("key1",0,-1);
        System.out.println("key1:" + res);
    }

    private static void listDemo1(Jedis jedis) {
        //  清理数据
        jedis.flushAll();

        Long res = jedis.lpush("key1","1","2","3","4");
        System.out.println("lpush的返回值:" + res);

        res = jedis.rpush("key1","5","6","7");
        System.out.println("rpush的返回值:" + res);

    }
}

结果:

3.5、set相关命令举例

import com.sun.org.apache.xpath.internal.operations.Bool;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.Set;
import java.util.Stack;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-09-14
 * Time:22:18
 */
public class redisSetDemo {
    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:6666");
        try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("sadd/smembers举例");
            setDemo1(jedis);
            System.out.println("sismember举例:");
            setDemo2(jedis);
            System.out.println("scard举例:");
            setDemo3(jedis);
            System.out.println("spop举例:");
            setDemo4(jedis);
            System.out.println("sinter/sinterstore举例:");
            setDemo5(jedis);
        }
    }

    private static void setDemo5(Jedis jedis) {
        //取交集
        //清理数据
        jedis.flushAll();
        jedis.sadd("key1","1","2","3");
        jedis.sadd("key2","1","2","4");
        Set<String> res = jedis.sinter("key1","key2");
        System.out.println("交集:" + res);
        jedis.sinterstore("key","key1","key2");
        res = jedis.smembers("key");
        System.out.println("交集"+ res);
    }

    private static void setDemo4(Jedis jedis) {
        //随机删除一个值
        String res = jedis.spop("key1");
        System.out.println("key1中删除:" + res);
    }

    private static void setDemo3(Jedis jedis) {
        //获取长度
        Long res = jedis.scard("key1");
        System.out.println("key1长度:" + res);
    }

    private static void setDemo2(Jedis jedis) {
        Boolean res = jedis.sismember("key1","2");
        System.out.println("key1中存在2:" + res);
        res = jedis.sismember("key1","100");
        System.out.println("key1中存在100:" + res);
    }

    private static void setDemo1(Jedis jedis) {
        //清除数据
        jedis.flushAll();

        Long res = jedis.sadd("key1","1","2","3","4");
        System.out.println("sadd的返回值:" + res);
        Set<String> result = jedis.smembers("key1");
        System.out.println("key1:" + result);
    }
}

结果:

3.6、zset相关命令举例

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

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

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:龙宝
 * Date:2023-09-14
 * Time:22:42
 */
public class redisZsetDemo {
    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:6666");
        try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("zadd/zrange举例:");
            zsetDemo1(jedis);
            System.out.println("zcard举例:");
            zsetDemo2(jedis);
            System.out.println("zrem举例:");
            zsetDemo3(jedis);
            System.out.println("zscore举例:");
            zsetDemo4(jedis);
            System.out.println("zrank举例:");
            zsetDemo5(jedis);
        }
    }

    private static void zsetDemo5(Jedis jedis) {
        //zrank:
        jedis.flushAll();
        Map<String,Double> map = new HashMap<>();
        map.put("zhangsan",100.0);
        map.put("lisi",95.0);
        map.put("wangwu",90.0);
        Long res = jedis.zadd("key1",map);
        Long result = jedis.zrank("key1","lisi");
        System.out.println("key1中lisi的排名:" + result);
    }

    private static void zsetDemo4(Jedis jedis) {
        //zscore:
        Double res = jedis.zscore("key1","lisi");
        System.out.println("key1的lisi的分数:" + res);
    }

    private static void zsetDemo3(Jedis jedis) {
        //zrem:
        Long res = jedis.zrem("key1","zhangsan");
        System.out.println("key1删除成功?" + res);
    }

    private static void zsetDemo2(Jedis jedis) {
        //zcard:
        Long res = jedis.zcard("key1");
        System.out.println("key1长度:" + res);
    }

    private static void zsetDemo1(Jedis jedis) {
        //清理数据
        jedis.flushAll();
        Map<String,Double> map = new HashMap<>();
        map.put("zhangsan",100.0);
        map.put("lisi",95.0);
        Long res = jedis.zadd("key1",map);
        System.out.println("zadd的返回值:" + res);

        List<String> list = jedis.zrange("key1",0,-1);
        System.out.println("key1:" + list);
    }
}

结果:

先介绍这些啦,下期见~ 

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

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

相关文章

Pytorch从零开始实战03

Pytorch从零开始实战——天气识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——天气识别环境准备数据集模型选择模型训练数据可视化总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytorch2.0.1cu118&…

【Linux学习笔记】 - 常用指令学习及其验证(上)

前言&#xff1a;本文主要记录对Linux常用指令的使用验证。环境为阿里云服务器CentOS 7.9。关于环境如何搭建等问题&#xff0c;大家可到同平台等各大资源网进行搜索学习&#xff0c;本文不再赘述。 由于本人对Linux学习程度尚且较浅&#xff0c;本文仅介绍验证常用指令的常用…

Writesonic:博客和内容创作者的终极写作助手

【产品介绍】 产品名称 Writesonic 上线时间 成立于2020年 具体介绍 Writesonic是一个强大的人工智能写作助手&#xff0c;它使用自然语言处理&#xff08;NLP&#xff09;和机器学习算法来生成内容&#xff0c;这些内容不仅写得好&#xff0c;而且还为SEO和转…

MFC中嵌入显示opencv窗口

在MFC窗体中建立一个Picture Control控件,用于显示opencv窗口 在属性中设置图片控件的资源ID为IDC_PIC1 主要的思路: 使用GetWindowRect可以获取图片控件的区域 使用cv::resizeWindow可以设置opencv窗口的大小,适合图片控件的大小 使用cvGetWindowHandle函数可以获取到ope…

30天入门Python(基础篇)——第3天:【变量】与【输出】与【转义符】(万字解析,建议收藏)

文章目录 专栏导读作者有话说&#xff1a;上一节课补充(Pychaem界面认识)①编写代码区域②运行代码&#xff08;多种方法&#xff0c;随便选一种&#xff0c;开心就好&#xff09; 什么是变量&#xff08;变量的定义&#xff09;①较标准的回答(引用AI)②大白话解释图文并茂(我…

嵌入式Linux驱动开发(I2C专题)(一)

一、I2C协议 1.1、硬件连接 I2C在硬件上的接法如下所示&#xff0c;主控芯片引出两条线SCL,SDA线&#xff0c;在一条I2C总线上可以接很多I2C设备。 1.2、IIC传输数据的格式 1.2.1、写操作 流程如下&#xff1a; 主芯片要发出一个start信号然后发出一个设备地址(用来确定是…

Java作业-模拟扎金花

要求 实现扑克牌的创建、洗牌、发牌、大小对比&#xff0c;输出赢家牌。 前提条件 首先需要创建三个集合&#xff0c;用于存储牌面值、牌号与比较规则&#xff0c;再创建一个类作为牌。 其次还需要了解到一个工具类&#xff0c;就是Collections类&#xff0c;该类的所有方法…

python,迪卡尔象限中画点

import numpy as np import matplotlib.pyplot as plt circleNum 30 # 同时圆刻度值 pointNum 20 # 点的数量 theta np.linspace(0.0, 2*np.pi, pointNum, endpointFalse) s circleNum * np.random.rand(pointNum) # plt.polar(theta, s, linestyleNone, marker*) # 无连接…

不知道有用没用的Api

encodeURIComponent(https://www.baidu.com/?name啊啊啊) decodeURIComponent(https%3A%2F%2Fwww.baidu.com%2F%3Fname%3D%E5%95%8A%E5%95%8A%E5%95%8A) encodeURI(https://www.baidu.com/?name啊啊啊) decodeURI(https://www.baidu.com/?name%E5%95%8A%E5%95%8A%E5%95%8A) …

​LeetCode解法汇总1222. 可以攻击国王的皇后

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 在一个 8x…

解决虚拟机重启后ifconfig看不到IP的问题

目录 背景 解决方案 背景 虚拟机&#xff0c;桥接模式&#xff0c;启动后一切正常&#xff0c;但重启后发现终端连不上虚机了&#xff0c;也ping不到&#xff0c;最后检查发现&#xff0c;IP消失了&#xff0c;虚机没有IP了。 解决方案 不论是否重启&#xff0c;只要是看不…

2023-09-14 LeetCode每日一题(可以攻击国王的皇后)

2023-09-14每日一题 一、题目编号 1222. 可以攻击国王的皇后二、题目链接 点击跳转到题目位置 三、题目描述 在一个 8x8 的棋盘上&#xff0c;放置着若干「黑皇后」和一个「白国王」。 给定一个由整数坐标组成的数组 queens &#xff0c;表示黑皇后的位置&#xff1b;以及…

关于浅克隆和深克隆入门理解

浅克隆:需要类实现Cloneable,并重写clone()方法 一般在重写clone()方法时,将返回值类型强转为自己类,避免每次克隆之后需要强转 public class Test {public static void main(String[] args) throws CloneNotSupportedException {A a1new A();A a2 a1.clone();//克隆之后 a1…

【搭建私人图床】本地PHP搭建简单Imagewheel云图床,在外远程访问

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

Linux——(第十章)进程管理

目录 一、概述 二、常用指令 1.ps查看当前系统进程状态 2.kill 终止进程 3.pstree 查看进程树 4.top 实时监控系统进程状态 5.netstat 监控网络状态 一、概述 &#xff08;1&#xff09;进程是正在执行的一个程序或命令&#xff0c;每一个进程都是一个运行的实体&#…

Redis 常用命令

目录 全局命令 1&#xff09;keys 2&#xff09;exists 3) del(delete) 4&#xff09;expire 5&#xff09;type SET命令 GET命令 MSET 和 MGET命令 其他SET命令 计数命令 redis-cli&#xff0c;进入redis 最核心的命令&#xff1a;我们这里只是先介绍 set 和 get 最简单的操作…

IP地址,子网掩码,默认网关,DNS讲解

IP地址&#xff1a;用来标识网络中一个个主机&#xff0c;IP有唯一性&#xff0c;即每台机器的IP在全世界是唯一的。 子网掩码&#xff1a;用来判断任意两台计算机的ip地址是否属于同一子网络的根据。最为简单的理解就是两台计算机各自的ip地址与子网掩码进行and运算后&#x…

常用排序算法

一、插入排序1、直接插入排序2、折半插入排序3、希尔排序 二、交换排序1、冒泡排序2、快速排序 三、选择排序1、简单选择排序2、堆排序&#xff08;1&#xff09;调整堆&#xff08;2&#xff09;创建堆 四、归并排序五、基数排序六、各种排序方法的比较 将一组杂乱无章的数据按…

Zookeeper应用场景和底层设计

一、什么是zookeeper Zookeeper是一个开源的分布式协调服务框架&#xff0c;它是服务于其它集群式框架的框架。 【简言之】 有一个服务A&#xff0c;以集群的方式提供服务。只需要A专注于它提供的服务就可以&#xff0c;至于它如何以多台服务器协同完成任务的事情&#xff0c…

9.14号作业

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 有些功能&#xff0c;不会 #include <iostream>using namespace std; //创建vector类 class Vector { private:int *data;int size;int capacity; public://无参构造Vector(){}//拷贝构造Vector(c…