【Redis知识】Redis进阶-redis还有哪些高级特性?
文章目录
- 概览
- 1. 持久化
- 2. 复制与高可用
- 3. 事务和脚本
- 4. 发布/订阅
- Redis事务
- 示例
- 事务中的错误处理
- 使用 `WATCH` 进行乐观锁
- 总结
- Redis管道
- 一、管道的原理
- 二、管道的特点
- 三、管道的使用场景
- 四、管道的实现示例
- 五、管道的注意事项
- 发布订阅模式
- 一、Redis发布订阅模式介绍
- 二、Redis发布订阅模式使用样例
- 相关文献
概览
Redis是一个开源的、基于内存的键值存储数据库,它支持多种数据类型,如字符串、哈希、列表、集合、有序集合等,并提供了丰富的高级特性以满足不同的应用场景需求。以下是对Redis高级特性的介绍及具体例子说明:
1. 持久化
-
RDB(Redis Database)持久化:RDB是Redis默认的持久化方式,它可以在指定的时间间隔内将内存中的数据以快照的形式保存到磁盘上。RDB持久化的优点是可以节省磁盘空间,适合用于备份和恢复数据。
- 例子:在Redis的配置文件redis.conf中,可以通过设置
save
参数来配置RDB持久化。例如,save 900 1
表示900秒内至少有1个键被修改时,执行持久化操作。
- 例子:在Redis的配置文件redis.conf中,可以通过设置
-
AOF(Append Only File)持久化:AOF持久化是将Redis的操作日志以追加的方式写入到磁盘文件中,可以保证数据的完整性和持久性。AOF持久化的优点是可以保证数据不丢失,适合用于数据恢复。
- 例子:在Redis的配置文件redis.conf中,可以通过设置
appendonly
参数来开启AOF持久化。例如,appendonly yes
表示开启AOF持久化,appendfilename "appendonly.aof"
表示AOF持久化文件的名称。
- 例子:在Redis的配置文件redis.conf中,可以通过设置
2. 复制与高可用
-
主从复制:Redis支持主从复制,允许数据在多个Redis实例之间同步,从而实现高可用性和负载均衡。
- 例子:可以配置一个Redis主节点和两个从节点,当主节点上的数据发生变化时,从节点会自动同步这些变化。
-
Redis Sentinel:Redis Sentinel是Redis的高可用性解决方案,它提供了监控、通知、自动故障转移和配置管理功能。当主节点出现故障时,Sentinel会自动选择一个从节点提升为新的主节点,并通知其他从节点和客户端更新配置。
- 例子:在C#项目中,可以使用StackExchange.Redis客户端库来连接到配置了Sentinel的Redis集群,并订阅Sentinel发布的主从切换事件。当主从切换发生时,可以更新客户端配置以确保应用程序能够继续正常工作。
3. 事务和脚本
-
事务:Redis支持事务,通过
MULTI
、EXEC
、WATCH
等命令来处理多个操作的原子性。事务中的命令要么都执行,要么都不执行。- 例子:使用
MULTI
命令开始一个事务,然后发送多个命令(如SADD
),最后使用EXEC
命令执行这些命令。如果事务中的某个命令执行失败,则整个事务都会失败,不会执行任何命令。
- 例子:使用
-
Lua脚本:Redis支持Lua脚本,允许在服务器端执行复杂的操作以提高效率。Lua脚本在Redis中是原子执行的,这意味着在脚本执行期间,其他客户端的命令不会被插入到脚本执行的过程中。
- 例子:可以使用Lua脚本来实现一个计数器功能。在脚本中,使用
redis.call('incr', KEYS[1])
命令来增加计数器的值,并返回当前的值。
- 例子:可以使用Lua脚本来实现一个计数器功能。在脚本中,使用
4. 发布/订阅
-
发布/订阅机制:Redis提供了发布/订阅机制,使得客户端可以订阅特定频道,并接收发布到这些频道的消息。这对于实时消息传递非常有用。
- 例子:一个Redis客户端可以订阅名为
channel1
的消息频道。当另一个客户端向channel1
发送消息时,订阅了该频道的客户端会接收到该消息。
- 例子:一个Redis客户端可以订阅名为
以下是具体的操作示例:
- 订阅频道:
127.0.0.1:6379> subscribe channel1
Reading messages...(press Ctrl-C to quit)
1) "subscribe"
2) "channel1"
3) (integer) 1
- 发布消息:
127.0.0.1:6379> publish channel1 hello
(integer) 1
- 接收消息:在订阅了
channel1
频道的客户端中,会接收到发布的消息:
1) "message"
2) "channel1"
3) "hello"
综上所述,Redis的高级特性为其在缓存、消息传递、实时分析等领域的应用提供了强大的支持。通过合理配置和使用这些特性,可以构建出高性能、高可用性的Redis应用。
Redis事务
Redis 事务提供了一种将多个命令打包在一起,并在一个原子操作中执行的方式。这确保了事务中的所有命令要么全部成功执行,要么全部失败(在事务期间遇到错误时会回滚)。Redis 事务主要通过 MULTI
、EXEC
、DISCARD
和 WATCH
命令来实现。
以下是 Redis 事务的基本实现步骤:
- 开始事务:使用
MULTI
命令。 - 添加命令到队列:在
MULTI
命令之后,客户端发送的所有命令都会被 Redis 服务器放入一个队列中,但不会立即执行。 - 执行事务:使用
EXEC
命令来执行队列中的所有命令。此时,所有命令会按照它们被添加到队列的顺序被原子性地执行。 - 取消事务:使用
DISCARD
命令来取消事务,并清空队列中的所有命令。
示例
以下是一个简单的 Redis 事务示例,展示了如何使用 MULTI
、EXEC
和 DISCARD
命令:
# 开始事务
redis> MULTI
OK# 添加命令到队列
redis> SET foo bar
QUEUEDredis> GET foo
QUEUED# 执行事务
redis> EXEC
1) OK
2) "bar"
在这个示例中,SET foo bar
和 GET foo
命令被打包到一个事务中,并原子性地执行。
事务中的错误处理
如果事务中的某个命令失败(例如,数据类型不匹配),Redis 会继续执行事务中的其余命令,但会返回错误。例如:
# 开始事务
redis> MULTI
OK# 添加命令到队列
redis> INCR foo # foo 是一个字符串,不是整数,所以 INCR 会失败
QUEUEDredis> GET foo
QUEUED# 执行事务
redis> EXEC
1) (error) ERR value is not an integer or out of range
2) "bar"
在这个示例中,INCR foo
命令会失败,但 GET foo
命令仍然会被执行。
使用 WATCH
进行乐观锁
WATCH
命令提供了一种乐观锁机制,用于监视一个或多个键。如果这些键在事务执行之前被修改,则事务会被中止。
# 监视一个键
redis> WATCH foo
OK# 开始事务
redis> MULTI
OK# 添加命令到队列
redis> SET foo newvalue
QUEUED# 另一个客户端修改了 foo
redis> SET foo anothervalue
OK# 尝试执行事务(会失败,因为 foo 被修改了)
redis> EXEC
(nil)
在这个示例中,因为 foo
在事务执行之前被另一个客户端修改了,所以事务被中止,EXEC
命令返回 nil
。
总结
MULTI
:开始事务。EXEC
:执行事务中的所有命令。DISCARD
:取消事务。WATCH
:监视一个或多个键,用于实现乐观锁。
通过这些命令,Redis 提供了一种简单但功能强大的事务机制,可以在多个命令之间保持数据的一致性。
Redis管道
Redis管道(Pipeline)是一种在客户端向服务端发送多个请求而不等待响应的技术,它允许客户端将多个命令一次性发送到服务器,并在一次网络通信中接收多个命令的响应,从而减少了网络通信的开销,提高了命令执行的效率。以下是关于Redis管道的详细说明:
一、管道的原理
Redis管道通过将多个命令打包成一个请求发送到服务器,服务器依次执行这些命令,并将所有结果一次性返回给客户端。这种方式减少了网络往返次数(RTT,Round Trip Time),降低了通信开销,并提高了性能和吞吐量。
二、管道的特点
- 批量执行:管道允许客户端一次性发送多个命令到服务器,从而实现批量执行命令。
- 异步通信:管道使用异步通信方式,客户端发送多个命令到服务器后,可以继续执行其他操作,而不必等待命令执行完成。但需要注意,虽然客户端可以异步发送命令,但结果通常还是需要同步获取的,以确保操作的顺序和一致性。
- 原子性(相对性):管道中的命令在服务器端是顺序执行的,但管道本身并不保证原子性。也就是说,如果管道中的某个命令失败了,后续的命令仍然会被执行。这与Redis事务中的原子性是不同的。在Redis事务中,如果某个命令失败了,整个事务都会被回滚。
三、管道的使用场景
- 数据导入导出:管道可以用于批量导入导出数据,将多个数据操作命令打包成一个请求发送到服务器,减少了网络通信的开销,提高了数据导入导出的效率。
- 数据处理:管道可以用于批量处理数据,如批量转换、过滤等操作。将多个数据处理命令打包成一个请求发送到服务器,减少了网络通信的开销,提高了数据处理的效率。
- 批量操作:管道可以用于批量执行多个操作,如批量设置键的值、批量删除键等。将多个操作命令打包成一个请求发送到服务器,减少了网络通信的开销,提高了操作的执行效率。
四、管道的实现示例
以下是一个使用Jedis客户端库实现Redis管道操作的Java示例:
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Pipeline;
import java.util.List;public class TestRedisPipeline {// Redis服务器信息private static final String REDIS_HOST = "192.168.200.141";private static final int REDIS_PORT = 6379;private static final String REDIS_PASSWORD = "yourpassword";public static void main(String[] args) {// 配置连接池JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(128); // 设置连接池最大连接数poolConfig.setMaxIdle(16); // 设置连接池中的最大空闲连接poolConfig.setMinIdle(4); // 设置连接池中的最小空闲连接poolConfig.setTestOnBorrow(true); // 从池中取出连接时,是否进行有效性检查poolConfig.setTestOnReturn(true); // 在归还连接时检查有效性JedisPool jedisPool = new JedisPool(poolConfig, REDIS_HOST, REDIS_PORT, 10000, REDIS_PASSWORD);try (Jedis jedis = jedisPool.getResource()) {// 创建管道Pipeline pipeline = jedis.pipelined();// 批量设置键值对for (int i = 0; i < 1000; i++) {pipeline.set("key" + i, "value" + i);}// 批量获取键值对for (int i = 0; i < 1000; i++) {pipeline.get("key" + i);}// 执行管道操作并获取结果List<Object> results = pipeline.syncAndReturnAll();// 处理结果for (Object result : results) {System.out.println(result);}} catch (Exception e) {e.printStackTrace();} finally {// 关闭连接池jedisPool.close();}}
}
在这个示例中,我们使用Jedis连接池来管理Redis连接,并创建了一个管道来批量设置和获取键值对。最后,我们执行管道操作并获取结果,然后处理这些结果。
五、管道的注意事项
- 合理控制命令数量:虽然管道可以批量执行多个命令,但过度使用可能导致服务器负载过高。因此,应合理控制每个管道中的命令数量,避免一次性发送过多命令。
- 错误处理:管道中的命令如果失败了,后续的命令仍然会被执行。因此,在编写管道操作时需要考虑错误处理机制,以确保数据的正确性和一致性。
- 监控服务器负载:通过监控服务器的CPU、内存和网络使用情况,可以了解管道操作对服务器负载的影响,从而进行性能调优和故障排查。
综上所述,Redis管道是一种高效的数据操作和处理机制,通过减少网络通信开销和提高命令执行效率,可以显著提升Redis的性能和可扩展性。
发布订阅模式
Redis的发布/订阅(Pub/Sub)模式是一种消息传递模式,用于实现消息发布者与消息订阅者之间的通信。以下是对Redis发布订阅模式的介绍以及使用样例:
一、Redis发布订阅模式介绍
-
基本概念:
- 频道(Channel):消息的通道或主题,发布者将消息发布到特定的频道,而订阅者可以选择订阅一个或多个频道来接收相关的消息。
- 发布者(Publisher):负责发布消息到频道的客户端,使用PUBLISH命令将消息发送到一个或多个频道。
- 订阅者(Subscriber):负责接收消息的客户端,使用SUBSCRIBE命令订阅一个或多个频道,并使用UNSUBSCRIBE命令取消订阅。
-
工作原理:
- 订阅者通过SUBSCRIBE命令订阅频道,进入订阅状态。
- 发布者通过PUBLISH命令将消息发布到指定的频道。
- Redis服务器将消息发送给所有订阅了该频道的订阅者,消息的传递是异步的。
-
高级功能:
- 模式订阅:订阅者可以使用通配符来订阅多个频道,例如SUBSCRIBE news.*将订阅以“news.”开头的所有频道。
- 取消订阅:订阅者可以使用UNSUBSCRIBE命令来取消订阅一个或多个频道,使用UNSUBSCRIBE *命令可以取消订阅所有频道。
二、Redis发布订阅模式使用样例
以下是一个简单的Redis发布订阅模式使用样例,通过两个redis-cli客户端进行演示:
-
开启Redis服务:确保本地Redis服务已经开启,并且可以通过redis-cli客户端进行连接。
-
订阅频道:
- 打开第一个redis-cli客户端,输入以下命令订阅名为“runoobChat”的频道:
SUBSCRIBE runoobChat
此时,该客户端会进入订阅状态,等待接收来自“runoobChat”频道的消息。
-
发布消息:
- 打开第二个redis-cli客户端,输入以下命令向“runoobChat”频道发布消息:
PUBLISH runoobChat "Redis PUBLISH test"
此时,第一个redis-cli客户端会收到来自“runoobChat”频道的消息:“Redis PUBLISH test”。
-
继续发布消息:
- 在第二个redis-cli客户端中,继续向“runoobChat”频道发布另一条消息:
PUBLISH runoobChat "Learn redis by runoob.com"
此时,第一个redis-cli客户端会再次收到来自“runoobChat”频道的消息:“Learn redis by runoob.com”。
-
取消订阅:
- 在第一个redis-cli客户端中,输入以下命令取消订阅“runoobChat”频道:
UNSUBSCRIBE runoobChat
此时,该客户端将退出订阅状态,不再接收来自“runoobChat”频道的消息。
通过以上样例,可以看出Redis发布订阅模式的基本工作流程和命令使用。在实际应用中,可以根据具体需求进行更复杂的配置和使用。
相关文献
分布式中间件-redis相关概念介绍
【分布式技术】关于Redis,你想了解的
【分布式知识】Redis6.x新特性了解
相关文章:

