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

有关做橡胶品的网站杭州营销策划有限公司

有关做橡胶品的网站,杭州营销策划有限公司,dedecms 调用网站名称,pc端百度Redis的KEYS和SCAN指令都可以用于在数据库中搜索匹配指定模式的键。然而#xff0c;它们之间有一些关键的区别#xff1b; KEYS指令会在整个数据库中阻塞地执行匹配操作#xff0c;并返回匹配的键列表。如果数据库很大#xff0c;或者匹配的键很多#xff0c;将会对性能产… Redis的KEYS和SCAN指令都可以用于在数据库中搜索匹配指定模式的键。然而它们之间有一些关键的区别 KEYS指令会在整个数据库中阻塞地执行匹配操作并返回匹配的键列表。如果数据库很大或者匹配的键很多将会对性能产生负面影响。而SCAN指令通过游标的方式逐步迭代数据库每次返回一小部分匹配的键不会阻塞数据库可以在不影响其它操作的情况下进行遍历。 KEYS指令会返回匹配的键列表这可能会导致返回的结果集很大可能会占用大量的内存。而SCAN指令每次返回一小部分匹配的键并通过游标来迭代可以有效的处理大型结果集。 一个对springboot redis框架进行重写支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK dependencygroupIdio.github.mingyang66/groupIdartifactIdemily-spring-boot-redis/artifactIdversion4.4.0/version /dependencyGitHub地址https://github.com/mingyang66/spring-parent 一、基于SCAN指令批量查询TTL永久有效的lua脚本 -- 游标位置 local cursor tonumber(ARGV[1]) -- 一次查询出的数量 local count tonumber(ARGV[2]) -- 匹配模式 local pattern * -- SCAN cursor [MATCH pattern] [COUNT count] 迭代数据库中的数据库键 local value redis.call(SCAN, cursor, MATCH, pattern, COUNT, count) -- 下次循环的游标 local nextCursor value[1] -- 当前批次的数据 local data value[2] -- 符合条件的数据集合 local result {} for i, key in ipairs(data) do-- 查询键对应过期时间local ttl redis.call(TTL, key)if ttl -1 thentable.insert(result, key)end end return { nextCursor, result } 二、基于spring data redis调用lua脚本通过游标批量获取数据 /*** param redisTemplate redis 模板工具类* return TTL为-1的键集合列表*/public static ListString ttlScanKeys(RedisTemplate redisTemplate, long count) {try {if (StringUtils.isEmpty(LUA_SCRIPT_TTL_SCAN_KEYS)) {LUA_SCRIPT_TTL_SCAN_KEYS getLuaScript(META-INF/scripts/ttl_scan_keys.lua);}RedisScriptList script RedisScript.of(LUA_SCRIPT_TTL_SCAN_KEYS, List.class);ListString result new ArrayList();long cursor 0;do {ListObject list (ListObject) redisTemplate.execute(script, SerializationUtils.jackson2JsonRedisSerializer(), SerializationUtils.stringSerializer(), null, cursor, count);// 游标cursor Long.valueOf(list.get(0).toString());// 符合条件的键值result.addAll(JsonUtils.toJavaBean(JsonUtils.toJSONString(list.get(1)), List.class, String.class));} while (cursor ! 0);return result;} catch (Exception ex) {BaseLogger baseLogger BaseLoggerBuilder.create().withSystemNumber(SystemNumberHelper.getSystemNumber()).withTraceId(UUIDUtils.randomSimpleUUID()).withClientIp(RequestUtils.getClientIp()).withServerIp(RequestUtils.getServerIp()).withTriggerTime(DateConvertUtils.format(LocalDateTime.now(), DatePatternInfo.YYYY_MM_DD_HH_MM_SS_SSS)).withUrl(Redis).withRequestParams(count, count).withBody(PrintExceptionInfo.printErrorInfo(ex.getCause())).build();logger.info(JsonUtils.toJSONString(baseLogger));return Collections.emptyList();}}三、调用lua脚本控制器 GetMapping(ttlBatch)public ListString batch() {return LuaScriptTools.ttlScanKeys(redisTemplate, 100);}四、redis scan指令批量获取指定数量数据集为啥有微小浮动 当使用Redis的SCAN指令进行迭代时返回的数据量可能会有微小的浮动。这是因为SCAN指令的迭代器在每次迭代时会根据当前键的分布情况来确定返回的键的数据。 Redis使用一种称为游标cursor的概念来迭代键空间。游标是一个指示迭代状态的无符号64位整数它标识了迭代器在键空间中的位置。在每次迭代时Redis会根据游标的位置扫描一小部分键并返回给客户端。 由于Redis是一个并发数据库可能会有其他客户端在迭代过程中对数据库进行修改。这些修改可能会导致迭代器在下一次迭代时返回不同数量的键。例如如果在迭代期间有新的键被添加到数据库那么在下一次迭代时迭代器可能会返回更多的键。相反如果在迭代期间有键被删除那么迭代器可能会返回更少的键。 Redis的SCAN指令每次返回的数据量可能会有微小的浮动这是由键的分布和并发操作的影响造成的。
http://www.hkea.cn/news/14573911/

相关文章:

  • 高水平的大连网站建设wordpress手机号登陆
  • 厦门建设网站的自己创网站
  • 网站结构的类型做家居商城网站
  • 淘客怎么用网站做怎样自学设计室内装修效果图
  • 手机网站 百度推广网贷代理推广
  • 怎么做网站赚钱徐州招聘网站哪个好
  • 深圳市宝安区做网站建设的企业wordpress代码编写
  • 室内设计网站大全免费成都航空公司官方网站
  • 全面的郑州网站建设网站设计网页版
  • 网站没排名的原因最新一轮阳性症状
  • 网站开发基于百度地图漳州微网站建设哪家好
  • 音乐门户网站模板网络营销核心要素
  • 福田网站建设费用明细广州开发区第一小学
  • 辽宁建设厅证件查询网站wordpress禁止右键
  • 辽阳企业网站建设服务最全的百度网盘搜索引擎
  • 网页设计的交流网站做推广都有哪些网站
  • 建网站多少钱建个网站需要怎么做wordpress添加媒体在角落
  • 无极门户网站中信建设有限责任公司工会
  • 网站备案有什么用西安航空城建设发展集团网站
  • 旅游商业网站策划书昆山网站建设哪家好
  • 网站结构有哪些类型开发公司绩效考核
  • 公司网站建设模块简介搜索广告是什么
  • 江西赣州网站wordpress主题不显示小工具
  • 哪个网站查企业信息免费百度网站首页入口
  • 网站设计对网站搜索引擎友好性的影响做优惠网站多少钱
  • 做网站的那些高清图上哪里找外网浏览网站
  • 建立网站要钱吗电子商务网站建设与运营
  • 网站建设的核心是什么湖南省建设厅网站首页
  • 网站描述代码怎么写互联网营销师课程
  • html怎么做音乐网站游戏网站建设策划方案模板