Redis知识应用索引指南

Redis,全称为Remote Dictionary Server,是一个开源的高性能键值对数据库。它以其卓越的性能、丰富的数据结构和灵活的持久化机制,在现代应用中扮演着至关重要的角色

1 什么是redis

Redis是一个使用ANSI C语言编写的开源、跨平台的键值存储系统。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,因此也被称为数据结构服务器。Redis提供丰富的语言API,可以轻松集成到各种应用程序中。

2 Redis的应用场景

  • 缓存: Redis最常见的应用场景之一是作为缓存系统,用于减少数据库的访问压力,提高应用的响应速度。将热点数据放到内存中,设置内存的最大使用量以及过期淘汰策略来保证缓存的命中率。
  • 计数器与排行榜:  Redis的有序集合非常适合实现排行榜功能,而其原子递增操作则适用于计数器场景,如社交网络中的点赞和评论数。
  • 应用限流: 限制一个网站访问流量。
  • 消息队列: 利用Redis的列表数据结构,可以实现一个简单的消息队列系统,用于处理异步任务和消息传递。使用 List 数据类型,它是双向链表。
  • 交集运算: 使用 SET 类型,例如求两个用户的共同好友。
  • 分布式Session: 多个应用服务器的 Session 都存储到 Redis 中来保证 Session 的一致性。
  • 分布式锁: 在分布式系统中,Redis可以用于实现分布式锁,以保证操作的原子性和一致性。 除了可以使用 SETNX 实现分布式锁之外,还可以使用官方提供的 RedLock 分布式锁实现。

3 Redis的数据类型

Redis支持五种基本数据类型,每种类型都有其独特的操作命令:

  • 字符串(String):简单的键值对,适合存储简单的数据。
  • 哈希(Hash):键值对集合,适合存储对象。
  • 列表(List):有序集合,支持从两端推入和弹出元素。
  • 集合(Set):无序集合,自动去重。
  • 有序集合(Sorted Set):与集合类似,但每个元素关联一个分数,可以进行范围查询

Redis 高级数据类型:BitMap、HyperLogLog、GEO

4. Redis 的优势

  • 高速性能:Redis 基于内存操作,读写速度快,能够达到极高的吞吐量。支持数据的快速访问,通常可以达到每秒数十万次的读写操作。

  • 数据持久化:支持 RDB(快照)和 AOF(追加文件)两种持久化方式,确保数据的安全性。RDB 通过创建数据快照来持久化数据,而 AOF 记录每次写操作,可以提供更好的数据恢复。

  • 丰富的数据结构:支持字符串、列表、集合、有序集合、散列等多种数据结构。这些数据结构使得 Redis 可以灵活地用于缓存、消息队列、排行榜、实时分析等多种场景。

  • 原子操作:Redis 支持原子性的单个操作,也支持事务,可以一次执行多个命令,保证操作的原子性。

  • 主从复制:支持主从复制,可以实现数据的冗余和高可用性。从服务器可以提供读操作,分散主服务器的读请求压力。

  • 高可用性:通过哨兵系统(Sentinel)或集群模式(Cluster),Redis 可以实现自动故障转移和数据分片。

  • 横向扩展:Redis 支持集群模式,可以跨多个节点进行数据分片,实现水平扩展。

  • 丰富的客户端库:支持多种编程语言的客户端库,如 Python、Java、C#、Node.js 等,方便开发者集成使用。

  • Lua 脚本:支持在服务器端执行 Lua 脚本,可以编写复杂的逻辑,减少网络往返,提高性能。

  • 发布/订阅功能:支持发布/订阅模式,可以用于实现消息队列和事件通知。

  • 灵活的内存管理:支持内存淘汰策略,如 LRU(最近最少使用)、LFU(最不频繁使用)等,以适应不同的应用场景。

  • 易于管理:提供简单的配置和监控工具,使得 Redis 的部署和管理变得相对容易。

  • 安全性:支持通过 SSL/TLS 加密数据传输,保护数据安全。

  • 多用途:除了作为数据库使用,Redis 还可以作为缓存、消息代理、排行榜系统等多种用途。