【Redis知识】Redis进阶-redis还有哪些高级特性?
文章目录 概览1. 持久化2. 复制与高可用3. 事务和脚本4. 发布/订阅 Redis事务示例事务中的错误处理使用 WATCH 进行乐观锁总结 Redis管道一、管道的原理二、管道的特点三、管道的使用场景四、管道的实现示例五、管道的注意事项 发布订阅模式一、Redis发布订阅模式介绍二、Redis…...

【Pytorch实用教程】深入了解 torchvision.models.resnet18 新旧版本的区别
深入了解 torchvision.models.resnet18 新旧版本的区别 在深度学习模型开发中,PyTorch 和 torchvision 一直是我们不可或缺的工具。近期,torchvision 对其模型加载 API 进行了更新,将旧版的 pretrained 参数替换为新的 weights 参数。本文将介绍这一变化的背景、具体区别,…...

攻防世界 - Web - Level 3 | very_easy_sql
关注这个靶场的其它相关笔记:攻防世界(XCTF) —— 靶场笔记合集-CSDN博客 0x01:考点速览 本关考察的是 SSRF 漏洞,需要我们结合 Gopher 协议利用服务端进行越权 SQL 注入。考点不少,总结一下主要有以下几点…...

使用Java Selenium修改打开页面窗口大小
在自动化测试过程中,有时需要模拟不同屏幕尺寸的用户行为,以确保网页在不同设备上的显示效果和用户体验。Selenium是一个强大的自动化测试工具,支持多种编程语言和浏览器,可以帮助我们实现这一需求。本文将详细介绍如何使用Java S…...

