常用redis-lua脚本

REDIS控制台

1. 进入控制台

E:\soft\Redis-x64-5.0.14.1\redis-cli.exe -h 127.0.0.1 -p 6379 -a password

常用redis-lua脚本

在REDIS控制台输入

1. 查询以xxx为前缀的key的数量

local prefix = ARGV[1]
local keys = redis.call('KEYS', prefix .. '*')
return #keys
对应EVAL脚本,可直接在控制台执行
EVAL "local prefix = ARGV[1] local keys = redis.call('KEYS', prefix .. '*') return #keys" 0 "xxx"

2. 用于在 Redis 中统计具有相同前缀(前n个字符)的键名的数量

local cursor = '0'
local allKeys = {}
repeatlocal result = redis.call('SCAN', cursor, 'MATCH', '*', 'COUNT', '1000')cursor = result[1]local keys = result[2]for _, key in ipairs(keys) dotable.insert(allKeys, key)end
until cursor == '0'local groups = {}
for _, key in ipairs(allKeys) do-- 前6个字符local prefix = string.sub(key, 1, 6)if not groups[prefix] thengroups[prefix] = 1elsegroups[prefix] = groups[prefix] + 1end
endlocal result = {}
for prefix, count in pairs(groups) dotable.insert(result, { prefix = prefix, count = count })
endtable.sort(result, function(a, b)return a.count > b.count
end)local sortedResult = {}
for _, item in ipairs(result) dotable.insert(sortedResult, item.prefix .. ':' .. item.count)
endreturn sortedResult
对应EVAL脚本,可直接在控制台执行
EVAL "local cursor='0';local allKeys={};repeat local result=redis.call('SCAN',cursor,'MATCH','*','COUNT','1000');cursor=result[1];local keys=result[2];for _,key in ipairs(keys) do table.insert(allKeys,key) end;until cursor=='0';local groups={};for _,key in ipairs(allKeys) do local prefix=string.sub(key,1,6);if not groups[prefix] then groups[prefix]=1 else groups[prefix]=groups[prefix]+1 end end;local result={};for prefix,count in pairs(groups) do table.insert(result,{prefix=prefix,count=count}) end;table.sort(result,function(a,b) return a.count>b.count end);local sortedResult={};for _,item in ipairs(result) do table.insert(sortedResult,item.prefix..':'..item.count) end;return sortedResult;" 0

3. 用于在 Redis 中统计具有相同前缀(前n个字符)的键名的数量,可控制查询db,目前0-15

-- 要查询的db数
local numDbs = 16
local result = {}
-- 查询db起
for db = 0, numDbs - 1 doredis.call('SELECT', db)local cursor = '0'local groups = {}repeatlocal scanResult = redis.call('SCAN', cursor, 'MATCH', '*', 'COUNT', '1000')cursor = scanResult[1]local keys = scanResult[2]for _, key in ipairs(keys) do-- 前6个字符local prefix = string.sub(key, 1, 6)if not groups[prefix] thengroups[prefix] = { count = 1, db = db }elsegroups[prefix].count = groups[prefix].count + 1endenduntil cursor == '0'local tempResult = {}-- 将每个前缀的信息存储到临时表中for prefix, data in pairs(groups) dotable.insert(tempResult, { prefix = prefix, count = data.count, db = data.db })end-- 按照数量从大到小排序table.sort(tempResult, function(a, b) return a.count > b.count end)-- 将排序后的结果插入到最终结果中for _, data in ipairs(tempResult) dotable.insert(result, data.prefix .. ': ' .. data.count .. ' (DB: ' .. data.db .. ')')end
endreturn result
对应EVAL脚本,可直接在控制台执行
EVAL "local numDbs=16 local result={} for db=0,numDbs-1 do redis.call('SELECT',db) local cursor='0' local groups={} repeat local scanResult=redis.call('SCAN',cursor,'MATCH','*','COUNT','1000') cursor=scanResult[1] local keys=scanResult[2] for _,key in ipairs(keys)do local prefix=string.sub(key,1,6) if not groups[prefix]then groups[prefix]={count=1,db=db}else groups[prefix].count=groups[prefix].count+1 end end until cursor=='0' local tempResult={} for prefix,data in pairs(groups)do table.insert(tempResult,{prefix=prefix,count=data.count,db=data.db})end table.sort(tempResult,function(a,b)return a.count>b.count end)for _,data in ipairs(tempResult)do table.insert(result,data.prefix..': '..data.count..' (DB: '..data.db..')')end end return result" 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/110311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全是什么?一文认识网络安全

一、网络安全 1.概念 网络安全从其本质上讲就是网络上的信息安全,指网络系统的硬件、软件及数据受到保护。不遭受破坏、更改、泄露,系统可靠正常地运行,网络服务不中断。 (1)基本特征 网络安全根据其本质的界定&#…

JS 数组 splice 用法

JS数组的 splice() 方法是用于向/从数组中添加/删除元素。它的语法如下: array.splice(start, deleteCount, item1, item2, ...)其中, start:从该索引开始修改数组(从0开始计数)。如果索引为负数,则从倒数…

C++ 配置VSCode开发环境

C配置VSCode开发环境 简介 Visual Studio Code (VSCode) 是一款开源的轻量级代码编辑器。它支持许多编程语言,包括C。本文档将详细介绍如何在Windows环境下配置VSCode的C开发环境。 安装步骤 1. 安装Visual Studio Code 首先,你需要下载并安装Visua…

