当前位置: 首页 > news >正文

Redis ⑨-Jedis | Spring Redis

在这里插入图片描述

Jedis

通过 Jedis 可以连接 Redis 服务器。

通过 Maven 引入 Jedis 依赖。

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

连接 Redis 服务器。

这里设置了 ssh 端口转发,将本地的 8888 端口转发到远程的 6379 端口。

还需修改 Redis 的配置文件:

  1. 将 bind 的地址改为 0.0.0.0
  2. 将 protected-mode 改为 no
public class RedisCon {public static void main(String[] args) {try (JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");Jedis jedis = jedisPool.getResource()) {String pong = jedis.ping(); // 测试连接System.out.println(pong);}}
}

通用命令

GET、SET

private static void getAndSet(Jedis jedis) {jedis.flushAll(); // TODO 清除所有键避免影响操作jedis.set("k1", "111");System.out.println(jedis.get("k1"));SetParams params = new SetParams(); // ? 设置额外参数params.ex(1);params.nx();jedis.set("k2", "222", params); // ? 相当于设置了 1s 过期时间和添加方式为 NX
//        Thread.sleep(2000);System.out.println(jedis.get("k2"));
}

输出:

111
222 | null

EXISTS、DEL

private static void existsAndDel(Jedis jedis) {jedis.flushAll();jedis.set("k1", "111");jedis.set("k2", "111");long trueExists = jedis.exists("k1", "k2"); // ? 这里的参数为变长参数System.out.println(trueExists);long successDel = jedis.del("k2", "k3");System.out.println(successDel);
}

输出:

2
1

KEYS

private static void keys(Jedis jedis) {jedis.flushAll();jedis.set("k1", "111");jedis.set("k2", "111");jedis.set("k3", "111");jedis.set("k4", "111");Set<String> keys = jedis.keys("*");System.out.println(keys);
}

输出:

[k1, k2, k3, k4]

EXPIRE、TTL

private static void expiresAndTTL(Jedis jedis) {jedis.flushAll();jedis.set("k1", "111");jedis.expire("k1", 10);long time = jedis.ttl("k1");System.out.println(time);
}

输出:

10

type

private static void type(Jedis jedis) {jedis.flushAll();jedis.set("k1", "111");System.out.println("type:" + jedis.type("k1"));jedis.lpush("k2", "111");System.out.println("type:" + jedis.type("k2"));jedis.hset("k3", "f1", "v1");System.out.println("type:" + jedis.type("k3"));jedis.sadd("k4", "111");System.out.println("type:" + jedis.type("k4"));jedis.zadd("k5", 30, "m1");System.out.println("type:" + jedis.type("k5"));
}

输出:

type:string
type:list
type:hash
type:set
type:zset

string 类型

MSET、MGET

private static void msetAndMget(Jedis jedis) {jedis.flushAll();jedis.mset("k1", "111", "k2", "222", "k3", "你好");List<String> mgetRes = jedis.mget("k1", "k2", "k3", "k4");System.out.println(mgetRes);
}

输出:

[111, 222, 你好, null]

SETRANGE、GETRANGE

private static void setrangeAndGetrange(Jedis jedis) {jedis.flushAll();jedis.set("k1", "hello world");String getrangeRes = jedis.getrange("k1", 6, 10);System.out.println(getrangeRes);jedis.setrange("k1", 6, "redis");System.out.println(jedis.getrange("k1", 0, -1));
}

输出:

world
hello redis

APPEND

private static void append(Jedis jedis) {jedis.flushAll();jedis.set("k1", "It's MyGO");long appendRes = jedis.append("k1", "!!!!!");System.out.println(appendRes);System.out.println(jedis.get("k1"));
}

输出:

10
It's MyGO!!!!!

INCR、DECR

private static void incrAndDecr(Jedis jedis) {jedis.flushAll();jedis.set("k1", "100");long incrRes = jedis.incr("k1");System.out.println(incrRes);jedis.set("k2", "100");long decrRes = jedis.decr("k2");System.out.println(decrRes);
}

输出:

101
99

list 类型

LPUSH、LRANGE

private static void lpushAndLrange(Jedis jedis) {jedis.flushAll();jedis.lpush("k1", "111", "222", "333");List<String> lrangeRes = jedis.lrange("k1", 0, -1);System.out.println(lrangeRes);
}

输出:

[333, 222, 111]

RPUSH

private static void rpush(Jedis jedis) {jedis.flushAll();jedis.rpush("k1", "111", "222", "333");List<String> lrangeRes = jedis.lrange("k1", 0, -1);System.out.println(lrangeRes);
}

输出:

[111, 222, 333]

LPOP、RPOP

private static void lpopAndRpop(Jedis jedis) {jedis.flushAll();jedis.rpush("k1", "111", "222", "333");String res = jedis.lpop("k1");System.out.println(res);res = jedis.lpop("k1");System.out.println(res);res = jedis.lpop("k1");System.out.println(res);res = jedis.lpop("k1");System.out.println(res);jedis.rpush("k1", "111", "222", "333");res = jedis.rpop("k1");System.out.println(res);res = jedis.rpop("k1");System.out.println(res);res = jedis.rpop("k1");System.out.println(res);res = jedis.rpop("k1");System.out.println(res);
}

输出:

333
222
111
null
333
222
111

BLPOP、LLEN

private static void blpopAndLlen(Jedis jedis) {jedis.flushAll();List<String> blpopRes = jedis.blpop(100, "k1");System.out.println("key:" + blpopRes.get(0));System.out.println("val:" + blpopRes.get(1));long len = jedis.llen("k1");System.out.println(len);
}

输出:

key:k1
val:111
2

set 类型

SADD、SMEMBERS、SCARD

private static void saddAndSmembersAndScard(Jedis jedis) {jedis.flushAll();jedis.sadd("k1", "111", "222", "333");Set<String> smembersRes = jedis.smembers("k1");System.out.println(smembersRes);long len = jedis.scard("k1");System.out.println(len);
}

输出:

[111, 222, 333]
3

SISMEMBER、SPOP

private static void sismemberAndSpop(Jedis jedis) {jedis.flushAll();jedis.sadd("k1", "111", "222", "333");boolean sismemberRes = jedis.sismember("k1", "111");System.out.println(sismemberRes);String spopRes = jedis.spop("k1");System.out.println(spopRes);spopRes = jedis.spop("k1");System.out.println(spopRes);spopRes = jedis.spop("k1");System.out.println(spopRes);spopRes = jedis.spop("k1");System.out.println(spopRes);
}

输出:

true
111
222
333
null

SINTER、SINNTERSTORE

private static void sinterAndSinterstore(Jedis jedis) {jedis.flushAll();jedis.sadd("k1", "111", "222", "333");jedis.sadd("k2", "111", "222", "444");Set<String> sinterRes = jedis.sinter("k1", "k2");System.out.println(sinterRes);jedis.sinterstore("k3","k1", "k2");Set<String> res = jedis.smembers("k3");System.out.println(res);
}

输出:

[111, 222]
[111, 222]

hash 类型

HSET、HGET

private static void hsetAndHget(Jedis jedis) {jedis.flushAll();jedis.hset("k1", "f1", "111");Map<String, String> fv = Map.of("f2", "222", "f3", "333");jedis.hset("k1", fv);String hgetRes = jedis.hget("k1", "f2");System.out.println(hgetRes);
}

输出:

222

HEXISTS、HDEL

private static void hexistsAndHdel(Jedis jedis) {jedis.flushAll();Map<String, String> fv = Map.of("f1", "111", "f2", "222", "f3", "333");jedis.hset("k1", fv);boolean hexistsRes = jedis.hexists("k1", "f1");System.out.println(hexistsRes);long hdelRes = jedis.hdel("k1", "f1", "f2", "f3", "f4");System.out.println(hdelRes);
}

输出:

true
3

HKEYS、HVALS

private static void hkeysAndHvals(Jedis jedis) {jedis.flushAll();Map<String, String> fv = Map.of("f1", "111", "f2", "222", "f3", "333");jedis.hset("k1", fv);Set<String> hkeysRes = jedis.hkeys("k1");System.out.println(hkeysRes);List<String> hvalsRes = jedis.hvals("k1");System.out.println(hvalsRes);
}

输出:

[f1, f2, f3]
[111, 222, 333]

HMSET、HMGET

private static void hmsetAndHmget(Jedis jedis) {jedis.flushAll();Map<String, String> fv = Map.of("f1", "111", "f2", "222", "f3", "333");jedis.hmset("k1", fv);List<String> hmgetRes = jedis.hmget("k1", "f1", "f2", "f3", "f4");System.out.println(hmgetRes);
}

输出:

[111, 222, 333, null]

Zset 类型

ZADD、ZRANGE

private static void zaddAndZrange(Jedis jedis) {jedis.flushAll();jedis.zadd("k1", 10.0, "zhangsan");Map<String, Double> ms = Map.of("lishi", 20.0, "wangwu", 30.0);jedis.zadd("k1", ms);List<String> zrangeRes = jedis.zrange("k1", 0, -1);System.out.println(zrangeRes);List<Tuple> membersWithScores = jedis.zrangeWithScores("k1", 0, -1);System.out.println(membersWithScores);System.out.println(membersWithScores.get(0).getElement());System.out.println(membersWithScores.get(0).getScore());
}

输出:

[zhangsan, lishi, wangwu]
[[zhangsan,10.0], [lishi,20.0], [wangwu,30.0]]
zhangsan
10.0

ZCARD、ZREM

private static void zcardAndZrem(Jedis jedis) {jedis.flushAll();Map<String, Double> ms = Map.of("zhangsan", 10.0, "lishi", 20.0, "wangwu", 30.0);jedis.zadd("k1", ms);long zcardRes = jedis.zcard("k1");System.out.println(zcardRes);long zremRes = jedis.zrem("k1", "zhangsan", "lishi", "zhaoliu");System.out.println(zremRes);
}

输出:

3
2

ZSCORE、ZRANK

private static void zscoreAndZrank(Jedis jedis) {jedis.flushAll();Map<String, Double> ms = Map.of("zhangsan", 10.0, "lishi", 20.0, "wangwu", 30.0);jedis.zadd("k1", ms);Double zscoreRes = jedis.zscore("k1", "zhangsan");System.out.println(zscoreRes);Long zrankRes = jedis.zrank("k1", "lishi");System.out.println(zrankRes);
}

输出:

10.0
1

Spring Boot 集成 Redis

在创建 spring-boot 项目时,选择 Redis 依赖。
在这里插入图片描述
在 application.yml 中配置 Redis 连接信息。

这里配置了端口转发,正常输入服务器的公网 IP 地址和 6379 端口即可。

spring:data:redis:port: 8888host: 127.0.0.1

string 类型

@RestController
public class StringController {@AutowiredStringRedisTemplate redisTemplate;@GetMapping("/string")public String string() {// TODO 先清除数据库redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForValue().set("k1", "111");Map<String, String> kv = Map.of("k2", "222", "k3", "333");redisTemplate.opsForValue().multiSet(kv);return redisTemplate.opsForValue().get("k1");}
}

输出:

111

list 类型

@RestController
public class ListController {@AutowiredStringRedisTemplate redisTemplate;@GetMapping("/list")public List<String> list() {redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForList().leftPush("k1", "111");redisTemplate.opsForList().leftPushAll("k1", "222", "333", "444");redisTemplate.opsForList().leftPop("k1");return redisTemplate.opsForList().range("k1", 0, -1);}
}

输出:

["333","222","111"
]

set 类型

@RestController
public class SetController {@AutowiredStringRedisTemplate redisTemplate;@GetMapping("/set")public Set<String> set() {redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForSet().add("k1", "111", "222", "333", "444");Long size = redisTemplate.opsForSet().size("k1");System.out.println("size:" + size);Boolean isMember = redisTemplate.opsForSet().isMember("k1", "222");System.out.println("isMember:" + isMember);Long remove = redisTemplate.opsForSet().remove("k1", "444");System.out.println("remove:" + remove);return redisTemplate.opsForSet().members("k1");}
}

输出:

size:3
isMember:true
remove:1
["111","222","333"
]

hash 类型

@RestController
public class HashController {@AutowiredStringRedisTemplate redisTemplate;@GetMapping("/hash")public Map<Object, Object> hash() {redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForHash().put("k1", "f1", "v1");Map<String, String> fv = Map.of("f2", "v2", "f3", "v3", "f4", "v4");redisTemplate.opsForHash().putAll("k1", fv);Long size = redisTemplate.opsForHash().size("k1");System.out.println("size:" + size);Boolean hasKey = redisTemplate.opsForHash().hasKey("k1", "f1");System.out.println("hasKey:" + hasKey);Long delete = redisTemplate.opsForHash().delete("k1", "f4");System.out.println("delete:" + delete);return redisTemplate.opsForHash().entries("k1");}
}

输出:

size:4
hasKey:true
delete:1
{"f1": "v1","f3": "v3","f2": "v2"
}

zset 类型

@RestController
public class ZsetController {@AutowiredStringRedisTemplate redisTemplate;@GetMapping("/zset")public Set<ZSetOperations.TypedTuple<String>> zset() {redisTemplate.execute((RedisConnection connection) -> {connection.flushAll();return null;});redisTemplate.opsForZSet().add("k1", "zhangsan", 10.0);redisTemplate.opsForZSet().add("k1", "lishi", 20.0);redisTemplate.opsForZSet().add("k1", "wangwu", 30.0);redisTemplate.opsForZSet().add("k1", "zhaoliu", 40.0);Long remove = redisTemplate.opsForZSet().remove("k1", "wangwu");System.out.println("remove:" + remove);Long rank = redisTemplate.opsForZSet().rank("k1", "lishi");System.out.println("rank:" + rank);Long size = redisTemplate.opsForZSet().size("k1");System.out.println("size:" + size);return redisTemplate.opsForZSet().rangeWithScores("k1", 0, -1);}
}

输出:

remove:1
rank:1
size:3
[lishi=20.0, zhangsan=10.0, zhaoliu=40.0]
[{"value": "zhangsan","score": 10.0},{"value": "lishi","score": 20.0},{"value": "zhaoliu","score": 40.0}
]

相关文章:

Redis ⑨-Jedis | Spring Redis

Jedis 通过 Jedis 可以连接 Redis 服务器。 通过 Maven 引入 Jedis 依赖。 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><versi…...

aidermacs开源程序使用 Aider 在 Emacs 中进行 AI 配对编程

一、软件介绍 文末提供程序和源码下载 Aidermacs 通过集成 Aider&#xff08;最强大的开源 AI 配对编程工具之一&#xff09;为 Emacs 带来了 AI 驱动的开发。如果您缺少 Cursor&#xff0c;但更喜欢生活在 Emacs 中&#xff0c;Aidermacs 提供了类似的 AI 功能&#xff0c;同…...

HarmonyOS NEXT——DevEco Studio的使用(还没写完)

一、IDE环境的搭建 Windows环境 运行环境要求 为保证DevEco Studio正常运行&#xff0c;建议电脑配置满足如下要求&#xff1a; 操作系统&#xff1a;Windows10 64位、Windows11 64位 内存&#xff1a;16GB及以上 硬盘&#xff1a;100GB及以上 分辨率&#xff1a;1280*8…...

使用PageHelper实现分页查询(详细)

一&#xff1a;需求分析与设计 1.1 产品原型 &#xff08;1&#xff09;分页展示&#xff0c;每页展示10条数据&#xff0c;根据员工姓名进行搜索 &#xff08;2&#xff09;业务规则 1.2 接口设计 &#xff08;1&#xff09;操作&#xff1a;查询&#xff0c;请求方式&#xf…...

神经网络基础-从零开始搭建一个神经网络

一、什么是神经网络 人工神经网络&#xff08;Articial Neural Network&#xff0c;简写为ANN&#xff09;也称为神经网络&#xff08;NN),是一种模仿生物神经网络和功能的计算模型&#xff0c;人脑可以看做是一个生物神经网络&#xff0c;由众多的神经元连接而成&#xff0c;…...

数据库原理与应用实验二 题目七

利用sql建立教材数据库,并定义以下基本表: 学生(学号,年龄,性别,系名) 教材(编号,书名,出版社编号,价格) 订购(学号,书号,数量) 出版社(编号,名称,地址) 1定义主码、外码、和价格、数量的取值范围。 2 在三个表中输入若干记录,注意如果输入违反完整…...

如何在 CentOS 7 命令行连接 Wi-Fi?如何在 Linux 命令行连接 Wi-Fi?

如何在 CentOS 7 命令行连接 Wi-Fi&#xff1f;如何在 Linux 命令行连接 Wi-Fi&#xff1f; 摘要 本教程覆盖如何在多种 Linux 发行版下通过命令行连接 Wi-Fi&#xff0c;包括&#xff1a; CentOS 7、Ubuntu、Debian、Arch Linux、Fedora、Alpine Linux、Kali Linux、OpenSU…...

【学习笔记】 强化学习:实用方法论

作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程&#xff0c;深度学习领域研究生必读教材),开始深度学习领域学习&#xff0c;深入全面的理解深度学习的理论知识。 之前的文章参考下面的链接&#xf…...

ElasticSearch深入解析(十):字段膨胀(Mapping 爆炸)问题的解决思路

文章目录 一、核心原理&#xff1a;动态映射的双刃剑1. 动态映射的工作机制2. 映射爆炸的触发条件3. 底层性能损耗 二、典型场景与案例分析1. 日志系统&#xff1a;动态标签引发的灾难2. 物联网数据&#xff1a;设备属性的无序扩展 三、系统性解决方案1. 架构层优化2. 配置层控…...

react18基础速成

1、项目搭建 npx create-react-app my-react-app&#xff08;项目名&#xff09; cd 项目名进入项目目录 终端输入 npm start 启动项目 浏览器查看 项目搭建成功 2、JSX JavaScript语法和HTML语法写在一起就是JSX语法 jsx只能返回一个根元素&#xff0c;即最外层的div&a…...

18、状态库:中央魔法仓库——React 19 Zustand集成

一、量子熔炉的诞生 "Zustand是记忆水晶的量子纠缠体&#xff0c;让状态流无需魔杖驱动即可自洽&#xff01;"霍格沃茨炼金术研究院的工程师挥动魔杖&#xff0c;Zustand 的原子化状态流在空中交织成星轨矩阵。 ——基于《魔法国会》第2025号协议&#xff0c;Zustan…...

PyCharm中全局搜索无效

发现是因为与搜狗快捷键冲突了&#xff0c;把框选的那个勾选去掉或设置为其他键就好了...

【Hive入门】Hive与Spark SQL深度集成:执行引擎性能全面对比与调优分析

目录 引言 1 Hive执行引擎架构演进 1.1 Hive执行引擎发展历程 1.2 执行引擎架构对比 1.2.1 MapReduce引擎架构 1.2.2 Tez引擎架构 1.2.3 Spark引擎架构 2 执行引擎切换与配置指南 2.1 引擎切换配置方法 2.1.1 全局配置 2.1.2 会话级配置 2.2 资源管理配置 2.2.1 T…...

【算法基础】快速排序算法 - JAVA

一、算法基础 1.1 什么是快速排序 快速排序&#xff08;Quick Sort&#xff09;是一种高效的分治排序算法&#xff0c;由英国计算机科学家Tony Hoare于1960年提出。它的核心思想是&#xff1a; 选择一个基准元素&#xff08;pivot&#xff09;将数组分成两部分&#xff1a;小…...

Ubuntu 24.04 通过 update-alternatives 切换GCC版本

在 Ubuntu 中编译项目, 会遇到项目依赖于某个特定版本 GCC 的情况, 例如 Ubuntu 24.04 的默认 GCC 版本是 13, 但是有一些项目需要 GCC11才能正常编译, 在 Ubuntu 24.04 默认的环境下编译会报错. 这时候可以通过 update-alternatives 切换GCC版本. all 展示全部 用--all参数会…...

Linux中的时间同步

一、时间同步服务扩展总结 1. 时间同步的重要性 多主机协作需求&#xff1a;在分布式系统、集群、微服务架构中&#xff0c;时间一致性是日志排序、事务顺序、数据一致性的基础。 安全协议依赖&#xff1a;TLS/SSL证书、Kerberos认证等依赖时间有效性&#xff0c;时间偏差可能…...

数据赋能(209)——质量管理——时效性原则

概述 数据时效性原则在数据收集、处理、分析和应用的过程中确保数据在特定时间范围内保持其有效性和相关性&#xff0c;为决策提供准确、及时的依据。在快速变化的市场环境中&#xff0c;数据时效性对于企业的竞争力和决策效率具有决定性的影响。 原则定义 数据时效性原则&a…...

AnimateCC教学:照片旋转飞舞并爆炸....

1.核心代码: <!DOCTYPE html> <html><head><meta charset="UTF-8" /><title>旋转照片演示</title><script src="https://code.createjs.com/1.0.0/createjs.min.js"></script><script src="http…...

腾讯混元-DiT 文生图

1 混元-DiT所需的模型大小一共是41G https://huggingface.co/Tencent-Hunyuan/HunyuanDiT https://colab.research.google.com/ HunyuanDiT_jupyter.ipynb %cd /content !GIT_LFS_SKIP_SMUDGE1 git clone -b dev https://github.com/camenduru/HunyuanDiT %cd /content/Hun…...

优化高搜索量还是低竞争关键词?SEO策略解析

在2025年的SEO环境中&#xff0c;关键词研究仍然是优化网站排名的基石。然而&#xff0c;一个常见的问题困扰着SEO从业者&#xff1a;在使用谷歌关键词规划师&#xff08;Google Keyword Planner&#xff09;进行关键词研究时&#xff0c;是否应该优先选择月搜索量较高的关键词…...

对比表格:数字签名方案、密钥交换协议、密码学协议、后量子密码学——密码学基础

文章目录 一、数字签名方案1.1 ECDSA&#xff1a;基于椭圆曲线的数字签名算法1.2 EdDSA&#xff1a;Edwards曲线数字签名算法1.3 RSA-PSS&#xff1a;带有概率签名方案的RSA1.4 数字签名方案对比 二、密钥交换协议2.1 Diffie-Hellman密钥交换2.2 ECDH&#xff1a;椭圆曲线Diffi…...

在MySQL中建索引时需要注意哪些事项?

在 MySQL 中建立索引是优化查询性能的重要手段&#xff0c;但不当的索引设计可能导致资源浪费、性能下降甚至拖慢写入速度。 所以我们我们首先要判断对于一个字段或者一些字段要不要建立索引。 适合建立索引的字段通常是&#xff1a; 主键字段&#xff1a;MySQL 会自动为主键…...

dstack 是 Kubernetes 和 Slurm 的开源替代方案,旨在简化 ML 团队跨顶级云、本地集群和加速器的 GPU 分配和 AI 工作负载编排

一、软件介绍 文末提供程序和源码下载 dstack 是 Kubernetes 和 Slurm 的开源替代方案&#xff0c;旨在简化顶级云和本地集群中 ML 团队的 GPU 分配和 AI 工作负载编排。 二、Accelerators 加速器 dstack 支持 NVIDIA 开箱即用的 、 AMD 、 Google TPU 和 Intel Gaudi 加速器…...

Linux 的 epoll 与 Windows 的 IOCP 详解

如果你在搞网络编程或者高性能服务器,一定要搞懂这两个模型——它们都是用来解决“多路复用”问题的工具,让你同时处理大量的网络连接变得高效又可控。 一、什么是“多路复用”? 简单说,就是你手里有很多任务(比如很多客户端的请求),但系统的核心(线程或者进程)资源…...

C# 方法(控制流和方法调用)

本章内容: 方法的结构 方法体内部的代码执行 局部变量 局部常量 控制流 方法调用 返回值 返回语句和void方法 局部函数 参数 值参数 引用参数 引用类型作为值参数和引用参数 输出参数 参数数组 参数类型总结 方法重载 命名参数 可选参数 栈帧 递归 控制流 方法包含了组成程序的…...

Webug4.0靶场通关笔记11- 第15关任意文件下载与第16关MySQL配置文件下载

目录 一、文件下载 二、第15关 任意文件下载 1.打开靶场 2.源码分析 3.渗透实战 三、第16关 MySQL配置文件下载 1.打开靶场 2.源码分析 3.渗透实战 &#xff08;1&#xff09;Windows系统 &#xff08;2&#xff09;Linux系统 四、渗透防御 一、文件下载 本文通过…...

More Effective C++学习笔记

条款1 指针与引用的区别 条款2 尽量使用C风格的类型转换 条款3 不要对数组使用多态 条款4 避免无用的缺省构造函数 条款5 谨慎定义类型转换函数 条款6 自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别 条款7 不要重载“&&”,“||”, 或“,” 条款8 理…...

如何设计抗Crosstalk能力强的PCB镀穿孔

一个高速PCB通道通常包含芯片SerDes IP、走线、穿层Via、连接器和Cable。 其中内层走线对于Crosstalk影响甚微&#xff08;请参考什么&#xff1f; Stripline的FEXT为0&#xff01; Why&#xff1f; &#xff09;&#xff0c;而Via与连接器由于其参考路径较差的关系&#xff0c…...

多线程系列三:这就是线程的状态?

1.认识线程的状态 NEW&#xff1a;Thread对象已经创建好了&#xff0c;但还没有调用start方法在系统中创建线程 RUNNABLE&#xff1a;就绪状态&#xff0c;表示这个线程正在CPU上执行&#xff0c;或准备就绪&#xff0c;随时可以去CPU上执行 BLOCKED&#xff1a;表示由于锁竞争…...

生成对抗网络(GAN, Generative Adversarial Network)​

定义​​&#xff1a;一种通过​​对抗训练​​让两个神经网络&#xff08;生成器与判别器&#xff09;相互博弈的深度学习模型&#xff0c;用于生成逼真的数据&#xff08;如图像、音频、文本等&#xff09;。 ​​一、核心思想&#xff1a;对抗博弈​​ GAN的核心是让两个神…...

用可视化学习逆置法

1.逆置法思路 目标&#xff1a;将这个彩色数组向右旋转3步 &#x1f534;1 → &#x1f7e0;2 → &#x1f7e1;3 → &#x1f7e2;4 → &#x1f535;5 → &#x1f7e3;6 → ⚪7我们希望得到 &#x1f535;5 → &#x1f7e3;6 → ⚪7 → &#x1f534;1 → &#x1f7e0;…...

家用服务器 Ubuntu 服务器配置与 Cloudflare Tunnel 部署指南

Ubuntu 服务器配置与 Cloudflare Tunnel 部署指南 本文档总结了我们讨论的所有内容&#xff0c;包括 Ubuntu 服务器配置、硬盘扩容、静态 IP 设置以及 Cloudflare Tunnel 的部署步骤。 目录 硬盘分区与扩容设置静态 IPCloudflare Tunnel 部署SSH 通过 Cloudflare Tunnel常见…...

【C++篇】类和对象(上)

目录 类的定义格式&#xff1a; 内敛函数&#xff1a; 类与struct的区别&#xff1a; 类的访问权限&#xff1a; 类域&#xff1a; 类的实例化&#xff1a; 对象大小&#xff1a; 计算对象的大小时&#xff0c;也存在内存对齐&#xff08;与结构体一样&#xff09;&…...

ES6/ES11知识点 续一

模板字符串 在 ECMAScript&#xff08;ES&#xff09;中&#xff0c;模板字符串&#xff08;Template Literals&#xff09;是一种非常强大的字符串表示方式&#xff0c;它为我们提供了比传统字符串更灵活的功能&#xff0c;尤其是在处理动态内容时。模板字符串通过反引号&…...

ES6入门---第二单元 模块二:关于数组新增

一、扩展运算符。。。 1、可以把ul li转变为数组 <script>window.onloadfunction (){let aLi document.querySelectorAll(ul li);let arrLi [...aLi];arrLi.pop();arrLi.push(asfasdf);console.log(arrLi);};</script> </head> <body><ul><…...

使用python加edge-tts实现文字转语音

文章目录 使用python加edge-tts实现文字转语音1. 使用 Python 安装 Edge-TTS2. 进一步优化3. 使用说明3.1 查看语音列表3.2 单语音转换3.3 批量生成所有语音3.4 改进亮点4. 使用教程最终代码文章创作不易使用python加edge-tts实现文字转语音 Edge-TTS(edge-tts Python 模块)本…...

如何用CSS实现HTML元素的旋转效果:从基础到高阶应用

在网页设计中&#xff0c;元素的动态效果能显著提升用户体验&#xff0c;而旋转效果是其中最常用的交互方式之一。CSS的transform属性提供了强大的旋转功能&#xff0c;结合动画&#xff08;animation&#xff09;和过渡&#xff08;transition&#xff09;&#xff0c;开发者可…...

轻量级RTSP服务模块:跨平台低延迟嵌入即用的流媒体引擎

在音视频流媒体系统中&#xff0c;RTSP&#xff08;Real-Time Streaming Protocol&#xff09;服务模块通常扮演着“视频分发中心”的角色&#xff0c;它将编码后的音视频内容转为标准的流媒体格式&#xff0c;供客户端&#xff08;播放器、云端平台、AI模块等&#xff09;拉流…...

AVInputFormat 再分析

AVInputFormat 是 FFmpeg 中用于描述输入格式&#xff08;如文件容器、设备流等&#xff09;的核心结构体&#xff0c;属于 libavformat 库的一部分。其主要功能是定义解封装&#xff08;demuxing&#xff09;过程中如何解析不同格式的输入数据。以下是其关键特性与使用方式的总…...

wpf CommandParameter 传递MouseWheelEventArgs参数

在 WPF 中通过 CommandParameter 传递 MouseWheelEventArgs 参数时&#xff0c;需结合 ‌事件到命令的转换机制‌ 和 ‌参数转换器‌ 来实现。以下是具体实现方案及注意事项&#xff1a; 一、核心实现方法 1. ‌使用 EventToCommand 传递原始事件参数‌ 通过 Interaction.Tr…...

摆脱养生误区泥沼,拥抱科学养生阳光

在养生的道路上&#xff0c;人们总是满怀热忱地追寻健康之道&#xff0c;然而&#xff0c;诸多似是而非的养生误区却如同泥沼一般&#xff0c;让不少人深陷其中&#xff0c;难以自拔。只有奋力摆脱这些误区的束缚&#xff0c;才能拥抱科学养生的温暖阳光&#xff0c;真正实现身…...

FreeRtos实战从入门到精通--任务创建和删除(动态方法)--事了拂衣去,深藏功与名

FreeRtos是之前的一些聪明的工程师写的免费且开源的嵌入式实时操作系统代码&#xff0c;由于我们实际工作中不需要再去写rtos&#xff0c;我们只需要用就行了&#xff0c;所以博主这里只分享项目工程实战相关的内容&#xff0c;具体rtos源码&#xff0c;可以无需理会&#xff0…...

卷积神经网络进化史:从LeNet-5到现代架构的完整发展脉络

摘要 本文系统梳理卷积神经网络(CNN)从诞生到繁荣的发展历程。从1998年Yann LeCun开创性的LeNet-5出发&#xff0c;重点解析2012年引爆深度学习革命的AlexNet&#xff0c;并详细拆解后续演进的五大技术方向&#xff1a;网络深度化(VGG)、卷积功能强化(ResNet)、检测任务迁移(F…...

《Qt C++ 项目中升级 GCC 版本的完整指南》

Qt C++ 项目中升级 GCC 版本的完整指南 在 Qt C++ 项目中升级 GCC 版本可能会影响编译工具链、Qt 库兼容性以及项目配置。以下是针对不同操作系统的升级步骤和注意事项: 一、为什么需要升级 GCC 版本? C++ 标准支持:新版本 GCC 支持 C++17/20 等新标准特性性能优化:编译速…...

Baklib赋能企业知识管理数字化转型

Baklib驱动知识智慧转化 在数字化浪潮中&#xff0c;企业知识资产的碎片化与低效流转已成为制约业务创新的核心瓶颈。Baklib作为新一代知识中台&#xff0c;通过构建智能化的知识治理体系&#xff0c;将分散的文档、数据与经验转化为可复用的业务智慧。其核心能力体现在多模态…...

LeetCode240. 搜索二维矩阵 II(巧妙转换)

编写一个高效的算法来搜索m x n矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 题目中最关键的信息就是每行从左到右升序&#xff0c;每列从左到右升序&#xff0c;如果暴力的话就用不到…...

AVFormatContext 再分析二

说明 &#xff1a;将 avfromatContext 的变量依次打印分析&#xff0c;根据ffmpeg 给的说明&#xff0c;猜测&#xff0c;结合网上的文章字节写测试代码分析二。 37 AVInputFormat *iformat; /** * The input container format. * * Demuxing only, set by avfo…...

leetcode0096. 不同的二叉搜索树-medium

1 题目&#xff1a;不同的二叉搜索树 官方标定难度&#xff1a;中 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xf…...

【科研绘图系列】R语言绘制世界地图(map plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图输出图片系统信息介绍 【科研绘图系列】R语言绘制世界地图(map plot) 加载R包 library(ggmap) library(RColorBrewer) library(pals) …...

【原创】风云扫描王[特殊字符]OCR识别翻译!证件照

&#x1f4e3;文字识别&#xff0c;文字提取&#xff0c;扫描翻译&#xff0c;证件扫描&#xff0c;表格识别&#xff0c;PDF加水印等一体的扫描应用。扫描任何东西&#xff0c;包括文件、纸质笔记、收据和书籍&#xff0c;把它们扫描成清晰的PDF文件和图像。使用OCR技术将图像…...