5. Redis为什么快

Redis 单机 QPS 能达到 100000。

Redis 是单线程模型(Redis 6.0 已经支持多线程模型),为什么还能有这么高的并发?

  • Redis 完全基于内存操作。
  • Redis 数据结构简单。
  • 采用单线程,避免线程上下文切换和竞争。
  • 使用 I/O 多路复用模型(非阻塞 I/O)

I/O 多路复用

I/O 多路复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。

6. Redis 持久化

Redis的持久化机制是确保数据安全性和可靠性的关键特性,它允许将内存中的数据异步地保存到磁盘上,以便在Redis服务器重启后能够恢复数据。Redis提供了两种主要的持久化方式:RDB(快照)和AOF(追加文件),以及它们的混合持久化方式。

RDB持久化是通过创建数据的快照来实现的。在指定的时间间隔内,Redis会将内存中的数据集快照保存到磁盘上的二进制文件中。这个快照文件非常紧凑,适合用于数据备份和灾难恢复。

AOF持久化记录了所有的写操作命令,并以追加的方式保存到文件中。当Redis重启时,会重新执行这些命令来恢复数据。

Redis 4.0引入了混合持久化方式,它结合了RDB和AOF的优点。在这种模式下,AOF文件的开始部分是RDB数据的二进制dump,紧接着是追加的AOF命令。这样,即使在AOF文件中只有部分命令被执行,也可以通过RDB部分快速恢复数据,然后执行AOF部分的命令来恢复到最新状态。

总的来说,选择哪种持久化方式取决于你的具体需求,包括你对数据安全性的要求、性能考虑以及存储空间的可用性。

7 Redis内存淘汰机制

Redis的内存淘汰机制是其内存管理的重要组成部分,它能够在内存使用达到上限时,自动选择并删除一些数据以腾出空间。

7.1 过期时间

Redis 过期时间是一种重要的功能,它允许你为存储在 Redis 中的数据设置一个过期时间(Time To Live,TTL)。当数据过期后,Redis 会自动删除这些数据,从而释放内存空间。过期时间对于缓存实现、限制数据存活时间、实现计数器等功能非常有用

可以使用 EXPIRE 或 EXPIREAT,PEXPIRE 和 PEXPIREAT 来为 key 设置过期时间,查询键的剩余过期时间TTL与PTTL

当键被设置为过期时,Redis 不会立即删除该键,而是在某个时刻的定时任务中检查并删除。如果你尝试为一个已经设置了过期时间的键再次设置过期时间,Redis 会更新该键的过期时间

7.2 淘汰策略

内存淘汰只是 Redis 提供的一个功能,为了更好地实现这个功能,必须为不同的应用场景提供不同的策略,内存淘汰策略讲的是为实现内存淘汰我们具体怎么做,要解决的问题包括淘汰键空间如何选择?在键空间中淘汰键如何选择?

Redis 提供了下面几种内存淘汰策略供用户选:

  • noeviction - 当内存使用达到阈值的时候,所有引起申请内存的命令会报错。这是 Redis 默认的策略。
  • allkeys-lru - 在主键空间中,优先移除最近未使用的 key。
  • allkeys-random - 在主键空间中,随机移除某个 key。
  • volatile-lru - 在设置了过期时间的键空间中,优先移除最近未使用的 key。
  • volatile-random - 在设置了过期时间的键空间中,随机移除某个 key。
  • volatile-ttl - 在设置了过期时间的键空间中,具有更早过期时间的 key 优先移除。

