Lua是个轻量级语言,比较小众化,所以社区论坛跟java相比肯定不是一个重量级,因此很多问题比较难找到答案。
实战场景:
对redis进行操作,需要批量进行redis指令操作,如果不使用lua,redis指令中也没有什么逻辑语句,涉及到的逻辑语句只能写java代码搞定,这样就需要发版,有的时候没法发紧急版本或者时间不够,这时候就可以使用lua来完成java的逻辑操作,redis支持lua脚本语言
另外一种,java程序开发过程中需要使用到一批的redis指令,频繁的调用redis指令需要建立连接,比较耗时间耗费性能,这时候可以放在lua脚本里,一起执行
离开redis,lua也能单独运行,轻量级语言,虽然没法完成java那种重型的工作,简单的工作也是可以完成的
案例:批量重命名Redis keys
想要批量对一堆的的key进行重命名,redis的api中提供的方法只能对单一的key进行重命名;
第一反应是写个java程序,for循环,这是java程序员的本能,但是这样一来二去太慢,还要发版
第二种方案就用lua代替java进行批量重命名,只需要提供一份lua脚本文件即可
eval "local keys = redis.call('keys', KEYS[1]);
for i, v in pairs(keys)
do local s=string.gsub(keys[i], ,ARGV[1], ARGV[2])
redis.call('rename',keys[i],s)
end
return table.getn(keys)" 1 'oldkey' 'replace_old' 'replace_new'
执行lua可以执行这么执行,简单的语句,也可以把脚本放到lua文件中执行
redis-cli --eval Rename.lua -a password
也可以安装lua插件 直接运行 lua Rename.lua
批量删除redis key脚本
eval "local keys = redis.call('keys', ARGV[1]) for i=1,#keys,5000 do redis.call('del', unpack(keys, i, math.min(i+4999, #keys))) end return #keys" 0 'gstz:messages:recent:*'