基于BiLSTM和随机森林回归模型的序列数据预测
本文以新冠疫情相关数据集为案例,进行新冠数量预测。(源码请留言或评论) 首先介绍相关理论概念: 序列数据特点 序列数据是人工智能和机器学习领域的重要研究对象,在多个应用领域展现出独特的特征。这种数据类型的核心特点是 元素之间的顺序至关重要 ,反映了数据内在的时…...

【Vim Masterclass 笔记04】S03L12:Vim 文本删除同步练习课 + S03L13:练习课点评
文章目录 L12 Exercise 03 - Deleting Text1 训练目标2 训练指引2.1 打开文件 practicedeleting.txt2.2 练习删除单个字符2.3 练习 motion:删除(Practice deleting motions)2.4 文本行的删除练习(Practice deleting lines…...

[AI] 深度学习的“黑箱”探索:从解释性到透明性
目录 1. 深度学习的“黑箱”问题:何为不可解释? 1.1 为什么“黑箱”问题存在? 2. 可解释性研究的现状 2.1 模型解释的方法 2.1.1 后置可解释性方法(Post-hoc Explanations) 2.1.2 内在可解释性方法(I…...

网络安全技能试题总结参考
对网络安全技能测试相关的试题进行了总结,供大家参考。 一、单选题 1.(单选题)以下属于汇聚层功能的是 A.拥有大量的接口,用于与最终用户计算机相连 B.接入安全控制 C.高速的包交换 D.复杂的路由策略 答案:D 2.(单选题)VLAN划分的方法,选择一个错误选项 A.基于端口…...

【翻译】优化加速像素着色器执行的方法
中文翻译 在回复我的 Twitter 私信时,我遇到了一个关于如何提高像素/片段着色器执行速度的问题。这是一个相当广泛的问题,具体取决于每个 GPU/平台和游戏内容的特性,但我在本帖中扩展了我“头脑风暴”式的回答,以便其他人也觉得有用。这不是一份详尽的清单,更像是一个高层…...

赛博周刊·2024年度工具精选(图片资源类)
1、EmojiSpark emoji表情包查找工具。 2、fluentui-emoji 微软开源的Fluent Emoji表情包。 3、开源Emoji库 一个开源的emoji库,目前拥有4000个emoji表情。 4、中国表情包大合集博物馆 一个专门收集中国表情包的项目,已收录5712张表情包,并…...

【深度学习基础之多尺度特征提取】多尺度图像增强(Multi-Scale Image Augmentation)是如何在深度学习网络中提取多尺度特征的?附代码
【深度学习基础之多尺度特征提取】多尺度图像增强(Multi-Scale Image Augmentation)是如何在深度学习网络中提取多尺度特征的?附代码 【深度学习基础之多尺度特征提取】多尺度图像增强(Multi-Scale Image Augmentation࿰…...

Spring Boot项目启动时显示MySQL连接数已满的错误
当Spring Boot项目启动时显示MySQL连接数已满的错误,这通常意味着应用程序尝试创建的数据库连接数超过了MySQL服务器配置的最大连接数限制。以下是一些解决此问题的步骤: 1. 检查MySQL服务器的最大连接数设置 首先,你需要检查MySQL服务器的…...

小程序多入口对应指定客服的实现方案:小程序如何实现接入指定客服人员?
小程序多入口对应指定客服的实现方案:小程序如何实现接入指定客服人员? 背景 小程序是否能接入指定客服? 近年来,小程序已经成为众多企业与用户交互的高效工具。无论是电商、服务预约还是在线咨询,客服功能的引入显…...

网页单机版五子棋小游戏项目练习-初学前端可用于练习~
今天给大家分享一个 前端练习的项目,技术使用的是 html css 和javascrpit 。希望能对于 刚刚学习前端的小伙伴一些帮助。 先看一下 实现的效果图 1. HTML(HyperText Markup Language) HTML 是构建网页的基础语言,它的主要作用是定…...

【玩转23种Java设计模式】行为型模式篇:命令模式
软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…...

【Spring MVC 常用注解】注解驱动开发的魔法
在 Spring MVC 中,注解可以说是开发者的“魔法棒”,通过简单的注解配置,开发者能够实现请求处理、参数绑定、响应返回等复杂功能,真正做到“少写代码多干活”。 我们接下来就来一起看看 Spring MVC 中常用的注解,它们的…...

jmeter分布式启动
https://www.cnblogs.com/qtclm/p/11082081.html 1、代理机:输入“ipconfig”,找到IP地址,在Jmeter/bin/jmeter.properties设置remote host 启动jmeter server 1、控制机:输入“ipconfig”,找到IP地址,在J…...

数据仓库中的指标体系模型介绍
数据仓库中的指标体系介绍 文章目录 数据仓库中的指标体系介绍前言什么是指标体系指标体系设计有哪些模型?1. 指标分层模型2. 维度模型3. 指标树模型4. KPI(关键绩效指标)模型5. 主题域模型6.平衡计分卡(BSC)模型7.数据指标框架模…...

混合合并两个pdf文件
混合两个pdf 1、在线免费交替和混合奇数和偶数PDF页面2、有什么软件把两个 PDF 交叉合并?3、pdfsam本地合并 如何Google翻译的原文和译文合并,(沉浸式翻译效果相对较好) 1、在线免费交替和混合奇数和偶数PDF页面 https://deftpd…...

aws(学习笔记第二十一课) 开发lambda应用程序
aws(学习笔记第二十一课) 开发lambda应用程序 学习内容: lambda的整体概念开发lambda应用程序 1. lambda的整体概念 借助AWS Lambda,无需预置或管理服务器即可运行代码。只需为使用的计算时间付费。借助 Lambda,可以为几乎任何类型的应用进…...

JavaWeb Servlet的getInitParameter、业务层、控制反转IOC和依赖注入DI
目录 1. Servlet的getInitParameter2. 业务层3. 控制反转IOC和依赖注入DI3.1 背景3.2 实现如下3.3 原理 1. Servlet的getInitParameter Servlet有两个getInitParameter 一个是servletContext.getInitParameter,获取context-param的全局参数一个是servletConfig.ge…...

免费开源跨平台SSH工具 WindTerm:媲美 xshell 的最佳平替(含详细使用教程)
免费开源跨平台SSH工具 WindTerm WindTerm概述免费开源、免费开源、免费开源下载、安装WindTerm 屏幕截图WindTerm 主窗口 (zsh):WindTerm 拆分视图:WindTerm DigeWhite 主题: WindTerm 基本设置使用WindTerm连接到服务…...

洛谷 P1075 [NOIP2012 普及组] 质因数分解 C语言
题目: P1075 [NOIP2012 普及组] 质因数分解 - 洛谷 | 计算机科学教育新生态 题目描述 已知正整数 n 是两个不同的质数的乘积,试求出两者中较大的那个质数。 输入格式 输入一个正整数 n。 输出格式 输出一个正整数 p,即较大的那个质数。…...

Apache Hive常见问题
入门问题 什么是Apache Hive? 解释Hive的用途。Hive作为基于Hadoop的数据仓库工具是如何工作的?与传统关系型数据库相比,使用Hive有什么优势? Hive和关系型数据库管理系统(RDBMS)之间的区别是什么&#…...

活动报名系统源码:JAVA同城服务系统活动报名同城圈子商家商城城市代理躲猫猫
JAVA同城服务系统:打造多元化社交与娱乐新体验 在数字化时代,同城服务系统已成为连接城市生活的重要桥梁。我们精心打造的JAVA同城服务系统,不仅融合了活动报名、同城圈子、商家商城、城市代理等多重功能,还特别加入了创新的“躲…...

迈向Z级计算:Cloud4Science范式加速科学发现进程
传统超级计算机作为科学计算的核心支柱,在推动技术进步方面发挥了不可替代的作用,但随着科学智能时代下需求的多样化和复杂化,其扩展性和能效的局限逐渐显现。 针对这一挑战, 微软亚洲研究院 的研究员提出了 Cloud4Science 的新范…...

ES IK分词字典热更新
前言 在使用IK分词器的时候,发现官方默认的分词不满足我们的需求,那么有没有方法可以自定义字典呢? 官方提供了三种方式 一、ik本地文件读取方式 k插件本来已为用户提供自定义词典扩展功能,只要修改配给文件即可: …...

Mac连接云服务器工具推荐
文章目录 前言步骤1. 下载2. 安装3. 常用插件安装4. 连接ssh测试5. 连接sftp测试注意:ssh和sftp的区别注意:不同文件传输的区别解决SSL自动退出 前言 Royal TSX是什么: Royal TSX 是一款跨平台的远程桌面和连接管理工具,专为 mac…...

从零开始:如何在 .NET Core 中优雅地读取和管理配置文件
在.net中的配置文件系统支持丰富的配置源,包括文件(json、xml、ini等)、注册表、环境变量、命令行、Azure Key Vault等,还可以配置自定义配置源并跟踪配置的改变,然后按照优先级进行覆盖,总之对文件的配置有很多方法,这…...

JVM学习:CMS和G1收集器浅析
总框架 一、Java自动内存管理基础 1、运行时数据区 运行时数据区可分为线程隔离和线程共享两个维度,垃圾回收主要是针对堆内存进行回收 (1)线程隔离 程序计数器 虚拟机多线程是通过线程轮流切换、分配处理器执行时间来实现的。为了线程切换…...