选择淘汰策略

  • 如果数据呈现幂等分布(存在热点数据,部分数据访问频率高,部分数据访问频率低),则使用 allkeys-lru。
  • 如果数据呈现平等分布(数据访问频率大致相同),则使用 allkeys-random。
  • 如果希望使用不同的 TTL 值向 Redis 提示哪些 key 更适合被淘汰,请使用 volatile-ttl。
  • volatile-lru 和 volatile-random 适合既应用于缓存和又应用于持久化存储的场景,然而我们也可以通过使用两个 Redis 实例来达到相同的效果。
  • 将 key 设置过期时间实际上会消耗更多的内存,因此建议使用 allkeys-lru 策略从而更有效率的使用内存。
     

8 Redis 事务

Redis 事务是一种用于将多个命令打包在一起执行的功能,它可以确保这些命令要么全部执行,要么全部不执行,从而维护数据的一致性。Redis 的事务是原子性的,但不是完全隔离的。这意味着在一个事务中的命令在执行过程中不会被其他客户端发送的命令插入,但其他客户端仍然可以读取事务执行期间的数据。

事务相关的命令:MULTI 、 EXEC 、 DISCARD 、WATCH。

9 Redis 管道

Redis 管道(Pipeline)是一种优化网络往返时间(Round-Trip Time, RTT)的技术,它允许客户端一次发送多个命令给 Redis 服务器,而不需要等待每个命令的响应。这样可以显著减少网络延迟带来的影响,提高操作效率。

在传统的请求/响应模型中,客户端向服务器发送一个命令,然后等待服务器的响应。如果客户端需要执行多个命令,它必须为每个命令重复这个过程,这会导致多次网络往返,从而增加延迟。使用管道时,客户端可以将多个命令打包在一起,然后一次性发送给服务器。服务器接收到这些命令后,会依次执行它们,并将所有响应一次性返回给客户端 。这种方式减少了网络请求的数量,从而降低了由于网络延迟带来的总体延迟

10 Redis 发布与订阅

Redis 的发布与订阅(Pub/Sub)是一种消息通信模式,允许客户端订阅频道以接收消息,或者发布消息到频道供其他客户端接收。这种模式非常适合实现消息队列、通知系统、实时通信等应用场景。

基本概念:

  • 发布者(Publisher):发送消息到频道的客户端。
  • 订阅者(Subscriber):监听频道并接收发布到该频道的消息的客户端。
  • 频道(Channel):消息传递的目的地,可以有多个订阅者。
  • 模式(Pattern):用于匹配多个频道的一种特殊字符,允许订阅者订阅多个频道

使用场景主要涉及实时通知系统,如聊天应用、新闻推送等。消息队列系统,用于任务分发和异步处理等

11 Redis 复制

Redis复制是一种强大的功能,它允许你将一个Redis服务器的数据自动复制到其他服务器。这不仅可以用于数据备份,还可以用于提高读取操作的可扩展性。

主服务器(Master):包含最新数据的服务器,处理写操作

从服务器(Slave):接收主服务器数据的服务器,通常用于处理读操作

其特点:Redis复制是异步的,这意味着主服务器在执行写操作后不会等待从服务器的确认响应。这有助于提高主服务器的性能;在大多数情况下,从服务器的数据最终会与主服务器保持一致。通过将读操作分配给从服务器,可以提高系统的读取吞吐量,同时主服务器专注于处理写操作

Redis复制是构建可扩展、高可用Redis系统的基础,通过合理的配置和管理,可以有效地提高系统的性能和可靠性

12 Redis 哨兵

Redis Sentinel 是 Redis 的高可用性解决方案,由一个或多个 Sentinel 实例组成,用于监控 Redis 主从复制系统的运行状态。

Sentinel 可以监控多个 Redis 节点,自动检测主节点是否下线,并在主节点下线时进行自动故障转移。Sentinel 还提供了客户端与 Redis 节点之间的服务发现和配置更新功能,客户端可以通过 Sentinel 来获取当前的主节点信息,从而实现无缝的故障转移。

Sentinel 的主要功能包括监控、提醒、自动故障转移和配置提供者。它通过执行定期的健康检查来确保 Redis 节点的正常运行,当主节点出现故障时,Sentinel 会通过一系列流程来选举新的主节点,并更新从节点的配置。

