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

北京seo业务员网站seo资讯

北京seo业务员,网站seo资讯,哈尔滨哪里做网站好,lnmp命令安装wordpressRedis的KEYS和SCAN指令都可以用于在数据库中搜索匹配指定模式的键。然而,它们之间有一些关键的区别; KEYS指令会在整个数据库中阻塞地执行匹配操作,并返回匹配的键列表。如果数据库很大,或者匹配的键很多,将会对性能产…

Redis的KEYS和SCAN指令都可以用于在数据库中搜索匹配指定模式的键。然而,它们之间有一些关键的区别;

KEYS指令会在整个数据库中阻塞地执行匹配操作,并返回匹配的键列表。如果数据库很大,或者匹配的键很多,将会对性能产生负面影响。而SCAN指令通过游标的方式逐步迭代数据库,每次返回一小部分匹配的键,不会阻塞数据库,可以在不影响其它操作的情况下进行遍历。

KEYS指令会返回匹配的键列表,这可能会导致返回的结果集很大,可能会占用大量的内存。而SCAN指令每次返回一小部分匹配的键,并通过游标来迭代,可以有效的处理大型结果集。

一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

<dependency><groupId>io.github.mingyang66</groupId><artifactId>emily-spring-boot-redis</artifactId><version>4.4.0</version>
</dependency>

GitHub地址: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 List<String> 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");}RedisScript<List> script = RedisScript.of(LUA_SCRIPT_TTL_SCAN_KEYS, List.class);List<String> result = new ArrayList<>();long cursor = 0;do {List<Object> list = (List<Object>) 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 List<String> batch() {return LuaScriptTools.ttlScanKeys(redisTemplate, 100);}
四、redis scan指令批量获取指定数量数据集为啥有微小浮动

当使用Redis的SCAN指令进行迭代时,返回的数据量可能会有微小的浮动。这是因为SCAN指令的迭代器在每次迭代时会根据当前键的分布情况来确定返回的键的数据。

Redis使用一种称为游标(cursor)的概念来迭代键空间。游标是一个指示迭代状态的无符号64位整数,它标识了迭代器在键空间中的位置。在每次迭代时,Redis会根据游标的位置扫描一小部分键,并返回给客户端。

由于Redis是一个并发数据库,可能会有其他客户端在迭代过程中对数据库进行修改。这些修改可能会导致迭代器在下一次迭代时返回不同数量的键。例如,如果在迭代期间有新的键被添加到数据库,那么在下一次迭代时,迭代器可能会返回更多的键。相反,如果在迭代期间有键被删除,那么迭代器可能会返回更少的键。

Redis的SCAN指令每次返回的数据量可能会有微小的浮动,这是由键的分布和并发操作的影响造成的。

http://www.qdjiajiao.com/news/1388.html

相关文章:

  • 如何查看一个网站用什么程序做的怎么做好推广和营销
  • 信誉好的永州网站建设seo神器
  • 资兴市住房和城乡建设局网站东莞百度seo
  • 电脑手机网站首页外链发布网站
  • 凡科网站建设怎么去掉极速建站黄页推广
  • 网站漂浮物怎么做武汉seo网络营销推广
  • 标签化网站网站服务器多少钱一年
  • 做创意礼品定制的网站对网络推广的理解
  • 石家庄seo公司关键词优化心得
  • 李洋网络做网站怎么样域名买卖交易平台
  • 国外效果超炫网站汽车品牌推广策划方案
  • 运营seo是什么意思开鲁网站seo
  • 做视频网站要什么格式深圳网站建设运营
  • 做优惠券网站需要淘宝哪些接口google图片搜索
  • 没有备案的网站使用微信营销策划书
  • 正规seo需要多少钱东莞企业网站排名优化
  • 成熟的网站怎么做seo推广企业营销型网站
  • 网站建设服务协议书今天新闻联播
  • wordpress识图工具专业搜索引擎seo服务商
  • 百度收录网站名营业推广案例
  • 设计企业公司网站搜索引擎广告的优缺点
  • 山东建设和城乡建设厅注册中心网站首页如何宣传推广
  • 兰州最好的网站建设公司广州seo好找工作吗
  • wordpress 在线客服代码seo快速软件
  • 怎样建立企业网站武汉网站排名推广
  • 仿163源码商城网网站模板交易平台源码整站打包企排排官网
  • 网站管理员登录入口品牌营销策划机构
  • 上海网站制作优化百度指数查询排行榜
  • 济源哪里做网站网站设计与制作毕业论文范文
  • 建站技术博客线上营销