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

Redis最新入门教程

文章目录

  • Redis最新入门教程
    • 1.安装Redis
    • 2.连接Redis
    • 3.Redis环境变量配置
    • 4.入门Redis
      • 4.1 Redis的数据结构
      • 4.2 Redis的Key
      • 4.3 Redis-String
      • 4.4 Redis-Hash
      • 4.5 Redis-List
      • 4.6 Redis-Set
      • 4.7 Redis-Zset
    • 5.在Java中使用Redis
    • 6.缓存雪崩、击穿、穿透
      • 6.1 缓存雪崩
      • 6.2 缓冲击穿
      • 6.3 缓冲穿透
      • 6.4 业务可靠性处理
    • 参考

Redis最新入门教程

Redis 是互联网技术领域中使用最广泛的存储中间件,它是 Remote Dictionary Service 三个单词中加粗字母的组合。它是一个存储在磁盘上的内存数据库。数据模型是键-值对,但支持许多不同类型的值:Strings, Lists, Sets, Sorted Sets, Hashes

1.安装Redis

Redis 官方不建议在 windows 下使用 Redis,所以官网没有 Windows 版本可以下载。但是官方给出了一个在 Windows 下使用Redis的方法:Install Redis on Windows,具体操作就是安装 WSL,然后在电脑上运行 Ubuntu,大家也可以尝试。

对于我们本地开发与学习,下载非官方的 Windows 版本就可以。这里推荐两个 Windows 版本的 Redis 仓库:

  • 微软的开源 Windows版本 --> 这个项目已经不再被维护了,最高版本为 3.2.100。
  • redis-windows 项目 --> 借助 GitHub Actions 强大的自动化构建能力,实时编译最新版本的 Redis for Windows 系统。版本和官方保持一致,推荐👍

note:建议使用 Windows 版本进行本地开发,并按照 Redis 官方指导将其部署在 Linux 上用于生产环境。


安装流程

  • 下载 Redis Latest for Windows。

    image-20250508112614297

  • 解压,直接运行项目中的 start.bat 脚本,一键启动。或者使用命令行启动 redis-server.exe redis.conf

    image-20250508112738342

    note:使用 Redis 时,这个窗口不可以关闭。若想要停止 Redis 服务,直接关闭窗口。

2.连接Redis

Redis 本身就自带了一个命令行客户端,可以直接通过 redis-cli 命令来连接 Redis 服务。如下所示,表明连接成功:

image-20250508115228575

这里推荐两款好用的 Redis 图形化客户端,大家可以根据自己喜好下载:

  • AnotherRedisDesktopManager,github 已经有 32k+ 的 star 了。
  • Redis Insight,官方 Redis 数据库工具。

由于我个人喜欢使用官方版本,所以接下来介绍一下 Redis Insight 的安装:进入官网 Redis Insight 下载安装包,然后一直下一步即可安装成功。第一次打开勾选上 I have read and understood the Terms 点击 Submit 就好,其他选项(主要是隐私设置以及通知设置)不用勾选。这样就可以开始使用 Redis Insight了。

3.Redis环境变量配置

每次连接 Redis 都必须到解压后的目录,才可以输入启动命令。所以通过配置环境变量,解决这一问题。

  • 复制 Redis 的地址。Example: D:\Redis\Redis-8.0.0-Windows-x64-cygwin

    image-20250508140043082

  • 「环境变量」->「系统变量」->「path」->「编辑」->「新建」,粘贴 Redis 路径。

    image-20250508140553453

这样在任何位置,打开 cmd 就可以输入 Redis 的命令了。

  • 启动 Redis:

    redis-server
    
  • 连接 Redis:

    redis-cli
    

4.入门Redis

4.1 Redis的数据结构

Redis 有 5 种基础数据结构,String、Hash、List、Set、SortedSet。除此之外,还有 HyperLogLog、Geo、Pub/Sub 等高级数据结构。

  • string(字符串): 基本的数据存储单元,可以存储字符串、整数或者浮点数。
  • hash(哈希):一个键值对集合,可以存储多个字段。
  • list(列表):一个简单的列表,可以存储一系列的字符串元素。
  • set(集合):一个无序集合,可以存储不重复的字符串元素。
  • zset(sorted set:有序集合): 类似于集合,但是每个元素都有一个分数(score)与之关联。
  • 位图(Bitmaps):位数组,可以对字符串进行位操作。常用于实现布隆过滤器等位操作。
  • 超日志(HyperLogLogs):用于基数统计,可以估算集合中的唯一元素数量。
  • 地理空间(Geospatial):用于存储地理位置信息,支持地理空间索引和半径查询。
  • 发布/订阅(Pub/Sub):一种消息通信模式,允许客户端订阅消息通道,并接收发布到该通道的消息。
  • 流(Streams):用于消息队列和日志存储,支持消息的持久化和时间排序。
  • 模块(Modules):Redis 支持动态加载模块,可以扩展 Redis 的功能。