此外,Sentinel 还支持通过订阅频道来接收故障转移和其他重要事件的通知。为了确保高可用性,建议至少部署三个 Sentinel 实例,并且它们应该分布在不同的物理或虚拟机上。配置 Sentinel 时,需要修改 Redis 和 Sentinel 的配置文件,指定监控的主节点信息、端口设置等,并启动 Sentinel 实例。

在故障转移过程中,Sentinel 会负责更新客户端的配置,确保客户端能够连接到新的主节点。Redis Sentinel 的引入,为 Redis 提供了强大的高可用性和故障恢复能力,是构建稳定、可靠的 Redis 服务的关键组件。
 

13 Redis 集群

Redis 集群是 Redis 的分布式解决方案,旨在提供线性扩展和高可用性,通过将数据自动分割到多个节点来提供数据分片功能,同时利用复制和故障转移机制保证数据的安全性和可用性。

在 Redis 集群中,数据被分成了多个槽(slot),每个槽可以被分配到集群中的任意节点上,每个节点可以包含多个槽,但一个槽只能被分配给一个节点。集群中的每个节点负责处理一部分数据,当客户端请求到达时,集群会根据请求的键被哈希到哪个槽来决定将请求路由到哪个节点。

Redis 集群支持主从复制,每个主节点可以有一个或多个从节点,当主节点发生故障时,集群会自动进行故障转移,选举新的主节点来接管原主节点负责的槽。

Redis 集群还提供了数据持久化的选项,可以配置每个节点的 RDB 或 AOF 持久化策略,确保数据的安全性。

集群的高可用性是通过哨兵系统来实现的,哨兵会监控集群中的每个节点,当发现主节点下线时,会自动开始故障转移流程。

Redis 集群还支持在线重配置,可以在不停止服务的情况下添加或移除节点,重新分配槽,实现集群的动态调整。客户端可以通过集群模式的 Redis 客户端库来与集群交互,客户端库会自动处理请求的路由和故障转移,使得开发者可以像使用单节点 Redis 一样使用集群。

Redis 集群的引入,为处理大规模数据集和高并发访问提供了强大的支持,是构建高性能分布式系统的有力工具。

14 知识链接

Redis 主从复制_redis主从复制-CSDN博客文章浏览阅读1.7k次,点赞17次,收藏9次。从节点(slave)内部通过每秒运行的定时任务维护复制相关逻辑,当定时任务发现存在新的主节点后,会尝试与该节点建立网络连接,如果从节点无法建立连接,定时任务会无限重试直到连接成功或者执行 slaveof no one 取消复制,关于连接失败,可以在从节点执行 info replication 查看 master_link_down_since_seconds 指标,它会记录与主节点连接失败的系统时间。在命令传播阶段,主节点除了将写命令发送给从节点,还会发送一份给复制积压缓冲区,作为写命令的备份;_redis主从复制https://blog.csdn.net/ddf128/article/details/142312394Redis哨兵机制_redis 哨兵机智-CSDN博客文章浏览阅读1.1k次,点赞22次,收藏18次。哨兵,英文名 Sentinel,是一个分布式系统,用于对主从结构中的每一台服务器进行监控,当主节点出现故障后通过投票机制来挑选新的主节点,并且将所有的从节点连接到新的主节点上。Redis Sentinel 包含若干个 Sentinel 节点和 Redis 数据节点,每个 Sentinel 节点会对数据节点和其余 Sentinel 节点进行监控,当它发现节点不可达时,会对节点做下线标识。_redis 哨兵机智https://blog.csdn.net/ddf128/article/details/142307215Redis集群知识及实战_redis集群实战-CSDN博客文章浏览阅读2.2k次,点赞43次,收藏17次。Redis 集群是一种提供自动数据分片、高可用性和线性扩展性的数据存储解决方案,可以将数据自动分配到多个节点上,这种分布式存储的方式称为分片(sharding)。这样可以使得数据存储的容量和处理能力随着节点的增加而扩展,如果某个节点发生故障,集群可以自动将请求重定向到健康的节点,从而保证服务的连续性和数据的可用性。Redis 集群支持读写分离,Redis 集群提供了自动化的节点管理功能,包括自动故障检测、自动故障转移和自动重新分片等,随着业务的增长,Redis 集群可以通过增加更多的节点来扩展其处理能力和存_redis集群实战https://blog.csdn.net/ddf128/article/details/142368943

