当前位置: 首页 > news >正文

网站漂浮图片网站注销

网站漂浮图片,网站注销,wordpress 采集伪原创,贸易网站建设序言 网上看到的面试题:Redis有1亿个key,其中10w个key是以某个固定的前缀开头,如何将它们全部找出来?一般有两种命令可以实现: Keys命令Scan命令 下面具体分析一下两种命令 Keys命令 Keys pattern如下图所示&…

序言

网上看到的面试题:Redis有1亿个key,其中10w个key是以某个固定的前缀开头,如何将它们全部找出来?一般有两种命令可以实现:

  • Keys命令
  • Scan命令

下面具体分析一下两种命令

Keys命令

Keys pattern

如下图所示,建了一些不同数据结构(String、Hash、List、Set、ZSet)的Key,使用命令找出前缀为prefix的Key(key区分大小写),
在这里插入图片描述

  • 时间复杂度O(n);
  • 笔记本电脑40毫秒内可以查100w个键值对;
  • 生产环境慎用,大型数据库上执行会影响性能;

那么在大型数据库场景下为什么不能使用该命令呢?

Keys命令是一个阻塞式操作。

  • 单线程模型:Redis的命令处理是基于单线程的。一个命令在执行时,其他所有客户端的请求都必须等待;
  • 全量遍历:Keys为了找出所有匹配的key,会遍历数据库(NoSQL)中所有的key,遍历完成之前,Redis无法处理任何其他命令。
  • 生产环境灾难:如果正在有1亿个key的实例上执行Keys命令,会导致Redis服务卡顿数十秒甚至数分钟,所有依赖Redis的业务都会出现超时和雪崩,会导致严重的生产事故。

Scan命令

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

在这里插入图片描述

  • 单次调用时间复杂度O(1),完整迭代时间复杂度O(n);所以单次调用不会长时间阻塞线上服务;
  • 非阻塞式(渐进式)迭代:该命令允许增量迭代,每次调用返回少量数据,然后返回一个游标(cursor),下次传入这个游标,Redis就会接着上次结束的地方继续扫描,如上图scan xxx match prefix* count 3每次返回的游标不一定按照顺序;
  • COUNT参数:COUNT是一个建议值,告诉Redis希望每次迭代返回大约多少个key。但不是精确的,有时多有时少,但是可以控制单次扫描的粒度。如上图scan xxx match prefix* count 3每次返回的数据量不一定都是3;

参看官网,相关的还有其他的一些扫描指令:

  • SSCAN:iterates elements of Sets types.(针对Set数据结构)
  • HSCAN:iterates fields of Hash types and their associated values.(针对Hash数据结构)
  • ZSCAN:iterates elements of Sorted Set types and their associated scores.(针对ZSet数据结构)

在这里插入图片描述

实际操作

实际项目中可能会通过python脚本或者LUA脚本去执行查找,下面是使用python代码去执行的示例代码,

import redisr = redis.Redis(host='localhost', port=6379)
cursor = 0
prefix = 'your_prefix:*'
found_keys = []while True:cursor, keys = r.scan(cursor, match=prefix, count=10000)found_keys.extend(keys)if cursor == 0:break

可以使用Lua脚本在Redis服务器端直接处理,减少网络往返:

local keys = redis.call('SCAN', ARGV[1], 'MATCH', ARGV[2], 'COUNT', ARGV[3])
return keys

其他思路

空间换时间

在这里插入图片描述

另外维护一个“索引”:

  • 创建Key时,将key添加到前缀索引的Set集合中;
  • 查找Key时,直接读取索引Set的所有成员,这样时间复杂度即使是O(n),遍历的也是10w数据,而非NoSQL数据库中的1亿条数据;
  • 删除时,除了删除原始key,还需要从索引Set中移除对应的成员;

从节点(Replica)执行

假设这是一个低频且用于离线分析的需求,并且不想修改现有的数据结构,可以考虑在Redis集群(主从、哨兵、集群模式)的从节点去执行SCAN命令操作(甚至Keys命令),避免长时间耗时影响主节点(Master)的正常读写。
在这里插入图片描述

http://www.dtcms.com/a/401965.html

相关文章:

  • 系统网站哪个好影视后期行业前景
  • 内蒙古工程建设网站网页的建设流程怎么确定
  • 淘宝网站链接怎么做要郑州网站开发工程师
  • 网站开发 翻译wordpress专题功能
  • 网站建设公司专业公司排名做网站要学什么c语言
  • 怎样买空间做网站正邦设计有限公司
  • 电商运营和网站运营对比关键词推广seo怎么优化
  • 宁波高端模板建站wordpress配置ftp服务器配置
  • 专业做球赛旅游的网站哪个网站是专门为建设方服务的
  • 网站后台管理系统权限东莞精推网络科技有限公司
  • 论坛类网站开发电商平台的运营模式
  • 网站前台模板下载开发工具怎么使用
  • 网站建设公司推广网站品牌运营wordpress会员时间
  • 贵阳h5网站建设电脑游戏网页
  • 广西营销型网站建设公司上海网站的优化公司
  • 网站备案是 备案空间吗咖啡厅网站建设
  • 做分析图地图网站游戏网址大全有哪些
  • js 网站开发哪里有永久免费建站
  • 举报网站建设情况石家庄建设信息网必须交费吗
  • 网站开发属于什么大学专业网站建设算入会计分录
  • 怎么做简易网站网页设计心得体会2篇
  • app开发与网站开发网站建设 浏览器兼容
  • 广州专业网站改版哪家好企业网站建设网站优化
  • 广州网站建设 名片制作 网站管理自助建站自己要做网站的来看下
  • 旅行社网站建设方案论文个人阿里云账号可以做网站备案
  • 国外免费做网站软件响应式网站用什么工具做
  • 手机网站 好处建设部网站上怎样查询企业业绩
  • php网站开发发展趋势518机械加工网
  • 来安县城乡规划建设局网站重庆市城乡建设施工安全管理总站网站
  • 网站的美观性诸城 建设外贸网站