Redis LUA
所以内容不定时更新(追加),所有相关主题内容只更新一篇
redis.call(); 将返回一个错误给调用者
redis.pcall(): 将捕获的错误以 LUA 表的形式返回。
Redis Lua 优势
1.减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在redis服务器上完成。使用脚本,减少了网络往返时延。
2.原子操作:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。
3.复用:客户端发送的脚本会永久存储在Redis中,意味着其他客户端可以复用这一脚本而不需要使用代码完成同样的逻辑。
Redis 注意事项
-
Lua 无返回值导致阻塞时,整个 Redis 不可用。
-
Lua 实现核心内容即可,言简意赅。
-
Lua 中不应该存在常量 Key,这样会导致每次执行时都会在脚本字典中新建一个条目,应该使用全局变量数组 KEYS 和 ARGV, KEYS 和 ARGV 的索引都从 1 开始。
-
传递给lua脚本的键列表应该包括可能会读取或者写入的所有键。传入全部的键使得在使用各种分片或者集群技术时,其他软件可以在应用层检查所有的数据是不是都在同一个分片里面。另外集群版redis也会对将要访问的key进行检查,如果不在同一个服务器里面,那么redis将会返回一个错误。(决定使用集群版之前应该考虑业务拆分),参数列表无所谓。。
-
lua 和 redis 命令,事务一样都是原子,的已经进行了数据写入的 lua 脚本将无法中断,只能使用 SHUTDOWN NOSAVE 杀死 Redis 服务器。