Redis基本命令详解_redis查询key的值命令-CSDN博客文章浏览阅读1.5k次,点赞10次,收藏19次。Redis(Remote Dictionary Server)是一个开源的高性能键值对(Key-Value)数据库。它通常用作数据结构服务器,因为除了基本的字符串键值对存储之外,它还支持列表、集合、有序集合、散列、位图、超日志和地理空间索引半径查询等复杂的数据结构。Redis 以其卓越的性能、高可靠性和灵活性而闻名,被广泛用于各种应用场景。笔记记录了redis的常见操作命令,以备以后查用。_redis查询key的值命令https://blog.csdn.net/ddf128/article/details/142395813

Redis配置文件详解_redis 配置文件详解-CSDN博客文章浏览阅读828次,点赞7次,收藏2次。Redis(Remote Dictionary Server)是一个开源的高性能键值对(Key-Value)数据库。它通常用作数据结构服务器,因为除了基本的字符串键值对存储之外,它还支持列表、集合、有序集合、散列、位图、超日志和地理空间索引半径查询等复杂的数据结构。Redis 以其卓越的性能、高可靠性和灵活性而闻名,被广泛用于各种应用场景。笔记记录了redis的常见操作命令,以备以后查用。_redis 配置文件详解https://blog.csdn.net/ddf128/article/details/142422344Redis发布和订阅_redis-py pubsub()只取最新的消息-CSDN博客文章浏览阅读912次,点赞20次,收藏13次。Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者(sub) 接收消息 可以实现进程间的消息传递。这种模式非常适用于实时消息传递、事件通知和消息分发等场景Redis可以实现消息中间件MQ的功能,通过发布订阅实现消息的引导和分流。但是目前不推荐使用该功能,专业的事情交给专业的中间件处理,redis就做好分布式缓存功能Redis 客户端可以订阅任意数量的频道_redis-py pubsub()只取最新的消息https://blog.csdn.net/ddf128/article/details/142434774Redis事务总结-CSDN博客文章浏览阅读1k次,点赞23次,收藏17次。Redis 事务是一个用于将多个命令打包在一起执行的功能,它可以确保这些命令按照顺序执行,并且具有原子性。这意味着事务中的命令要么全部执行,要么全部不执行,这有助于保持数据的一致性。Redis 事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行过程的中,会按照顺序执行!一次性、顺序性、排他性!执行一些列的命令!Redis事务没有隔离级别的概念!所有的命令在事务中,并没有直接被执行!只有发起执行命令的时候才会执行!ExecRedis单条命令式保存原子性的,但是事务不保证原子性!Redis _redis事务https://blog.csdn.net/ddf128/article/details/142466893Redis数据持久化总结笔记_数据库状态所需的最少命令集-CSDN博客文章浏览阅读841次,点赞31次,收藏13次。Redis数据持久化是确保Redis中数据不因服务器故障而丢失的重要机制。Redis提供了两种主要的数据持久化方法:RDB和AOF,以及它们的混合持久化。RDB持久化是通过创建数据快照的方式,将某一时刻的数据集保存到硬盘上的RDB文件中。AOF持久化则是记录每次写操作命令并追加到AOF文件中。混合持久化是Redis 4.0引入的新特性,它结合了RDB和AOF的优点。在数据恢复时可以先通过RDB文件快速恢复大部分数据,然后通过AOF文件恢复快照之后的数据变更,从而加快了数据恢复速度并减少了数据丢失的风险_数据库状态所需的最少命令集https://blog.csdn.net/ddf128/article/details/142468573