4.2 Redis的Key

Redis 键命令用于管理 redis 的键。Redis 键命令的基本语法如下:

COMMAND KEY_NAME
127.0.0.1:6379> set name redis
OK
127.0.0.1:6379> del name
(integer) 1
  • del 命令用来删除一个键值对,(integer) 1 表示执行成功,(integer) 0 表示执行失败。
  • exists 命令用来测试一个键值对是否存在,(integer) 1 表示存在,(integer) 0 表示不存在。

4.3 Redis-String

String 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

常用命令:

  • SET key value:设置键的值。
  • GET key:获取键的值。
  • INCR key:将键的值加 1。
  • DECR key:将键的值减 1。
  • APPEND key value:将值追加到键的值之后。
127.0.0.1:6379> set name1 xiaoming
OK
127.0.0.1:6379> get name1
"xiaoming"

4.4 Redis-Hash

Hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。每个 hash 最多可以存储 2 32 − 1 2^{32}-1 2321 个键值对。

常用命令:

  • HSET key field value:设置哈希表中字段的值。
  • HGET key field:获取哈希表中字段的值。
  • HGETALL key:获取哈希表中所有字段和值。
  • HDEL key field:删除哈希表中的一个或多个字段。
127.0.0.1:6379> hset student id 1 name "zhangsan" gender "男"
(integer) 3
127.0.0.1:6379> hgetall student
1) "id"
2) "1"
3) "name"
4) "zhangsan"
5) "gender"
6) "\xe7\x94\xb7"
127.0.0.1:6379> hget student name
"zhangsan"
127.0.0.1:6379> hget student id
"1"

4.5 Redis-List

List 是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。列表最多可以存储 2 32 − 1 2^{32}-1 2321 个元素。

常用命令:

  • LPUSH key value:将值插入到列表头部。
  • RPUSH key value:将值插入到列表尾部。
  • LPOP key:移出并获取列表的第一个元素。
  • RPOP key:移出并获取列表的最后一个元素。
  • LRANGE key start stop:获取列表在指定范围内的元素。
127.0.0.1:6379> lpush order first second
(integer) 2
127.0.0.1:6379> lrange order 0 1
1) "second"
2) "first"
127.0.0.1:6379> lpush order third
(integer) 3
127.0.0.1:6379> lrange order 0 3
1) "third"
2) "second"
3) "first"
127.0.0.1:6379> lrange order 0 2
1) "third"
2) "second"
3) "first"
127.0.0.1:6379> lrange order 0 1
1) "third"
2) "second"

4.6 Redis-Set

Set 是 string 类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为 2 32 − 1 2^{32}-1 2321

常用命令:

  • SADD key value:向集合添加一个或多个成员。
  • SREM key value:移除集合中的一个或多个成员。
  • SMEMBERS key:返回集合中的所有成员。
  • SISMEMBER key value:判断值是否是集合的成员。
127.0.0.1:6379> sadd color red yellow blue
(integer) 3
127.0.0.1:6379> smembers color
1) "red"
2) "yellow"
3) "blue"
127.0.0.1:6379> srem color red
(integer) 1
127.0.0.1:6379> smembers color
1) "yellow"
2) "blue

4.7 Redis-Zset

zset 和 set 一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序zset 的成员是唯一的,但分数(score)却可以重复

常用命令:

  • ZADD key score value:向有序集合添加一个或多个成员,或更新已存在成员的分数。
  • ZRANGE key start stop [WITHSCORES]:返回指定范围内的成员。
  • ZREM key value:移除有序集合中的一个或多个成员。
  • ZSCORE key value:返回有序集合中,成员的分数值。
127.0.0.1:6379> zadd class 100 "one" 90 "two" 100 three
(integer) 3
127.0.0.1:6379> zrange class 0 2
1) "two"
2) "one"
3) "three"
127.0.0.1:6379> zscore class two
"90"

