三分钟学会一个新技能——使用Java操作Redis
目录
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 7List<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);}
}
结果:
先介绍这些啦,下期见~
相关文章:
三分钟学会一个新技能——使用Java操作Redis
目录 1、前置准备操作 1.1、为什么要进行前置准备操作 1.2、本地如何访问到云服务上Redis的6379端口号 1.3、配置步骤: 2、配置后本地主机如何操作 3、常用命令举例 3.1、通用命令举例 3.2、string相关命令举例 3.3、hash相关命令举例 3.4、list相关命令…...
Java学习笔记------内部类
内部类的定义: 在一个类的里面再定义一个类 内部类的使用场景: 内部类表示的事物是外部类的一部分(B类表示的事物是A类的一部分,且B单独存在没有意义)内部类单独出现没有任何意义 内部类的访问特点 内部类可以直接…...
面试题:问js的forEach和map的区别
前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 【国庆头像】- 国庆爱国 程序员头像!总有一款适合你! 前言 为什么要写这么一篇文章,原因是今天下午水群的时候&…...
Hadoop设置固定ip无效的解决办法
今天配置Hadoop的时候,执行vi /etc/sysconfig/network-scripts/ifcfg-ens33修改网络配置文件后,一切正常,但重启后IP改变了,并且在修改以及重启网络连接数次后,IP依旧不按照我在ifcfg-ens33中配置的那样,检…...
论文解读 | 用于3D对象检测的PV-RCNN网络原创
原创 | 文 BFT机器人 01 背景 本文的背景涉及到3D物体检测,这是一个在自动驾驶和机器人等领域应用广泛的重要问题。在这些领域,LiDAR传感器被广泛用于捕捉3D场景信息,生成不规则且稀疏的点云数据。这些点云数据提供了理解和感知3D场景的关键…...
kali安装volatility及插件mimikatz
1.准备工作 kali安装pip2 wget https://bootstrap.pypa.io/pip/2.7/get-pip.py python2 get-pip.py 查看pip2版本 python2 -m pip -v pip2安装升级 pip2 install --upgrade setuptools 安装2个库 pip2 install construct2.10.54 pip2 install pycryptodome 下载文件d…...
什么是阻塞队列?如何使⽤阻塞队列来实现⽣产者-消费者模型?哪个阻塞队列最常用?
阻塞队列 阻塞队列(Blocking Queue)是一种特殊类型的队列,它具有阻塞特性,即当队列为空时,试图从队列中取出元素的操作会被阻塞,直到队列中有元素可取。同样,当队列已满时,试图将元素放入队列的操作也会被阻塞,直到队列有空闲空间。 JDK 7引入了7个阻塞队列,它们都…...
Bean拷贝组件(注解驱动)方案设计与落地
一、背景 数据流转在各层之间的过程,应当是改头换面的,字段属性数量,属性名称(一般不变,但也有重构时出现变化的情况),类型名称(普遍变化例如BO、VO、DTO)。对于转换的业…...
hive的建表语句
hive建表语句CREATE TABLE ccwn_zh_event_push (customerid string,cardnumber string,accountnumber string,eventcode string,eventtime string,activities string,activityRefuseCode string,lables string)PARTITIONED BY(dt string)ROW FORMAT SERDE org.apache.hadoop.hi…...
提升效率:PostgreSQL准确且快速的数据对比方法
作为一款强大而广受欢迎的开源关系型数据库管理系统,PostgreSQL 在数据库领域拥有显著的市场份额。其出色的可扩展性、稳定性使其成为众多企业和项目的首选数据库。而在很多场景下(开发|生产环境同步、备份恢复验证、数据迁移、数据合并等)&a…...
【轻NAS】Windows搭建可道云私有云盘,并内网穿透公网访问
文章目录 1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6.结语 1.前言 云存储作为近些年兴起的概念,成功吸引了各大互联网厂商下场&…...
计算机网络 第一章:概述
目录 一.因特网概述 1.1网络、互联网(互连网)和因特网 1.2internet与Internet的区别 1.3因特网服务提供者ISP(Internet Service Provider) 1.4因特网组成 二.三种交换方式 2.1电路交换 2.2分组交换(重点) 2.3报文交换 三.计算机网络的定义和分类 四.计算机网络的性能…...
centos7 firewalld ip转发设置、安装docker-compose出现错误、docker-compose部署Yapi
一 centos7 firewalld ip转发设置 #!/bin/bash #开启系统路由模式功能 vim /etc/sysctl.conf #添加下面一行 net.ipv4.ip_forward1 #运行这个命令会输出上面添加的那一行信息,意思是使内核修改生效 sysctl -p #开启firewalld systemctl start firewalld #防火墙开启…...
Cglib代理和JDK代理原理的区别
一、JDK Jdk动态代理,拿到目标类所继承的接口,生成代理类,并且代理类也会实现和目标类一样的接口。 二、Cglib Cglib代理功能更强,无论目标类是否实现接口都可以代理,他是基于继承的方式类代理目标类,如果…...
论文阅读-A General Language for Modeling Social Media Account Behavior
论文链接:https://arxiv.org/pdf/2211.00639v1.pdf 目录 摘要 1 Introduction 2 Related work 2.1 Automation 2.2 Coordination 3 Behavioral Language for Online Classification 3.1 BLOC alphabets 3.1.1 Action alphabet 3.1.2 Content alphabets 3.…...
Python中的异常处理4-3
在《Python中的异常处理4-2》中提到,except语句后面可以加上具体的异常类型。有时我们需要这个异常的其他细节,此时可以使用except...as语句。 1 except...as语句 except..as语句的格式为 except 异常类型 as 异常实例名 从以上格式中可以看到&#…...
Swift学习内容精选(一)
Swift 可选(Optionals)类型 Swift 的可选(Optional)类型,用于处理值缺失的情况。可选表示"那儿有一个值,并且它等于 x "或者"那儿没有值"。 Swfit语言定义后缀?作为命名类型Optional的简写&…...
Marin说PCB之封装设计系列---(02)--异形焊盘的封装设计总结
每天下班回家看电视本来是一件很美好的事情,可是正当我磕着瓜子看着异人之下的时候,手机突然响起来了,我以为是我们组哪个同事找我呢。一接电话居然是我的老朋友陈世美陈总,江湖人称少妇杀手。给我打电话主要是说他最近遇到一个异…...
SpringBoot使用AOP详解
目录 1 AOP是什么2 AOP概念3 Springboot中使用AOP4 AOP原理5 应用场景 1 AOP是什么 AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&…...
【Qt】QGroundControl入门1:介绍
1、简介 1.1 QGroundControl QGroundControl是一款开源的无人机地面控制站软件,依赖Qt库,简称QGC。 QGroundControl为任何支持 MAVLink协议 的无人机提供完整的飞行控制和任务规划。QGroundControl为 PX4 和 ArduPilot 驱动的无人机提供驱动配置。 源码:https://github.co…...
第36章_瑞萨MCU零基础入门系列教程之步进电机控制实验
本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...
198.打家劫舍,213.打家劫舍II,337.打家劫舍III
代码随想录训练营第48天|198.打家劫舍,213.打家劫舍II,337.打家劫舍III 198.打家劫舍文章思路代码 213.打家劫舍III文章思路代码 337.打家劫舍III文章思路代码 总结 198.打家劫舍 文章 代码随想录|0198.打家劫舍 思路 d p [ i ] M a x ( d p [ i − …...
msvcp140.dll是什么东西,如何解决msvcp140.dll丢失的问题的方法分享
在现代生活中,电脑已经成为我们工作、学习和娱乐的重要工具。然而,电脑问题的出现往往会给我们的生活带来不便。其中,"msvcp140.dll丢失"是一个常见的电脑问题。本文将详细介绍这个问题的原因和解决方法,帮助大家更好地…...
音视频 SDL vs2017配置
一、首先我把SDL放在了C盘根目录下 二、新建空项目 三、添加main.cpp //main.cpp #include<iostream> #include <SDL.h>int main(int argc, char* argv[]) // main函数头必须这样写,因为SDL把main定义成了宏 {SDL_Delay(3000); // 让窗口在屏幕上保持…...
前端面试要点
0914 JScript深拷贝和浅拷贝(js解构赋值算哪个?) 深拷贝和浅拷贝 回流和重绘 回流和重绘 webpack打包流程 Webpack打包 虚拟DOM 虚拟DOM git合并分支 git合并分支 CSS盒子模型 CSS盒子模型 0911 WebPack分包 webpack分包 ts泛型 ts泛型 优化…...
shell字符串处理之字符串比较
引言 我们在使用shell编写脚本时,经常需要对字符串进行处理,如字符串大小比较、模式匹配、替换、截断等。本文将梳理字符串比较中常见的用法。 字符串比较 1. 直接比较字符串 a$1 b$2 c"" # 等于 if [ $a "abc" ];thenecho $a …...
怎么获取别人店铺的商品呢?
jd.item_search_shop(获得店铺的所有商品) 为了进行电商平台 的API开发,首先我们需要做下面几件事情。 1)开发者注册一个账号 2)然后为每个JD应用注册一个应用程序键(App Key) 。 3)下载JDAPI的SDK并掌握基本的API…...
【数据结构】二叉树的链式结构
【数据结构】二叉树的链式存储结构 二叉树的存储结构 typedef int BTDataType; // 二叉树的结构 typedef struct BinaryTreeNode {BTDataType data; // 树的值struct BinaryTreeNode *left; // 左孩子struct BinaryTreeNode *right;// 右孩子 } BinaryTreeNode;二…...
模拟实现C语言--strlen函数
模拟实现C语言–strlen函数 模拟实现C语言--strlen函数一、strlen函数是什么?二、strlen函数的模拟实现2.1 计数器方式实现strlen函数2.2 不创建临时变量计数器方式实现strlen函数2.3 指针-指针方式实现strlen函数 三、strlen函数的返回类型 一、strlen函数是什么&a…...
Spring Boot + Vue的网上商城之物流系统实现
Spring Boot Vue的网上商城之物流系统实现 思路 当构建一个物流系统时,我们可以按照以下步骤进行: 设计数据模型:首先确定系统中需要存储的数据,例如物流公司信息、物流订单信息等。根据需求设计相应的数据模型,包括…...
邵阳市建设局网站首页/关键词优化排名费用
系统环境centos7###docker-ce安装### 1、卸载老版本,较老版本的Docker被称为docker或docker-engine。如果这些已安装,请卸载它们以及关联的依赖关系。sudo yum remove docker docker-common docker-selinux docker-engine2、安装所需的软件包 yum-utils提…...
用动易做的校园网站/seo裤子的关键词首页排名有哪些
什么是Windows数据恢复及其工作原理? Windows用户通常都会将他们重要工作和生活文件存储在他们的存储设备上。随着存储空间的缩小,相当多的人可能会删除一部分不需要的或旧的文件来释放空间。或者,他们也可能不小心删除了仍然有用的文件。 …...
罗湖网站建设哪家好/百度工具seo
Java中的多态是一个概念,通过它我们可以通过不同的方式执行单个动作(方法)。 多态性派生自2个希腊词:“poly”和“morphs”。 词语“poly”意为许多,“morphs”意为形式。 所以多态表示为多种形式。在Java中有两种类型的多态性:编…...
网页前端模板网站/东莞网络推广优化排名
包括数据库、apache、tomcat集群安装。转载于:https://blog.51cto.com/395978/666658...
网站建设计入到什么科目/微信广告
利用redis的list和zset数据类型都可以实现排行榜系统。 区别: list本身没有排序功能,需要外部程序排序之后存储到list中,通过list的LRANGE key start stop命令实现分页数据或者前50的排名或者最新前5条数据。zset本身有排序机制,…...
使用公网ip做网站地址/百度自媒体平台
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:高效的任务规划题目输入输出描述示例一输入输出说明示例二输入输…...