15 最后

感谢大家,请大家多多支持!
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu18开启ssh服务

本部分主要是记述下如何打开ubuntu的ssh功能,从而可以以ssh的方式远程连接ubuntu,而不需要每次都在现场工作。 1. 更新源 $ apt update [sudo apt update] 2. 下载openssh-server # sudo apt install openssh-server 3. 看下服务状态 # service s…

[C#][winform]基于yolov8的道路交通事故检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面

【重要说明】 该系统以opencvsharp作图像处理,onnxruntime做推理引擎,使用CPU进行推理,适合有显卡或者没有显卡windows x64系统均可,不支持macOS和Linux系统,不支持x86的windows操作系统。由于采用CPU推理,要比GPU慢。…

kafka自定义配置信息踩坑

org.apache.kafka.common.config.ConfigException: Invalid value 0 for configuration acks: Expected value to be a string, but it was a java.lang.Integer 场景描述: 单个kafka使用springboot框架自带的 yml 配置完全OK(因为底层会帮我们处理好类…

重学SpringBoot3-集成Spring Security(一)

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Spring Security(一) 1. 简介与概念2. 基础配置2.1. 添加依赖2.1 基本认证与授权配置 3. 密码加密3.1. 如何加密用户密码3.2…

区块链技术在网络安全中的应用研究

摘要: 随着网络技术的快速发展,网络安全问题日益凸显。区块链技术以其去中心化、不可篡改、可追溯等特性,为网络安全提供了新的解决方案。本文深入探讨了区块链技术在网络安全多个领域的应用,包括数据加密与存储、身份认证、网络攻…

Linux 防火墙的开启、关闭、禁用命令

Linux 防火墙的开启、关闭、禁用命令 文章目录 Linux 防火墙的开启、关闭、禁用命令1.设置开机启用防火墙2.设置开机禁用防火墙3.启动防火墙4.关闭防火墙5.检查防火墙状态 1.设置开机启用防火墙 systemctl enable firewalld.service2.设置开机禁用防火墙 systemctl disable f…

算法: 模拟题目练习

文章目录 模拟替换所有的问号提莫攻击Z 字形变换外观数列数青蛙 总结 模拟 替换所有的问号 按照题目的要求写代码即可~ public String modifyString(String ss) {int n ss.length();if (n 1) {return "a";}char[] s ss.toCharArray();for (int i 0; i < n; i…

大数据治理--数据生命周期管理

目录 ​编辑一、数据生命周期阶段 1.1 数据生命周期的定义 1.2 数据生命周期的主要阶段 1.2.1 创建&#xff08;Creation&#xff09; 1.2.2 存储&#xff08;Storage&#xff09; 1.2.3 使用&#xff08;Usage&#xff09; 1.2.4 归档&#xff08;Archiving&#xff09…

概率图模型中的模型推断

文章目录 摘要Abstract1. 概率图模型1.1 模型推断概念1.2 模型推断分类1.2.1 变量消去1.2.2 信念传播1.2.3 近似推断1.2.3.1 采样法1.2.3.1.1 MCMC(马尔可夫链蒙特卡罗)方法 1.2.3.2 变分推断 1.3 话题模型1.3.1 LDA的基本单元1.3.2 话题模型的构成1.3.3 LDA的基本问题1.3.3.1 …

Threejs 实现3D 地图(01)创建基本场景

"d3": "^7.9.0", "three": "^0.169.0", "vue": "^3.5.10" <script setup> import { onMounted,ref } from vue import * as THREE from three import * as d3 from "d3"; //莫开托坐标 矫正地图…

快速上手C语言【下】(非常详细!!!)

目录 1. 指针 1.1 指针是什么 1.2 指针类型 1.2.1 指针-整数 1.2.2 指针解引用 1.3 const修饰 1.4 字符指针 1.5 指针-指针 1.6 二级指针 2. 数组 2.1 定义和初始化 2.2 下标引用操作符[ ] 2.3 二维数组 2.4 终极测试 3. 函数 3.1 声明和定义 3.2 传值调用…

解锁文本数据可视化的无限可能:Wordcloud库全解析

文章目录 **&#x1f31f;解锁文本数据可视化的无限可能&#xff1a;Wordcloud库全解析&#x1f510;**1. **背景介绍**2. **Wordcloud库是什么&#xff1f;**3. **如何安装Wordcloud库&#xff1f;**4. **Wordcloud库的基本函数使用方法**5. **实际应用场景**6. **常见问题及解…

JavaScript:闭包、防抖与节流

一&#xff0c;闭包 1&#xff0c;什么是闭包 闭包是指一个函数和其周围的词法环境(lexical environment)的组合。 换句话说&#xff0c;闭包允许一个函数访问并操作函数外部的变量。 闭包的核心特性: 函数内部可以访问外部函数的变量即使外部函数已经返回&#xff0c;内部…

(AtCoder Beginner Contest 375)B - Traveling Takahashi Problem

&#xff08;AtCoder Beginner Contest 375&#xff09;B - Traveling Takahashi Problem 题目大意 按顺序给定n个点 ( x i , y i ) (x_i,y_i) (xi​,yi​) 求按顺序走过这n个点并回到原点的总距离 任意两点之间的距离是欧几里得距离 思路 按照题意模拟即可&#xff0c;时间…

Cisco软件基础使用

‘地址还未设置’在交换机的CIL中输入enable进入特权模式&#xff0c;输入config t 进入设置 设置进入特权模式的密码和登录的密码 为交换机设置IP地址 未设置地址前显示如下。 下图设置进入特权模式的密码123456 &#xff0c;远程访问登录密码cisco。 exit退一步进入interfa…

cefsharp63.0.3(Chromium 63.0.3239.132)支持H264视频播放-PDF预览 老版本回顾系列体验

一、版本 版本:Cef 63/CefSharp63.0.3/Chromium63.0.3239.132/支持H264/支持PDF预览 支持PDF预览和H264推荐版本 63/79/84/88/100/111/125 <

免费字体二次贩卖;刮刮乐模拟器;小报童 | 生活周刊 #4

Raycast 的两款在线工具 Raycast 公司出品&#xff0c;必属精品&#xff0c;之前的代码转图片工具&#xff0c;交互和颜值都做得很漂亮 现在又新出了一个 图标制作器&#xff0c;一键制作美观好看的图标 猫啃网 没想到像【汇文明朝体】这样免费的字体都被人拿来当成【打字机字…

Gin框架操作指南03:HTML渲染

官方文档地址&#xff08;中文&#xff09;&#xff1a;https://gin-gonic.com/zh-cn/docs/ 注&#xff1a;本教程采用工作区机制&#xff0c;所以一个项目下载了Gin框架&#xff0c;其余项目就无需重复下载&#xff0c;想了解的读者可阅读第一节&#xff1a;Gin操作指南&#…

2024 “源鲁杯“ Round[1] web部分

Disal 打开页面没有有用信息&#xff0c;查看robots.txt发现f1ag.php&#xff0c;访问查看源代码&#xff1a; &#xfeff;<?php show_source(__FILE__); include("flag_is_so_beautiful.php"); $a$_POST[a]; $keypreg_match(/[a-zA-Z]{6}/,$a); $b$_REQUEST[…

【2024最新版】网络安全学习路线-适合入门小白

首先说明&#xff0c;我是一名CTF的web手&#xff0c;这是我自己亲身学习网络安全的路线&#xff0c;希望能够帮到大家&#xff0c;我虽然不是大牛&#xff0c;但我也希望能够帮助一些网安小白找到自己学习的方向&#xff0c;后面有就业的详细安全技术要求&#xff0c;如果真想…