5.在Java中使用Redis

  • 第一步,在项目中添加 Jedis(Java 和 Redis 的混拼)依赖:

    <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>8.0.0</version>
    </dependency>
    
  • 第二步,新建 UserInfo(用户信息)类:

    package org.example;public class UserInfo {private String name;private int age;public UserInfo() {}public UserInfo(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "UserInfo{" +"name='" + name + '\'' +", age=" + age +'}';}
    }
    
  • 第三步,在项目中添加 Gson(用于序列化和反序列化用户信息)依赖:

    <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.6</version><scope>compile</scope>
    </dependency>
    
  • 第四步,新建测试类 RedisTest:

    public class RedisTest {// 定义 Redis 中存储用户信息的键private static final String REDIS_KEY = "user";public static void main(String[] args) {// 创建 Jedis 实例,连接到本地 Redis 服务器,端口为 6379Jedis jedis = new Jedis("localhost", 6379);// 创建 Gson 实例,用于 Java 对象和 JSON 字符串之间的转换Gson gson = new Gson();// 创建 UserInfo 对象,存储用户信息UserInfo userInfo = new UserInfo("鱼儿也有烦恼", 18);// 将 UserInfo 对象转换为 JSON 字符串,并存储到 Redis 中jedis.set(REDIS_KEY, gson.toJson(userInfo));// 从 Redis 中获取 JSON 字符串,并转换为 UserInfo 对象UserInfo getUserInfoFromRedis = gson.fromJson(jedis.get(REDIS_KEY), UserInfo.class);// 打印从 Redis 中获取的用户信息System.out.println("get:" + getUserInfoFromRedis);// 打印指定键是否存在于 Redis 中System.out.println("exists:" + jedis.exists(REDIS_KEY));// 删除 Redis 中指定键对应的值,并打印删除的键的数量System.out.println("del:" + jedis.del(REDIS_KEY));// 尝试获取已删除键的值,并打印结果System.out.println("get:" + jedis.get(REDIS_KEY));}
    }
    
  • 输出结果:

    get:UserInfo{name='鱼儿也有烦恼', age=18}
    exists:true
    del:1
    get:null
    

6.缓存雪崩、击穿、穿透

6.1 缓存雪崩

概念:即缓存同一时间大面积的失效,这个时候来了一大波请求,都怼到数据库上,最后数据库处理不过来崩了。

业务场景举例:APP首页放着很多热门数据,大型活动期间,首页数据得按不同时间更新。就像零点要换一批新数据,旧数据刚过期,新数据还没完全加载好。偏偏零点又有个小活动启动,一下子来了好多人打开APP,服务器收到海量请求。可新数据没加载完,缓存里大多找不到对应内容,这些请求全跑到数据库那儿去了。数据库应付不过来这么多请求,最后直接瘫痪了。

解决方案

  • 给过期时间加个随机时间。需要注意的是,这里设置的随机过期时间并非短短几秒,而是可以长达数分钟。这是因为当数据量庞大时,再结合上述场景,考虑到Redis采用单线程处理数据的特性,仅仅几秒的缓冲时间,根本无法确保所有新数据都能加载完毕。 因此,在设置过期时间时,宁长勿短。毕竟无论时间长短,数据最终都会过期,从最终效果来看并无差别。而且,适当扩大过期时间范围,能让Redis的key分布得更加分散。这样一来,Redis在批量处理过期key时,阻塞时间也会相应缩短,有效提升系统运行效率。
  • 加互斥锁,但这个方案会导致吞吐量明显下降。(上述例子不合适用)
  • 热点数据不设置过期。不过期的话,正常业务请求自然就不会打到数据库了。

6.2 缓冲击穿

概念:缓存击穿是指一个热点 key 过期或被删除后,导致线上原本能命中该热点 key 的请求,瞬间大量地打到数据库上,最终导致数据库被击垮。

业务场景举例:出现情况一般是误操作,比如设置错了过期时间、误删除导致的。

解决方案

  • 仔细检查每一处代码细节,确保没有潜在问题。对于热点数据,要明确制定清晰的过期策略:究竟需不需要设置过期时间?如果需要,具体在何时让数据过期?这些都要有明确的规划。
  • 线上误操作问题,需加强权限管理,特别是线上权限必须审核,防止误操作。

6.3 缓冲穿透

