Redis scan等命令的学习与研究


摘要

背景跟前几天说的一个问题类似.
为了验证自己的设想, 所以晚上继续写脚本进行了一轮次的验证. 不过上次讨论时,打击好像都没听懂我说的
所以这次准备从基础开始讲起.
很多好东西在上来量之后可能会变成坏东西

scan 命令

Redis 在2.8 之后增加了scan命令.
其实scan命令是为了解决keys 命令一次全部键值对扫描导致的O(n)时间复杂度而来. keys zhaobsh* 会递归查寻所有的键值对, 返回前缀是 zhaobsh的键值对信息. scan 0 match zhaobsh* count 10000
scan命令仅会在count范围内的键值对进行匹配, 匹配完成后返回键值对信息. 表面上看起来scan是避免了keys 键值对全部扫描的性能损耗, 在大量key的情况下避免太大的延迟.
但是scan 是存在一个游标的.
第一次count范围内 匹配完不仅要返回配置的键值对, 还要返回下一个测试使用的游标. 所以在monitor的命令里面. SCAN 0 为特征, 是一组scan命令.
其他的都会根据scan 0 返回的游标进行递归查询, 理论上 count 10000 时, 有多少万个键值对.
就有有多少个 scan命令数(键值对数量向上取整) 我这边也进行了一定程度的学习与研究
scan 之间会插入一些命令. 通过monitor 监控 scan 非0游标之间的命令数就可以发现. 但是scan命令也是存在一个比keys 命令要差的地方
keys 会直接返回最终的结果, 命令交互也少
scan 命令会多次执行交互, 最终返回结果 scan 仅是避免了被长久的阻塞, 但是实际上他会使用更多的CPU时间和周期来进行键值对查找.

del unlink 命令

del 命令其实比较简单, 就是直接进行了一次 删除
时间复杂度也是 O(1) 但是删除命令 是需要释放内存的.
如果是一个大的key 内存清理也比较费时. 为了提高性能 redis 4.0 时增加了unlink的方法 1:del和unlink的最大区别是del是同步删除,unlink是异步删除
2:对于线上使用删除的尽量不要使用del,因为同步删除可能会造成本身服务停顿,特别是业务量特别依赖redis的服务。
3:redis的value删除之后的内存回收使用的引用计算器算法。 其实不建议进行 del del 同步删除, 尤其是 大key时会有较久的时间等待.
现在del的命令其实很多, 改成unlink 其实也有风险 这里简单做一下实验
先插入1000万key
然后在执行 1000万个unlink的处理. 查看内存情况.
插入完的情况为:
used_memory:857426752
used_memory_human:817.71M
allocator_frag_ratio:1.00
allocator_frag_bytes:3140072
注意 此时我的内存策略为:
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction 执行完 unlink的情况为:
used_memory:3216848
used_memory_human:3.07M
mem_fragmentation_ratio:19.43
mem_fragmentation_bytes:58503480 会发现会慢慢的 碎片率会慢慢的下降. 一万个 set 耗时 19秒
一万个 unlink 耗时 18秒
一万个 del 耗时 10秒

关于scan的研究

scan 会有一个间隙执行命令的操作
通过这个间隙, 可以将业务命令添加到redis进行执行.
这种情况下间隙之间执行的命令, 可以进行业务操作与处理.
但是如果scan太多, 可能导致执行命令的管道被scan命令阻塞.
出现耗时严重的问题

关于redis的时间复杂度

1. Redis在进行benchmark压测时能够发现, 可以支撑10万级别的IOPS
换算出来 10微秒执行一个命令
2. 但是我理解这个10微秒, 在redis核心进程中的时间其实很短,估计只有1微秒左右.
其他的时间其实是网络栈交互等等操作.
3. 如果scan的命令数较大,就会发现他的 slowlog 大概是每一万个key 10毫秒
如果是10000万个key 执行 keys * 的耗时为 3.35秒 scan是11秒. 时间复杂度的算法其实是很复杂的 中间有很多损耗, 没法单独进行运算和处理.

