您的位置:首页 > 数据库 > Redis

redis lua

2014-11-29 09:20 113 查看
由于redis中内置了一个lua解释器,使得redis可以执行一段lua代码,通过使用EVAL来执行(咱们这边很少用到).
今天在对hashtable进行匹配的时候研究了一下,感觉很神奇,下面是我们可能会用到的一些case,有兴趣的可以看下。

1. 这是是一个对redis的hashtable的field进行模糊匹配,并返回field对应的value的一个例子:



2. 利用这个特性,我们还可以在redis做一些简单的逻辑,比如下面的(如果key1存在,那么就'set key2 value2',并返回OK,否则返回ERROR):



3. 因为redis很少会出现命令执行失败(除非网络、内存的一些限制),所以我们可以利用EVAL可是实现一个不是很严格的事务.
下面这个例子能保证:命令'set key1 value1' 和 命令'set key2 value2' 同时成功的时候返回'OK',否则返回nil:



4. 利用EVAL实现按顺序执行一串命令:



5. 为了节省脚本所占带宽,可以通过'SCRIPT LOAD'命令将一个脚本装载到redis中,然后通过'EVALSHA'来执行这个脚本:



6. 其他:
1). 利用EVAL执行的脚本具有原子性;
2). EVAL执行的脚本中不允许使用全局变量;
3). redis内置的lua解释器预加载了这些lua库:base、table、string、math、debug、cjson、cmsgpack等;
4). 在脚本中可以写redis日志:redis.log(loglevel, message);
5). 为了防止脚本中出现死循环,可以通过配置'lua-time-limit'来限制脚本执行的最长时间;
6). TODO。

7. ref:
http://redis.readthedocs.org/en/latest/script/eval.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: