Redis lua入门

xiaoxiao2021-02-27  355

首先国际惯例,来个hello world,

local msg = "Hello, world!" return msg

执行 

[root@mtyx src]# redis-cli eval "$(cat hello.lua)" 0 "Hello, world!" EVAL在第一个参数是我们的lua脚本, 这我们用cat命令从文件中读取我们的脚本内容。第二个参数是这个脚本需要访问的Redis 的键的数字号。我们简单的 “Hello world" 不会访问任何键,所以我们使用0

短URL的计数

local link_id = redis.call("INCR", KEYS[1]) redis.call("HSET", KEYS[2], link_id, ARGV[1]) return link_id结果

[root@mtyx src]# redis-cli EVAL "$(cat shortURL.lua)" 2 links:counter links:urls http://malcolmgladwellbookgenerator.com/ (integer) 2 我们将会访问两个Lua表:KEYS和ARGV。表单是关联性数组和结构化数据的Lua唯一机制。对于我们的意图,你可以把它们看做是一个你所熟悉的任意语言对等的数组,但是提醒两个很容易困扰到新手的两个Lua定则: 表是基于1的,也就是说索引以数值1开始。所以在表中的第一个元素就是mytable[1],第二个就是mytable[2]等等。 表中不能有nil值。如果一个操作表中有[1, nil, 3, 4],那么结果将会是[1]——表将会在第一个nil截断。

注:2代表访问了两个Lua表

替代参数后的脚本

local link_id = redis.call("INCR", "links:counter") redis.call("HSET", "links:urls", link_id, "http://malcolmgladwellbookgenerator.com") return link_id 锁的实现

主要是解锁时,需要判定当前的锁是否与持有的锁一致

if redis.call("get",KEYS[1]) == ARGV[1] then return redis.call("del",KEYS[1]) else return 0 end结果

[root@mtyx src]# redis-cli --eval singlelock.lua sdfssd abcd (integer) 0 [root@mtyx src]# redis-cli EVAL "$(cat singlelock.lua)" 2 sdfssd abcd (integer) 0 两种执行方式都可以

http://www.oschina.net/translate/intro-to-lua-for-redis-programmers

http://blog.csdn.net/billfeller/article/details/41663313

转载请注明原文地址: https://www.6miu.com/read-3227.html

最新回复(0)