写点什么

Redis 4.0 鲜为人知的功能将加速您的应用程序

  • 2019-12-09
  • 本文字数:1685 字

    阅读完需:约 6 分钟

Redis 4.0 鲜为人知的功能将加速您的应用程序

Redis 4.0 给 Redis 生态带来了一个惊人的功能:Modules(模块)。Modules 是 Redis 的一大转变,它是 Redis 内部自定义数据类型和全速计算的开放环境。但是,尽管对该版本的大多数关注都集中在 Modules 上,但新版本还引入了一个非常重要的命令,它就是游戏规则的改变者:UNLINK。


您可以使用 redis-cli 连接 redis-server 执行 info 命令,去查看当前 redis 版本中是否可以使用 UNLINK 命令。info 响应将告诉您有关服务器的所有信息。在第一部分(#Server)中,返回结果有一行值为 redis_version。如果该值大于 4.0,则可以使用 UNLINK 命令。并非所有 Redis 提供商都保持最新版本,因此最好在更改代码之前检查 redis 版本。


让我们回顾一下 Redis 的关键架构功能之一:“单线程”。Redis 在大多数情况下是一个单线程应用程序。它一次只做一件事,这样可以把这些事做的更快。多线程有点复杂,并且引入了锁和其他可能降低应用程序速度的问题。尽管 Redis(最高 4.0 版)通过多线程方式执行了少量操作,但它通常在启动另一个命令之前先要完成一个命令。


相比于快速读写,您可能会觉得使用 DEL 命令去删除一个键值不需要考虑太多,但是在很多情况下,删除数据同样很重要。与 Redis 中的大多数命令一样,DEL 命令在单个线程中运行,如果您获取一个几千字节的键值,花费不到一毫秒的时间,这是您所感知不到的。然而,当您获取的键值大小是兆字节、100 兆字节或者 500 兆字节会发生什么呢?哈希、排序、列表等数据结构会随着时间的推移而添加更多的数据进去,这样会生成一个数 GB 大小的数据集。然后用 DEL 命令去删除大 Key 时会发生什么呢?由于 Redis 是单线程操作的,处理这种请求时整个服务都处于等待中,需要等待该命令执行完成才能执行其它操作。同时,我们考虑更复杂的一种场景,这些键中保存的数据可能已经包含数以千万个微小请求,因此应用程序或操作员可能无法真正了解删除这些数据需要花费多长时间。


理智会告诉我们不要在拥有 100 万元素的排序集上运行如下这样的命令:


> ZRANGE some-zset 0 -1
复制代码


但是,在上面的 some-zset 集合中执行 DEL 命令将花费和上面一样的时间-中间没有传输开销,但是它会一直去分配内存,而且您会一直卡死在 CPU 繁忙中。在使用 UNLINK 之前,您可能会结合 SCAN 命令采用非原子性的方法进行一些少量删除,去避免这种持续分配内存的噩梦。上面无论使用哪种方式,都是让人无法接受的。


您可能已经猜到了,就是使用 UNLINK 命令来替换 DEL!从语法上讲,UNLINK 与 DEL 相同,但 UNLINK 提供了更为理想的解决方案。首先,它将键值从整个键值空间中删除。然后,在另一个线程中,它开始回收内存。从多线程的角度来看,这是一种安全的操作,因为它(在主线程中)从键空间中删除了该项,从而使 Redis 其它命令无法访问。


如果你有一个快速增长的键值-不管键值的大小如何,UNLINK 都是 O(1)操作(每个键;在主线程中)。使用 DEL 删除一个大值可能需要几百毫秒或更长时间,而 UNLINK 将在不到一毫秒的时间内完成(包括网络往返)。当然,您的服务器仍将需要花一些时间在另一个线程中重新分配该值的内存(其中的工作是 O(N),其中 N 是已删除值的分配数),但是主线程的性能不会被另一个线程中正在进行的操作严重影响到。


因此,您是否应该用 UNLINK 命令替换代码中的所有 DEL 命令?当然,在少数情况下,DEL 正是您所需要的。这里我可以想到两点:


1、 在 MULTI / EXEC 或 pipeline 中,在添加和删除大值时 DEL 命令是一种理想选择。在这种情况下,UNLINK 不会立即释放空间,并且在处理繁忙的情况下(如果内存已满),您可能会遇到麻烦。


2、 在更紧急的情况下,在无快速响应驱逐数据下您可以写入数据。


在没有极端内存限制的理想环境中,很难想到不使用 UNLINK 的情况。UNLINK 将提供更一致的行为,总体上具有更好的性能,并且代码更改非常小(如果可以在客户端中重命名命令,则无需更改)。如果 UNLINK 适合您的应用程序,请就此将您的 DEL 更改为 UNLINK,然后查看它的性能提高。


本文转载自公众号中间件小哥(ID:huawei_kevin)。


原文链接:


https://mp.weixin.qq.com/s/4odHzLpzMK0F0eQ7nFATGw


2019-12-09 16:452768

评论

发布
暂无评论
发现更多内容

点燃你的Python技能:剖析闭包与装饰器的魔力

测吧(北京)科技有限公司

测试

React和Vue的有何不同?

伤感汤姆布利柏

用Python实现高效数据记录!Web自动化技术助你告别重复劳动!

测吧(北京)科技有限公司

测试

从零开始:编写个性化的 Spring Boot 启动 Banner

Liam

Java 程序员 DevOps Spring Boot 后端

【新手快速入门】在线快速搭建AI原生应用

AI大咚咚

unitypro安装教程 Unity Pro 2018 Mac破解版下载安装

南屿

Unity Pro 2019 Unity Pro 安装教程 3D游戏动画开发工具

CQ 社区版 2.8.0 | 支持TiDB、StarRocks,新增列过滤算法、导出模式设置等

BinTools图尔兹

数据库 数据库管理 数据脱敏 数据变更

BOE(京东方)与JDG京东电竞俱乐部达成全面品牌战略合作 赋能多款高端电竞新品开启2024电竞产业“开门红”

科技热闻

【2024最新版】Sapphire视觉特效插件功能介绍 附蓝宝石插件破解补丁

南屿

视觉特效插件 Boris FX Sapphire 蓝宝石插件

矩阵起源通过2023年“专精特新”中小企业认定!

MatrixOrigin

云原生 数据库· 分布式数据库 Matrixone

FTM 暴跌23% — 除了价格下跌之外还有什么?

Footprint Analytics

区块链 Token 代币 FTM

和鲸CEO范向伟入选2022年上海市东方英才计划创业项目领军创业人才

ModelWhale

人工智能 创业 AI 东方英才 前沿产业

从零开始用Rust编写nginx,命令行参数的设计与解析及说明

不在线第一只蜗牛

nginx rust 开发语言

wolframmathematica14激活密钥 mathematica mac破解安装教程

南屿

Wolfram Mathematica下载 Wolfram Mathematica密钥 Mathematica 14新功能 数学软件Mac版

哪里有BricsCAD中文版资源?最新2024版BricsCAD破解中文 for Mac安装包

南屿

CAD设计软件 BricsCAD 24破解版 BricsCAD 24下载

livehome3dpro破解版 Mac室内设计软件 中文版Live Home 3D Pro下载

南屿

Mac软件 3D家庭室内设计工具 装修设计 livehome3dpro破解版

测试管理 | 测试开发高薪私教线下班手把手带你提升职业技能

测吧(北京)科技有限公司

测试

如何实现一个百万亿规模的时序数据库,百度智能云 BTS 架构解析和实践分享

Baidu AICLOUD

时序数据库

聚焦AI4S,产学研专家齐聚,探讨AI工具在多领域应用的现状与趋势

ModelWhale

​比特币大跌的 2 个原因

TechubNews

良心推荐!五个超好用的Vue3工具

伤感汤姆布利柏

一分钟带你搞定MySQL5.5安装教程

小魏写代码

zbrush2024新功能介绍 含zbrush2024下载破解资源

南屿

ZBrush 2024新功能 zbrush2024破解版 zbrush2024下载 zbrush雕刻

共话 AI for Science | 北京大学王超名:BrainPy,迈向数字化大脑的计算基础设施

ModelWhale

人工智能 AI 脑科学 AI4S 类脑智能

MCtalk·CEO对话 x 高成资本丨2024年,SaaS 还是不是一门好生意?

ToB行业头条

矩阵起源荣获《2023大数据产业年度国产化优秀代表厂商》

MatrixOrigin

云原生 分布式, 数据库· 分布式数据库 Matrixone

云上业务一键性能调优,应用程序性能诊断工具 Btune 上线

Baidu AICLOUD

性能优化 运维监控

指标平台详解(上):为什么有了 BI ,还需要指标平台?

Aloudata

BI 指标体系 ETL BI 分析工具 指标中台

Redis 4.0 鲜为人知的功能将加速您的应用程序_文化 & 方法_中间件小哥_InfoQ精选文章