在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在实际工作过程中,可以使用lua脚本来解决一些需要保证原子性的问题,而且lua脚本可以缓存在redis服务器上,势必会增加性能。 在Redis中执行Lua脚本有两种方法:eval和evalsha eval EVAL script numkeys key [key ...] arg [arg ...] 其中: <1> script:你的lua脚本 <2> numkeys: key的个数 <3> key:redis中各种数据结构的替代符号 <4> arg: 你的自定义参数 举个例子: eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 user age ysl 21 第一个参数的字符串就是script,也就是lua脚本。2表示keys的个数,KEYS[1] 就是 username的占位符, KEYS[2]就是 age的占位符,ARGV[1]就是ysl的占位符,ARGV[2]就是20的占位符,,以此类推,,,所以最后的结果应该就是:{return username age ysl 20} 通常境况下,我们不要在redis-cli中直接写lua脚本,这样非常不方便编辑,通常情况下我们都是把lua script放到一个lua文件中,然后执行这个lua脚本 编写lua脚本test.lua,内容如下: return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]} 然后我们通过下面命令执行,这种方式和前面介绍的不一样,参数 --eval script key1 key2 , arg1 age2 这种模式,key和value用一个逗号隔开就好了, ./redis-cli --eval /usr/redis/sbin/test.lua username age , ysl 20
evalsha 将Lua脚本加载到Redis服务端,得到该脚本的sha1校验和,evalsha命令使用sha1作为参数可以直接执行对应的Lua脚本,避免每次发送Lua脚本的开销。这样客户端就不需要每次执行脚本内容,而脚本也会常驻在服务端,脚本内容得到了复用。 加载脚本: script load命令可以将脚本内容加载到Redis内存中。 redis-cli script load “$(cat lua_get.lua)” 执行脚本:evalsha 脚本sha1值 key个数 key列表 参数列表 lua的Redis API 除此之外Lua还可以使用redis.pcall函数实现对Redis的调用,redis.call和redis.pcall的不同在于,如果redis.call执行失败,那么脚本执行结束会直接返回错误,而redis.pcall会忽略错误继续执行脚本。 Lua脚本功能为Redis开发和运维人员带来的如下三个好处:
Redis如何管理Lua脚本 抢红包中Redis和Lua命令的使用:
执行脚本,返回结果 |
请发表评论