Redis lua入门

首先国际惯例,来个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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值