统计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就返回了.
相关推荐
3. Redis 中执行 Lua 脚本的命令格式:`EVAL script numkeys key [key ...] arg [arg ...]` * `script` 是第一个参数,为 Lua 5.1 脚本(字符串)。 * `numkeys` 指定后续参数有几个 key。 * `key [key ...]`,...
lua链接redis的工具驱动代码
结合Redis使用Lua脚本可以提升应用的性能和可靠性,特别是在处理高并发、复杂业务逻辑以及事务处理时。以下是对这个主题的详细阐述: 首先,让我们深入了解一下使用Lua脚本在高并发场景中的价值。在并发环境中,...
基于Redis和Lua脚本的分布式锁的实现是使用Redis和Lua脚本来实现分布式锁的技术。分布式锁是指在分布式系统中,多个节点之间需要协调和同步的机制,以避免同时访问共享资源的竞争问题。Redis是一个开源的、基于内存...
- 在这个项目中,可能会有一个Lua脚本,用于在Redis中执行锁定和解锁操作,确保整个过程的原子性。例如,脚本可能会检查key是否存在,如果不存在则设置并返回成功,否则失败。 4. **Redis分布式锁**: - 分布式锁...
一个用于调试 Redis Lua 脚本的 Redis Lua 脚本redis-lua-调试器rld 是针对在 Redis 中运行的 Lua 脚本的非交互式调试器。请参阅此文章了解运行时示例。rld 的功能包括简单且本地安装,仅~6KB 有效负载。将输出打印...
在我们日常开发的项目中为了保证系统的稳定性,很多时候我们需要对系统接口做限流处理,它可以有效防止恶意请求对系统造成过载,本章节博主将给大家介绍使用自定义注解和Redis+Lua脚本实现接口限流。
Redis+LUA脚本实现限流测试视频
例如,如果需要执行一系列连续的Redis命令,如设置、获取和计算,这些命令可以通过一个Lua脚本一次性发送到服务器,减少了网络延迟和多次请求的开销。 2. **原子操作**: Redis将整个Lua脚本视为一个原子操作,这...
Lua是一种轻量级的脚本语言,它在Redis中的使用可以实现复杂的数据处理逻辑,提高数据操作的效率和安全性。 **SpringBoot整合Redis** 1. **集成配置**: 在SpringBoot项目中整合Redis,首先需要在`pom.xml`文件中...
在Redis中,用户可以使用Lua脚本来执行自定义操作。当Lua脚本被传送到Redis服务器时,Redis会以单线程的方式顺序地执行这些脚本。在执行过程中,Redis会保证脚本是原子性的,这意味着脚本一旦开始执行,其他客户端的...
rld 是一个非交互的调试工具,用于调试 Redis 的 Lua 脚本,这里有篇详细介绍的文章。 rld 特性包括: 易于安装,只有 6kB 可打印输出到本地和远端 跟踪执行的代码行 先进的数值变化的自动监控机制报告 报告...
同时,使用`script load`和`script exists`命令,可以预先加载脚本到Redis的脚本缓存中,进一步提高性能,因为之后的调用只需要使用脚本的SHA1校验和即可,而不需要每次都发送完整的脚本。 总之,Golang结合Redis和...
秒杀系统,高并发,Redis,Lua脚本,Golang,Gin.zip
Redis 是一个开源的内存数据结构存储系统,常被用作数据库、缓存和消息中间件,而 Lua 是一种轻量级的脚本语言,广泛用于游戏开发、嵌入式系统以及各种软件中的扩展。 **Redis 知识点** 1. **数据类型**: Redis ...
8. Redis Sentinel和Cluster:在Redis Sentinel集群中,LUA脚本可以跨多个主节点执行,但在Redis Cluster中,脚本只能在单个分片上执行,因为LUA脚本不具备分布式意识。 9. 性能优化:编写LUA脚本时,应尽量减少对...
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中有一些限制,比如不能引入额外的包,只能使用内置的`redis`包。同时,所有的变量必须使用`local`声明,脚本返回的值在Go中会有特定的类型映射。例如,返回`nil`时,在Go中会表现为`redis.Nil`,返回...
LUA脚本在Redis中的使用是为了实现原子操作,确保数据一致性,尤其是在处理多个操作时。本篇文章主要探讨如何通过phpredis执行LUA脚本来实现特定的Redis操作。 首先,我们需要了解LUA脚本的基本结构。在示例代码中...
当在Lua脚本中使用`redis.call`执行Redis命令并检查返回值时,如果Redis返回`(nil)`,Lua会将其解释为`false`的布尔值,而不是`nil`。这一点在Redis的官方文档中有明确的说明。Redis到Lua的转换表中指出,Redis的Nil...