天翼云
searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Redis集群之scan命令

分布式缓存服务Redis版
2022-12-06 04:35:29
496
0

一、背景

在生产业务中,有时需要从海量的key中获取带有特定前缀的key,那么如何获取这些特定的key呢?开源Redis提供了简单粗暴的方法—keys命令,通过keys [pattern] 可以列出满足正则字符串的所有key。

虽说简单粗暴,但是同样存在的问题也不可小嘘,keys采用的算法是遍历算法,时间复杂度O(n),大家都知道,redis是单线程的,如果该条keys [pattern]命令获取的是上千万的级别的数据,那么其他执行就会被阻塞,直到该条命令执行完成!

针对keys存在的缺点,redis引入了scan指令,相对于keys命令来说,具备以下几个优势:

  • 时间复杂度也是O(n), 分游标进行,不会阻塞线程
  • 提供了limit参数,可以控制每次返回的最大条数

目前开源的redis标准库的scan遍历指令只支持标准版的redis数据库,集群版使用scan指令时不支持全局遍历。那么集群版如何做到支持全局遍历呢?

 

二、Redis标准库中的scan命令

首先介绍一下redis标准库中的scan,该指令的使用方法为:SCAN cursor [pattern] [count]

 

  • cursor:游标,表示结果集合中的特定位置。范围0-18446744073709551616 ,最大长度为20。每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。服务器返回0则表示迭代过程结束。
  • pattern:可选参数,类似正则表达式的查询条件。
  • count:可选参数,返回符合条件的最大值。

                                                  

                                                                         图1  redis的存储结构

其实Redis中的key都是存储在一个很大的字典中,类似于hashMap,一维数组,二维链表,如图1所示。执行SCAN cursor [pattern] [count] 返回的游标就是第一维数组的位置索引,这个索引位置也称为槽(slot),而limit则表示要遍历的槽位数。在遍历的过程中返回的结果可能有多有少,这是因为不是每一个槽位上都存在数据,每一次遍历会将槽位上所有链表元素进行模式匹配过滤后返回给客户端。

 

三、Redis集群的scan命令

如果是redis集群模式,就不能用普通的单节点redis的scan方式扫描了,那么集群版该如何支持scan命令呢?可以针对cursor做一些变化设计:

在redis数据库中,一个db存储在一个数组中,cursor就是表达数组的下标位置。一般数据库中的单节点记录数很少大于10亿(11位),因此cursor的最大值远大于存储中实际用到的值。因此在集群版中的scan中,可以让cursor 表达可分为两部分,第一部分为n位数表示的集群节点序号,第二部分为m位数表示的单节点的数组下标,N为集群节点数, 且n + m = 20,n = floor( log10(N))+1, floor即取整。

例如:对于16节点的Redis集群实例,n = floor( log10(16)) + 1 = 2, m = 18,

如果cursor=06000000000000010000,即表示节点6下标10000。如此完全兼容开源标准库。

同时pattern、count参数和Redis标准库中的scan命令用法一样,保持不变。

 

具体流程为:

                                                     

 

 

 

 

0条评论
0 / 1000
w****n
12文章数
1粉丝数
w****n
12 文章 | 1 粉丝
Ta的热门文章 查看更多
redis缓存穿透,缓存击穿,缓存雪崩 Access保障Redis cluster服务在某些不可恢复场景下的高可用机制 关于redis内存碎片分析 redis惰性删除策略机制 Redis配置文件之bind配置实践
  • 7*24小时售后
  • 无忧退款
  • 免费备案
  • 专家服务
售前咨询热线
400-810-9889转1
  • 天翼云APP
    天翼云APP
  • 天翼云微信公众号
    微信公众号
热门产品
  • 云电脑
  • 弹性云主机
  • 云电脑政企版
  • 天翼云手机
  • 云数据库
  • 对象存储
  • 云硬盘
  • Web应用防火墙
  • 服务器安全卫士
  • 天翼云办公
热门推荐
  • 云服务备份
  • 边缘安全加速平台
  • 全站加速
  • 安全加速
  • 云服务器
  • 云主机
  • 智能边缘云
  • 应用编排服务
  • 微服务引擎
  • 共享流量包
更多推荐
  • web应用防火墙
  • 密钥管理
  • 等保咨询
  • 安全专区
  • 应用运维管理
  • 云日志服务
  • 云网融合
  • 云搜索服务
  • 数据湖探索
  • 数据仓库服务
友情链接
  • 中国电信集团
  • 189邮箱
  • 天翼企业云盘
  • 天翼云盘

聚圣源尚字起名鼠年用安字起名拼搏精神既什么又什么造句起个游戏名字好听点的论语十则中的成语给旅游团起个名字永字派起名神雕侠侣刘德华秘密访客到底讲了什么过年的诗句有哪些朱姓男孩起名余杭南湖熙起名阴阳师赤舌哪里多给小孩子起名HairyWomen聚宝盆在线观看兵临城下电影下载天真无邪的意思给书房起名字理由100字2016年12月23日古希腊罗马神话农村信用社网上银行粉刷匠儿歌免费按生辰八字起名打分免费期货软件金刚狼4nba马刺vs热火总决赛化妆品店铺起名字大全集淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化