概念:客户端请求缓存和数据库中不存在的数据,导致所有的请求都打到数据库上。如果请求很多,数据库依旧会挂掉。

业务场景举例

  • 数据库主键 id 都是正数,然后客户端发起了 id = -1 的查询。
  • 一个查询接口,有一个状态字段 status,其实 0 表示开始、1 表示结束。结果有请求一直发 status=3 的请求过来。

解决方案

  • 做好参数校验,对于不合理的参数要及时 return 结束。
  • 对于查不到数据的 key,也将其短暂缓存起来。比如 30s。这样能避免大量相同请求瞬间打到数据库上,减轻压力。
  • 提供一个能迅速判断请求是否有效的拦截机制,比如布隆过滤器,Redis 本身就具有这个功能。可以利用 Redis 维护所有合法的键(key),当有请求到来时,先通过布隆过滤器检查请求参数中的键是否合法。若不合法,就直接返回响应结果;若合法,再从缓存或者数据库里获取所需数据。

6.4 业务可靠性处理

  • 提高 Redis 可用性。

    Redis 要么用集群架构,要么用主从 + 哨兵。保证 Redis 的可用性。

    光搞主从架构,没加哨兵的话,出问题根本不会自动切换。要是赶上业务高峰期或者搞活动的时候服务器挂了,等系统报警、排查问题、跟团队沟通完,再等运维来修,黄花菜都凉了!

  • 减少对缓存的依赖。

    对于热点数据,可以考虑加上本地缓存,比如:Guava、Ehcache,更简单点,hashMap、List 等也可以。减少 Redis 压力的同时,还能提高性能,一举两得。

  • 业务降级。

    从保护下游接口或者数据库的方面来想,在碰到大流量的情况时,搞个限流措施挺有必要的。就算缓存突然崩了,也不至于让下游直接全垮掉。还有,那些能降级的功能就降级。提前把降级开关和降级逻辑写好,到了关键时候,全指望着它们来稳住局面呢。

🤗🤗🤗

参考

  • Redis官方Commands查阅

相关文章:

Redis最新入门教程

文章目录 Redis最新入门教程1.安装Redis2.连接Redis3.Redis环境变量配置4.入门Redis4.1 Redis的数据结构4.2 Redis的Key4.3 Redis-String4.4 Redis-Hash4.5 Redis-List4.6 Redis-Set4.7 Redis-Zset 5.在Java中使用Redis6.缓存雪崩、击穿、穿透6.1 缓存雪崩6.2 缓冲击穿6.3 缓冲…...

