欢迎投稿

今日深度:

一起写redis脚本

一起写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。缺少,就去安装它吧。<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KCjxwPjEuMiCwstewcmVhZGxpbjwvcD4KCjxwcmUgY2xhc3M9"brush:sql;">[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,不确之处,望指教,也希望本文对大家有一点点帮助。

www.htsjk.Com true http://www.htsjk.com/DB2/20412.html NewsArticle 一起写redis脚本 一、redis脚本环境 要写redis的脚本,首先应该搭建好它的脚本环境。redis使用lua作为其脚本语言。所以搭建lua环境成了首要工作。 环境:centos7.0 redis:3.0.2 1.1 安装lua环境...
评论暂时关闭