码迷,mamicode.com
首页 > 其他好文 > 详细

一起写redis脚本

时间:2015-06-09 22:03:15      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:redis   lua   redis脚本   lua与redis   

一、redis脚本环境

要写redis的脚本,首先应该搭建好它的脚本环境。redis使用lua作为其脚本语言。所以搭建lua环境成了首要工作。

环境:centos7.0
redis:3.0.2

1.1 安装lua环境

[root@localhost lua]# curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
[root@localhost lua]# tar zxf lua-5.3.0.tar.gz
[root@localhost lua]# cd lua-5.3.0
[root@localhost lua]# make linux

执行到这里的时候,报了一个错,如图:
技术分享
说缺少什么readline。缺少,就去安装它吧。

1.2 安装readlin

[root@localhost lua]# yum -y install gcc make ncurses-devel readline-devel
# 执行完以上操作后,继续以下命令
[root@localhost lua]# make linux
[root@localhost lua]# make install
# 使用lua命令,查看是否安装成
[root@localhost lua]# lua

看到如图所示,则表示安装成功了。
技术分享

二、hello world脚本

从经典的hello world开始我们的第一个redis脚本吧。
首先在某一个目录下建立一个lua文件,用于存放脚本。
2.1 lua脚本内容

local msg = ‘Hello, World!‘;
return msg;

该脚本就是将hello world赋值给msg,然后返回回来。
2.2 执行这个脚本
在执行之前,首先确保redis的服务已经开启。然后使用一下命令进行执行。

redis-cli –eval /root/lua/first.lua

命令解释:–eval告诉redis-cli读取并运行后面的Lua脚本,后面是存放的lua文件路径
这是一种执行方式,还有另外一种执行方式。

redis-cli EVAL “$(cat first.lua)” 0

两种执行方式,都会得到一样的结果。第二种方式中,相当于再再redis的命令中执行了一条shell脚本。cat first.lua的意思就是获取该文件内容并显示出来。然后0表示使用了redis的键的数字号,该脚本没有使用故设置为0。
个人更倾向于第一种执行方式。

三、带参数的redis脚本

3.1 脚本内容

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

脚本作用描述:redis通过incr命令将第一个传入的key值进行增加1,然后通过hset将第二个传入的键,以及通过incr得到的值作为字段,然后argv的第一个参数作为值,存入到hashtable中。并且在最后返回存入键的字段值。
3.2 执行脚本。
方式一:

redis-cli –eval /root/lua/second.lua links:counter links:urls , http://www.bnersoft.com/

方式二:

redis-cli eval “$(cat second.lua)” 2 links:counter links:urls http://www.bnersoft.com/

两种方式,任选一种,然后使用redis的自带客户端,可以清晰看到redis中新增加了两个键。

[root@localhost lua]# KEYS *

技术分享
然后通过相关命令,可以查看其中的值,这里就不在进行演示了,大家可以自己试验一下。

PS:初学redis,不确之处,望指教,也希望本文对大家有一点点帮助。

一起写redis脚本

标签:redis   lua   redis脚本   lua与redis   

原文地址:http://blog.csdn.net/hel12he/article/details/46430963

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!