`

Redis使用LUA脚本计算HashMap中的Value的SUM

阅读更多

统计Redis中HashMap缓存中Value的数据值:

 

local  sizeList = redis.call("HVALS", KEYS[1])
local  total_size = 0
for    index, line in pairs(sizeList) 
do 
       total_size = total_size + tonumber(line)
end
return total_size

 

1. 上传脚本

[eagle@greatwqs src]$ ./redis-cli script load "$(cat /home1/eagle/apps/redis/lua/folder_size.lua)"

"104fc275456ac249b6e266a345d424cf9efe62f4"

2. 造数据

[eagle@greatwqs src]$ ./redis-cli

127.0.0.1:6379> HMSET wqstest folder-1 100 folder-2 200 folder-3 300

OK

127.0.0.1:6379> hvals wqstest

1) "100"

2) "200"

3) "300"

127.0.0.1:6379> exit

3. 使用脚本测试数据

[eagle@greatwqs src]$ ./redis-cli --eval /home1/eagle/apps/redis/lua/folder_size.lua wqstest

(integer) 600

 

PS: 使用脚本造数据

local  redisKey = KEYS[1]
redis.call('DEL', redisKey) 
local total_count = tonumber(KEYS[2])

for loopIndex=1, total_count do
  redis.call('HMSET', redisKey, loopIndex, loopIndex) 
end
return redis.call('HLEN', redisKey) 

[eagle@greatwqs src]$ ./redis-cli --eval /home1/eagle/apps/redis/lua/create_hm_value.lua test 500000

(integer) 500000

造50W条数据, 耗时感觉在秒级别.

 

再用上面第一个脚本计算一下SUM:

[eagle@greatwqs src]$ ./redis-cli --eval /home1/eagle/apps/redis/lua/folder_size.lua test

(integer) 125000250000

很快, 低于500MS就返回了.

分享到:
评论

相关推荐

    SpringBoot+Redis执行lua脚本的方法步骤

    3. Redis 中执行 Lua 脚本的命令格式:`EVAL script numkeys key [key ...] arg [arg ...]` * `script` 是第一个参数,为 Lua 5.1 脚本(字符串)。 * `numkeys` 指定后续参数有几个 key。 * `key [key ...]`,...

    redis.lua lua脚本语言

    lua链接redis的工具驱动代码

    Java学习资料-Spring Boot - 结合 Redis 使用 Lua脚本

    结合Redis使用Lua脚本可以提升应用的性能和可靠性,特别是在处理高并发、复杂业务逻辑以及事务处理时。以下是对这个主题的详细阐述: 首先,让我们深入了解一下使用Lua脚本在高并发场景中的价值。在并发环境中,...

    基于redis和lua脚本的分布式锁的实现

    基于Redis和Lua脚本的分布式锁的实现是使用Redis和Lua脚本来实现分布式锁的技术。分布式锁是指在分布式系统中,多个节点之间需要协调和同步的机制,以避免同时访问共享资源的竞争问题。Redis是一个开源的、基于内存...

    java+redis+lua实现重复提交操作拦截.zip

    - 在这个项目中,可能会有一个Lua脚本,用于在Redis中执行锁定和解锁操作,确保整个过程的原子性。例如,脚本可能会检查key是否存在,如果不存在则设置并返回成功,否则失败。 4. **Redis分布式锁**: - 分布式锁...

    Spring Boot通过自定义注解和Redis+Lua脚本实现接口限流教程配套源码

    在我们日常开发的项目中为了保证系统的稳定性,很多时候我们需要对系统接口做限流处理,它可以有效防止恶意请求对系统造成过载,本章节博主将给大家介绍使用自定义注解和Redis+Lua脚本实现接口限流。

    Redis+LUA脚本实现限流

    Redis+LUA脚本实现限流测试视频

    Redis执行Lua脚本的好处与示例代码

    例如,如果需要执行一系列连续的Redis命令,如设置、获取和计算,这些命令可以通过一个Lua脚本一次性发送到服务器,减少了网络延迟和多次请求的开销。 2. **原子操作**: Redis将整个Lua脚本视为一个原子操作,这...

    SpringBoot-redis-lua

    Lua是一种轻量级的脚本语言,它在Redis中的使用可以实现复杂的数据处理逻辑,提高数据操作的效率和安全性。 **SpringBoot整合Redis** 1. **集成配置**: 在SpringBoot项目中整合Redis,首先需要在`pom.xml`文件中...

    31拓展 10:法力无边 —— Redis Lua 脚本执行原理(1).md

    在Redis中,用户可以使用Lua脚本来执行自定义操作。当Lua脚本被传送到Redis服务器时,Redis会以单线程的方式顺序地执行这些脚本。在执行过程中,Redis会保证脚本是原子性的,这意味着脚本一旦开始执行,其他客户端的...

    redis-lua-debugger.zip

    rld 是一个非交互的调试工具,用于调试 Redis 的 Lua 脚本,这里有篇详细介绍的文章。 rld 特性包括: 易于安装,只有 6kB 可打印输出到本地和远端 跟踪执行的代码行 先进的数值变化的自动监控机制报告 报告...

    Golang使用lua脚本实现redis原子操作

    同时,使用`script load`和`script exists`命令,可以预先加载脚本到Redis的脚本缓存中,进一步提高性能,因为之后的调用只需要使用脚本的SHA1校验和即可,而不需要每次都发送完整的脚本。 总之,Golang结合Redis和...

    redis和lua

    Redis 是一个开源的内存数据结构存储系统,常被用作数据库、缓存和消息中间件,而 Lua 是一种轻量级的脚本语言,广泛用于游戏开发、嵌入式系统以及各种软件中的扩展。 **Redis 知识点** 1. **数据类型**: Redis ...

    redis面试题之LUA脚本.zip

    8. Redis Sentinel和Cluster:在Redis Sentinel集群中,LUA脚本可以跨多个主节点执行,但在Redis Cluster中,脚本只能在单个分片上执行,因为LUA脚本不具备分布式意识。 9. 性能优化:编写LUA脚本时,应尽量减少对...

    phpredis执行LUA脚本示例代码

    LUA脚本在Redis中的使用是为了实现原子操作,确保数据一致性,尤其是在处理多个操作时。本篇文章主要探讨如何通过phpredis执行LUA脚本来实现特定的Redis操作。 首先,我们需要了解LUA脚本的基本结构。在示例代码中...

    Redis和Lua使用过程中遇到的小问题

    当在Lua脚本中使用`redis.call`执行Redis命令并检查返回值时,如果Redis返回`(nil)`,Lua会将其解释为`false`的布尔值,而不是`nil`。这一点在Redis的官方文档中有明确的说明。Redis到Lua的转换表中指出,Redis的Nil...

    Redis的Lua开发包redis-lua.zip

    redis-lua 是 Redis 的 Lua 语言的客户端开发包。 示例代码: require 'redis'local redis = Redis.connect('127.0.0.1', 6379) local response = redis:ping() -- trueredis:set('usr:nrk', 10) redis:set('usr:...

    lua-redis:lua reis nginx 配制 及 redis.lua 脚本

    lua reis nginx 配制 及 redis.lua 脚本 redis.lua 脚本 支持 get, post redis 的hash, 及 集合 命令 开启redis的密码认证auth nginxlua.conf 配制 lua地址: 示列: redis_lib.php 为PHP类包 redis_lua 类

    nginx+lua+redis 集群 连接插件和脚本

    在这个“nginx+lua+redis集群”解决方案中,提供的连接插件可能是指Nginx与Redis之间的通信模块,例如lua-redis-pconnector,这个插件允许Nginx通过Lua脚本直接与Redis进行交互。而脚本部分可能包括了处理业务逻辑、...

    redis-lua:我正在使用的redis-lua脚本

    `EVALSHA` 是为了优化性能,它使用脚本的 SHA1 散列值,因为一旦脚本被加载到 Redis,就不需要再次发送整个脚本。 例如,一个简单的 Lua 脚本可以用于原子地增加某个键的值: ```lua local value = redis.call('...

Global site tag (gtag.js) - Google Analytics