2025年渗透测试面试题总结-某步在线面试(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 一、操作系统相关问题总结与分析及扩展回答 1. Linux命令熟悉度 2. 查看进程的命令 3. 查看网络进程…...

网络化:DevOps 工程的必要基础(Networking: The Essential Foundation for DevOps Engineering)

李升伟 编译 理解网络化基础知识 你是否曾想过是什么真正让卓越的DevOps工程师与众人区别开来&#xff1f;答案是网络化。是的&#xff0c;对网络的基本理解不仅仅是有帮助的——它是绝对必要的。在当今以微服务、容器和分布式系统为主宰的互联互通世界中&#xff0c;对网络原…...

<template>标签的用法

一、原生的template标签的用法 <template> 是 HTML5 引入的一个标签&#xff0c;用于声明 HTML 片段&#xff0c;这些片段在页面加载时不会被渲染&#xff0c;但可以在运行时通过 JavaScript 实例化和使用。 基本用法 <template id"myTemplate"> <…...

【数据结构】——链表OJ(下)

前面我们已经刷了几道单链表的题目&#xff0c;下面我们继续看几道题目。 一、相交链表 这道题题目的要求是很好理解的&#xff0c;就是现在我们有两个链表&#xff0c;然后我们就相办法进行判断&#xff0c;这两个链表是否是相交的&#xff0c;那么链表的相交其实就是有没有共…...

笔试专题(十六)

文章目录 相差不超过k的最多数题解代码 最长公共子序列&#xff08;一&#xff09;题解代码 小红的口罩题解代码 春游题解代码 相差不超过k的最多数 题目链接 题解 1. 排序 滑动窗口 2. 为什么使用滑动窗口&#xff1f; 因为max-min < k&#xff0c;求这个区间内的数最…...

云原生应用全生命周期管理实战:从开发、部署到运维的一体化方案

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、前言:应用交付正在被“云原生”重塑 随着企业IT架构从单体转向微服务,再到全面拥抱容器化与Kubernetes,应用的构建、部署、配置、监控、弹性与治理也正经历一场全方位的变革。传统的开发运维…...

图表制作-带背景色的柱状图

首先登录自己的账号&#xff0c;没有账号的可以注册一个。 登录之后&#xff0c;在左侧菜单栏找到图表制作-统计图。 点击新建统计图&#xff0c;点击柱状图-带背景色的柱状图。 初始会有一些演示数据&#xff0c;可以根据自己的需要进行修改。 如果觉得手动修改太麻烦&#xf…...

【Pandas】pandas DataFrame ewm

Pandas2.2 DataFrame Function application, GroupBy & window 方法描述DataFrame.apply(func[, axis, raw, …])用于沿 DataFrame 的轴&#xff08;行或列&#xff09;应用一个函数DataFrame.map(func[, na_action])用于对 DataFrame 的每个元素应用一个函数DataFrame.a…...

V 型球阀:多材质多驱动,精准适配复杂严苛工况-耀圣

V 型球阀&#xff1a;多材质多驱动&#xff0c;精准适配复杂严苛工况 在化工、矿业、环保等工业领域&#xff0c;带颗粒介质、料浆以及高腐蚀性介质的输送与控制一直是行业难题。普通阀门在这些复杂工况下&#xff0c;易出现磨损、腐蚀、控制失灵等问题&#xff0c;而 V 型球阀…...

使用C# ASP.NET创建一个可以由服务端推送信息至客户端的WEB应用(2)

接上文 使用C# ASP.NET创建一个可以由服务端推送信息至客户端的WEB应用&#xff08;1&#xff09; https://blog.csdn.net/coldwind811201/article/details/147607641 1. 更新NuGet包 升级NuGet包后&#xff0c;注意相应修改前面页面上的JS引用为相应新版本的jquery JS脚本 …...

Java响应实体【R】

R响应实体 响应实体R(Response Entity)具体作用说明&#xff1f;1、用与数据传输2、用于状态反馈3、指令与控制 普通响应实体优化后的R&#xff1a;高级响应实体类 响应实体R(Response Entity)具体作用说明&#xff1f; 1、用与数据传输 传输请求结果 &#xff1a;当客户端向…...

短视频矩阵系统批量剪辑模式开发详解,支持OEM

在短视频行业竞争激烈的当下&#xff0c;短视频矩阵系统通过批量剪辑功能实现高效内容生产&#xff0c;成为众多运营者的利器。本文将深入探讨短视频矩阵系统中几种常见批量剪辑模式的开发思路与实现方法&#xff0c;助力开发者构建功能强大的批量剪辑模块。 一、批量剪辑模式概…...

顺丰科技:从 Presto 到 Doris 湖仓构架升级,提速 3 倍,降本 48%

导读&#xff1a;顺丰科技引入 Doris 替换 Presto&#xff0c;在内部可视化数据自助分析工具丰景台场景广泛应用。目前&#xff0c;顺丰临时查询业务、丰景台报表业务的 Presto 场景已经 100% 切换到 Doris 集群中&#xff0c;日均查询量 100W。并实现 P95 性能提升近 3 倍&…...

使用 Cesium 构建 3D 地图应用的实践

CesiumJS 是一个功能强大的开源 JavaScript 库&#xff0c;能够帮助开发者快速构建高性能、高精度的 3D 地球和地图应用 。本文将介绍如何使用 Cesium 构建一个基本的 3D 地图应用&#xff0c;并加载自定义的 3D Tiles 模型。 初始化 Cesium Viewer 首先&#xff0c;在 Vue 的…...

公链钱包开发:技术逻辑与产品设计实践

公链钱包开发&#xff1a;技术逻辑与产品设计实践 ——2025年数字资产管理的范式革命与用户价值重构 一、公链钱包的核心理解&#xff1a;技术逻辑与用户价值的耦合 公链钱包不仅是存储数字资产的工具&#xff0c;更是用户与区块链生态交互的“超级入口”。其核心价值体现在三…...

mobile自动化测试-appium webdriverio

WebdriverIO是一款支持mobile app和mobile web自动化测试框架&#xff0c;与appium集成&#xff0c;完成对mobile应用测试。支持ios 和android两种平台&#xff0c;且功能丰富&#xff0c;是mobile app自动化测试首选框架。且官方还提供了mobile 应用测试example代码&#xff0…...

【Python开源】深度解析:一款高效音频封面批量删除工具的设计与实现

&#x1f3b5; 【Python开源】深度解析&#xff1a;一款高效音频封面批量删除工具的设计与实现 &#x1f308; 个人主页&#xff1a;创客白泽 - CSDN博客 &#x1f525; 系列专栏&#xff1a;&#x1f40d;《Python开源项目实战》 &#x1f4a1; 热爱不止于代码&#xff0c;热情…...

飞算 用到妙处 AI辅助编程 - 双击方法名,自动识别到上下文中很方便

1. 双击findtasktypedict方法。右侧箭头指向自动识别 2. 按照说的内容机型了修改...

msIT大模型推理迁移调优工具

msIT LLM大模型ATB推理精度工具 适用场景&#xff1a;大模型加速库推理精度分析工具能力&#xff1a;大模型推理精度工具msIT llm&#xff0c;提供基于加速库推理的精度调试工具&#xff0c;支持数据dump、精度比对、单算子预检、溢出检测、模型迁移等能力。 msIT LLM大模型…...

YOGA Air X ILL10(83CX)/YOGA 14 ILL10X(83LC)2025款恢复开箱状态原装出厂Win11系统OEM镜像

适用机型(MTM)&#xff1a; 【83LC】链接&#xff1a;https://pan.baidu.com/s/1AwbFR9nccvyzS1pOCToMvA?pwdewjs 提取码&#xff1a;ewjs 【83CX】链接&#xff1a;https://pan.baidu.com/s/1wMRI8ETodVG59GBDVDLgQg?pwdn3nx 提取码&#xff1a;n3nx lenovo联想原装wi…...

使用Deployment部署运行Nginx和Apache服务

1.Deployment简介 &#xff1a; 在Kubernetes&#xff08;k8s&#xff09;中&#xff0c;Deployment 是一种核心控制器资源&#xff0c;用于管理无状态应用的声明式部署、扩展与更新。它通过定义应用的期望状态&#xff0c;由控制器自动维护实际状态与期望状态的一致性&#x…...

382_C++_在用户会话结束时,检查是否有其他会话仍然来自同一个客户端 IP 地址,没有连接状态设置为断开,否则为连接

之前出现的问题:重启管理机,工作机上面热备连接状态显示未连接 (此时是有一个工作机连接管理机的),所以正常应该是连接状态解决:根因分析: 重启管理机后,管理机给过来的cookie是空的,导致工作机同时存在两个管理机的session,在其中一个超时后,调用回调函数通知会话断开…...

【 Redis | 实战篇 短信登录 】

前言&#xff1a; 主要完成了基于Session实现登录&#xff0c;解决集群的Session共享问题&#xff0c;从而实现了基于Redis来实现共享Session登录 1.基于Session实现登录 1.1.发送短信验证码 步骤&#xff1a; 前端提交手机号 》校验手机号 》不符合返回错误信息&#xff0…...

AI(学习笔记第二课) 使用langchain进行AI开发

文章目录 AI(学习笔记第二课) 使用langchain进行AI开发学习内容&#xff1a;1. 使用背景2.创建python&#xff08;pycharm community版&#xff09;开发环境并连接deepseek2.1 创建python&#xff08;pycharm community版&#xff09;开发环境2.2 创建python工程2.3 写入初始py…...

如何查看某个文件中的特殊符号

Q&#xff1a;如何查看某个文件中的特殊符号&#xff0c;比如说是换行符之类的转义字符&#xff1f; 1&#xff0c;法1&#xff1a;使用cat -A cat -A filename可以看到-A本质上就是-vET&#xff0c;也就是 展示所有的字符&#xff0c;-v是显示非打印字符&#xff0c;这个需…...

venv环境里控制scapy版本和起trex v2.87

要在虚拟环境&#xff08;venv&#xff09;中控制Scapy版本并运行TRex v2.87&#xff0c;您可以按照以下步骤操作&#xff1a; 创建一个新的虚拟环境&#xff1a; python3 -m venv trex-env激活创建的虚拟环境。在Linux或macOS上&#xff1a; source trex-env/bin/activate在Wi…...

第五十四篇 AI与数据分析

一、AI数据分析就像做菜 想象你在厨房做一道新菜&#xff0c;AI数据分析的流程其实非常相似&#xff1a; 买菜&#xff08;获取数据&#xff09; 去市场挑选新鲜蔬菜 从Excel/数据库获取数据例&#xff1a;pd.read_csv(超市销售表.csv) 洗菜切菜&#xff08;清洗数据&#x…...

C++面向对象编程入门:从类与对象说起(一)

C语言是面向过程&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题&#xff0c;而C面向的是对象&#xff0c;关注的是对象&#xff0c;将一件事拆解成多个对象&#xff0c;靠对象之间互交完成。 目录 类的定义 类的两种定义 …...

openwrt之UCI 增删改查(add/get/set /add_list...)

1&#xff0c;引入 UCI是openwrt的统一配置接口&#xff0c;所有的配置文件被存放在/etc/config/下&#xff0c;使用UCI工具操作具体可查询官网中的开发文章&#xff1a; [OpenWrt Wiki] The UCI systemhttps://openwrt.org/docs/guide-user/base-system/uciconifg <secti…...

TypeScript 中,属性修饰符

在 TypeScript 中&#xff0c;属性修饰符&#xff08;Property Modifiers&#xff09;是用于修饰类的属性或方法的关键字&#xff0c;它们可以改变属性或方法的行为和访问权限。TypeScript 提供了三种主要的属性修饰符&#xff1a;public、private 和 protected。此外&#xff…...

LeetCode 3341.到达最后一个房间的最少时间 I:Dijkstra算法(类似深搜)-简短清晰的话描述

【LetMeFly】3341.到达最后一个房间的最少时间 I&#xff1a;Dijkstra算法&#xff08;类似深搜&#xff09;-简短清晰的话描述 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-minimum-time-to-reach-last-room-i/ 有一个地窖&#xff0c;地窖中有 n x m 个房间…...

http重新为https

1.先创建一个配置文件 主要方便实验 可以将主配置文件下的location全部注释掉&#xff0c;方便观察 2.配置新配置文件 server{ listen 80; listen 443 ssl; ssl_certificate /usr/local/nginx/conf.d/ssl/www.kgc.com.crt; ssl_certificate_key /usr/local/nginx/conf…...

2025最新免费视频号下载工具!支持Win/Mac,一键解析原画质+封面

软件介绍 适用于Windows 2025 最新5月蝴蝶视频号下载工具&#xff0c;免费使用&#xff0c;无广告且免费&#xff0c;支持对原视频和封面进行解析下载&#xff0c;亲测可用&#xff0c;现在很多工具都失效了&#xff0c;难得的几款下载视频号工具&#xff0c;大家且用且珍…...

CTF杂项入门(BUUCTF-Misc第一页)

写在前面 题目涵盖&#xff1a;BUUCTF 第一页杂项 涉及工具&#xff1a; 随波逐流、foremost、binwalk、honeyview、010editor、zipperello、archpr、wireshark、cyberchef、QR_Research、PNGCRC爆破、stegsolve、Audacity、河马、D盾、routerpassview、steghide&#xff0c;以…...

碰一碰发视频一键成片功能开发实践与技术解析

在数字化营销与内容传播领域&#xff0c;碰一碰发视频技术凭借便捷的交互体验&#xff0c;已成为实体商业引流的重要手段。而一键成片功能的融入&#xff0c;能够让用户在触碰 NFC 标签后&#xff0c;快速获取高质量的视频内容&#xff0c;进一步提升传播效率。本文将从功能需求…...

【CTFer成长之路】举足轻重的信息搜集

举足轻重的信息搜集 信息搜集 常见的搜集 题目描述: 一共3部分flag docker-compose.yml version: 3.2services:web:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-information-backk:latestports:- 80:80启动方式 docker-compose up -d 题目Flag n1book{info_…...

centos搭建dokcer和vulhub

1、换源阿里云 2、安装docker与docker-compose 下载1.29.2 docker compose sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 如果下载不了&#xff0c;可以…...

Linux系统下使用Kafka和Zookeeper

Apache Kafka 是一个分布式流处理平台,最初由 LinkedIn 开发,后来成为 Apache 软件基金会的顶级项目。它具有高吞吐量、可扩展性、持久性、容错性等特点,主要用于处理实时数据流。 Linux系统下使用Kafka 1.安装 Java Kafka 和 Zookeeper 都是基于 Java 开发的,所以需要先…...

vscode与keil的乱码不兼容问题

都用英文注释 中文注释的话&#xff0c;打开vscode的自动识别格式,如下 解决VSCode中文乱码 自动识别也可以设置识别优先级&#xff0c;把GB2312和UTF8排在自动识别序列前面(因为keil默认就是GB2312) 4.!!!在暂存更改的时候&#xff0c;不要把vscode的设置给暂存了&#xff…...

C++类和对象:构造函数、析构函数、拷贝构造函数

引言 介绍&#xff1a;C类和对象&#xff1a;构造函数、析构函数、拷贝构造函数 _涂色_博主主页 C基础专栏 一、类的默认成员函数 先认识一下类中的默认成员函数&#xff1a; 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。⼀个类…...

【FAQ】HarmonyOS SDK 闭源开放能力 — PDF Kit

1.问题描述&#xff1a; 预览PDF文件&#xff0c;文档上所描述的loadDocument接口&#xff0c;可以返回文件的状态&#xff0c;并无法实现PDF的预览&#xff0c;是否有能预览PDF相关接口&#xff1f; 解决方案&#xff1a; 1、执行loadDocument进行加载PDF文件后&#xff0c…...

Spring Boot 3 + Undertow 服务器优化配置

优化背景 当你的application需要支持瞬时高并发的时候&#xff0c;tomcat已经不在是最优的选择&#xff0c;我们可以改为Undertow&#xff0c;并对其进行优化。 Undertow 是一个轻量级的、高性能的Java Web 服务器&#xff0c;由JBoss 开发并开源。它是基于非阻塞&#xff08;…...

网易游戏 Flink 云原生实践

摘要&#xff1a;本文整理自网易游戏实时计算&数据湖平台负责人林小铂老师和网易游戏大数据开发工程师陈宇智老师&#xff0c;在Flink Forward Asia 2024 云原生专场的分享。主要分为四个部分&#xff1a; 1、背景 2、架构演进 3、实践挑战 4、总结和展望 01.背景 Flink 在…...

使用迁移学习的自动驾驶汽车信息物理系统安全策略

信息物理系统 (CPS) 是一种新兴系统,它通过信息通信基础设施,实现控制系统、传感器、执行器和周围环境等物理组件之间有效的实时通信与协作 (C&C)。自动驾驶汽车 (AV) 是大量采用 CPS 方法的领域之一,旨在通过降低能源消耗和空气污染来改善智慧城市中的人们生活。因此,…...

《算法导论(第4版)》阅读笔记:p11-p13

《算法导论(第4版)》学习第 8 天&#xff0c;p11-p13 总结&#xff0c;总计 3 页。 一、技术总结 无。 二、英语总结(生词&#xff1a;2) 1.precious (1)precious: pretium(“value, worth, price”) adj. of great value(宝贵&#xff0c;珍贵)。 (2)示例 Computing t…...

Qt 编译 sqldrivers之psql

编译postgres pgsql驱动 下载驱动源码修改配置文件编译 下载驱动源码 // 源代码下载 https://download.qt.io/archive/qt/5.15/5.15.2/submodules/驱动目录:qtbase-everywhere-src-5.15.2\src\plugins\sqldrivers 修改配置文件 打开pro文件 右键点击添加库 此处的为debu…...

查看单元测试覆盖率

文章目录 1、POM文件配置2、编写单元测试3、执行单元测试4、查看单元测试覆盖率 1、POM文件配置 pom文件配置jacoco插件 <!-- 生成JaCoCo覆盖率数据插件 --> <plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artif…...

ASP.NET Core 中实现 Markdown 渲染中间件

文章目录 前言一、核心功能二、实现步骤1&#xff09;安装依赖包2&#xff09;创建中间件类3&#xff09;中间件扩展方法4&#xff09;在Program.cs配置5&#xff09;模板文件示例6&#xff09;*.md文件示例7&#xff09;缓存优化8&#xff09;使用示例 三、注意事项总结 前言 …...

AI学习路径

一、AI入门与系统课程 &#xff08;1&#xff09;《开启AI革命&#xff1a;7天从小白到大神》 简介&#xff1a;保姆级教学&#xff0c;覆盖AI基础知识、机器学习、深度学习、自然语言处理&#xff08;NLP&#xff09;、大语言模型&#xff08;LLM&#xff09;等&#xff0c;…...