Git构建分布式版本控制系统

一、版本控制 1、概念: 版本控制(Version Control),也被称为版本管理、源代码管理或代码控制,是一种系统和工具,用于跟踪和管理文件、数据或源代码的不同版本和历史记录,在软件开发、文档管理…

jdbc设置StatementTimeout后还需要设置socket timeout参数吗

背景 我们设置JDBC参数时,不管有没有在Statement中配置超时时间StatementTimeout,我们都需要配置jdbc的socket timeout参数,那么为什么这个socket timeout参数如此必要,不设置又会怎么样? 问题真相 首先设置了State…

【Linux笔记】Linux基础权限

【Linux笔记】Linux基础权限 一、Linux权限的概念1.1、Linux中一切皆文件1.2、文件访问者的分类1.3、、Linux中的“用户白名单” 二、文件访问权限的修改2.1、权限的增加和减少的基础方法2.2、以八进制数修改权限 三、用户身份的修改3.1、修改文件的拥有者3.2、修改文件的所属组…

【VSCode】Windows环境下,VSCode 搭建 cmake 编译环境(通过配置文件配置)

除了之前的使用 VSCode 插件来编译工程外,我们也可以使用配置文件来编译cmake工程,主要依赖 launch.json 和 tasks.json 文件。 目录 一、下载编译器 1、下载 Windows GCC 2、选择编译器路径 二、配置 debug 环境 1、配置 lauch.json 文件 2、配置…

10.17课上(七段显示器,递归异或与电路)

异或的递归与数电实现 用二选一选择器实现异或函数 在异或当中,如果有一项为0,就可以把那一项消掉;如果有一项为1,就是把剩下的所有项运算完的结果取反 (由此在算法当中可以采用递归解决) 当w1为0时&…

百度文心一言 4.0 :如何申请百度文心一言 4.0

本心、输入输出、结果 文章目录 百度文心一言 4.0 :如何申请百度文心一言 4.0前言文心一言 4.0 ERNIE-Bot 4.0 :ERNIE-Bot 4.0 大模型深度测试体验报告如何申请千帆大模型试用百度文心一言 4.0 主要功能介绍配套发布的十余款AI原生应用插件、API 生态 百…

Python办公自动化完全指南(免费PDF)

Python办公自动化可以显著提速办公流程。通过自动执行那些重复繁琐又耗时的任务,大家可以把更多时间用在策略性和有创造性的工作上。 为了帮助大家更好地掌握如何将Python应用于办公自动化,我们整理了100个基本概念,让学习变得更轻松。 学习内…

C++项目实战——基于多设计模式下的同步异步日志系统-⑩-异步缓冲区类与异步工作器类设计

文章目录 专栏导读异步缓冲区设计思想异步缓冲区类设计异步工作器类设计异步日志器设计异步缓冲区类整理异步工作器类整理 专栏导读 🌸作者简介:花想云 ,在读本科生一枚,C/C领域新星创作者,新星计划导师,阿…

[java进阶]——IO流,递归实现多级文件拷贝

🌈键盘敲烂,年薪30万🌈 目录 一、认识IO流 二、了解编码与解码 二、IO流体系 三、字节输入输出流 四、字符输入输出流 五、多级文件拷贝 一、认识IO流 IO流也叫输入流(intput)、输出流(onput),该流就像java程序同硬盘之间的…

2024年申报国自然项目基金撰写及技巧

随着社会经济发展和科技进步,基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题,具备突破性的科学思路和方法。因此,基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合,形成多学科交叉…

第0章:怎么入手tensorflow

近年来人工智能的火爆吸引了很多人,网上相关的热门课程报名的人很多,但是坚持下去的人却少。那些晦涩的原理没有一定知识的积累很难能理解。 如果你对人工智能感兴趣,且想利用人工智能去实现某项功能,而不是对人工智能本身感兴趣&…

Linux性能优化--性能工具:磁盘I/O

6.0 概述 本章介绍的性能工具能帮助你评估磁盘I/O子系统的使用情况。这些工具可以展示哪些磁盘或分区已被使用,每个磁盘处理了多少I/O,发给这些磁盘的I/O请求要等多久才被处理。 阅读本章后,你将能够: 确定系统内磁盘I/O的总量和类型(读/写…

【网络安全 --- xss-labs通关】xss-labs靶场通关,让你巩固对xss漏洞的理解及绕过技巧和方法(提供资源)

一,资源下载准备 1-1 VMware 16.0 安装请参考以下博客,若已经安装请忽略: 【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)-CSDN博客【网络安全 --- 工具安装】VMware 16.0 详细安装过程(…

序列化和反序列化指令在PLC通信上的应用

在了解本篇博客之前,大家可以熟悉下序列化指令的相关介绍,详细内容如下: 博途PLC 1200/1500 PLC 序列化和反序列化指令编程应用_博图序列化和反序列化-CSDN博客序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性…

3. 无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为无…

Oracle中数据迁移的工具

SQL*Plus Copy命令 问题描述 怎样在SQL*Plus中实现不同的表之间的数据复制,不论是本地的还是远程的? 问题分析 在SQL*Plus中的copy命令,可以完成远程数据库、本地数据库或Oracle数据库与非Oracle数据库之间的数据复制。其性能与导入/导出相同…