Redis scan等命令的学习与研究的更多相关文章

  1. 【Redis数据库】命令学习笔记——发布订阅、事务、脚本、连接等命令汇总

    本篇基于redis 4.0.11版本,学习发布订阅.事务.脚本.连接的相关命令. Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. 序号 ...

  2. Redis Scan命令

    原地址:https://www.cnblogs.com/tekkaman/p/4887293.html [Redis Scan命令] SCAN cursor [MATCH pattern] [COUN ...

  3. redis scan命令使用

      以前的项目中有用到redis的keys命令来获取某些key,知道看了这篇文章 https://mp.weixin.qq.com/s/SGOyGGfA6GOzxwD5S91hLw.安全起见,这次打算 ...

  4. redis scan 命令指南

    redis scan 命令指南 1. 模糊查询键值 redis 中模糊查询key有 keys,scan等,一下是一些具体用法. -- 命令用法:keys [pattern] keys name* -- ...

  5. Redis的KEYS命令引起宕机事件

    摘要: 使用 Redis 的开发者必看,吸取教训啊! 原文:Redis 的 KEYS 命令引起 RDS 数据库雪崩,RDS 发生两次宕机,造成几百万的资金损失 作者:陈浩翔 Fundebug经授权转载 ...

  6. Redis 的 KEYS 命令不能乱用啊

    KESY 命令 时间复杂度: O(N) , 假设Redis中的键名和给定的模式的长度有限的情况下,N为数据库中key的个数. Redis Keys 命令用于查找所有符合给定模式 pattern 的 k ...

  7. 关于redis的keys命令的性能问题

    KEYS pattern 查找所有符合给定模式 pattern 的 key . KEYS * 匹配数据库中所有 key . KEYS h?llo 匹配 hello , hallo 和 hxllo 等. ...

  8. Redis 入门 安装 命令

    win7 64位安装redis 及Redis Desktop Manager使用 引自:http://blog.csdn.net/joyhen/article/details/47358999 写基于 ...

  9. 虚拟机安装与Linux命令的学习 ——20155215宣言

    一.虚拟机的安装 虚拟机的安装对我来说真可谓是一波三折.打开老师发布的安装教程,简单地浏览了一下,主要步骤都有图文解说.我本来以为这个安装按部就班即可,可哪知道,问题一个接着一个出现. 问题1 在我下 ...

  10. Redis Scan迭代器遍历操作原理(一)

    Redis在2.8.0版本新增了众望所归的scan操作,从此再也不用担心敲入了keys*, 然后举起双手看着键盘等待漫长的系统卡死了··· 命令的官方介绍在这里, 中文版由huangz同学细心翻译了, ...

随机推荐

  1. LeetCode 回溯篇(46、77、78、51)

    46. 全排列 给定一个 没有重复 数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1, ...

  2. 第二部分_Shell脚本变量部分超详细解析

    Shell脚本变量部分超详细解析 变量的定义 [基本知识补充] 基本符号的意义: 脚本执行和调试方法: 1. 变量是什么? 一句话概括:变量是用来临时保存数据的,该数据是可以变化的数据. [注意] 单 ...

  3. 细说SQL与ETL之间的小秘密

    本文分享自华为云社区<GaussDB数据库SQL系列-SQL与ETL浅谈>,作者:Gauss松鼠会小助手2. 一.前言 在SQL语言中,ETL(抽取.转换和加载)是一种用于将数据从源系统抽 ...

  4. LiteAI 四大杀手锏,解锁物联网智能设备AI开发难关

    [摘要] IoT设备中嵌入AI能力实现产品的智能升级,已经是AIoT行业发展的重要通道,那怎样才能实现AIoT = AI + IoT呢?如何将AI模型塞到小小的IoT设备里,让它可以轻松运行起来呢?成 ...

  5. CutMix&Mixup详解与代码实战

    摘要:本文将通过实践案例带大家掌握CutMix&Mixup. 本文分享自华为云社区<CutMix&Mixup详解与代码实战>,作者:李长安. 引言 最近在回顾之前学到的知识 ...

  6. 懂分析、会预测,你见过这样的华为云DAS吗?

    摘要:数字化时代下,华为云数据管理服务DAS基于AI技术,于近期推出了智能SQL分析(包括慢SQL发现.SQL透视).workload级别索引推荐.存储空间预测等运维特性,加上原有的数据库运维能力,构 ...

  7. JavaScript实现:如何写出漂亮的条件表达式

    摘要:就让我们看看以下几种常见的条件表达场景,如何写的漂亮! 本文分享自华为云社区<如何写出漂亮的条件表达式 - JavaScript 实现篇>,原文作者:查尔斯. 条件表达式,是我们在c ...

  8. 火出边际的Serverless,你居然还不了解?

    摘要:图灵奖获得者David A. Patterson和Spark共同创始人Ion Stoica,在19年伯克利的会议上发布Serverless将是下一代默认的计算范式. 本文分享自华为云社区< ...

  9. ipa文件怎么安装到iPhone手机上?

    ​ ipa文件怎么安装到iPhone手机上? 无需越狱帮你把ipa文件安装到苹果手机上 E86苹果签名简介:点击可查看 很多人都知道apk文件是安卓的app应用程序文件名,但有人知道苹果ios的app ...

  10. Kubernetes(K8S) 集群安全机制

    概述 访问K8S集群,需要经过三个步骤完成具体操作 认证 鉴权(授权) 准入控制 进行访问时,过程中需要经过 ApiServer,做统一协调,比如门卫,访问过程中需要证书.token.或者用户名+密码 ...