Qless是一个基于redis的分布式任务架构。相关代码在
https://github.com/seomoz/qless

它是完全有lua实现的,依靠 redis 对lua的支持,http://www.cnblogs.com/ghj1976/p/4298206.html 它实现了对redis的功能扩展。

有关lua的一些语法基础知识可以参考:http://www.cnblogs.com/ghj1976/p/4298178.html

https://github.com/seomoz/qless 这里我们可以看到下面文件,它们分别是下面功能:

base.lua -- 提前声明的部分和一些未分类的功能
config.lua -- 所有配置
job.lua -- 定时job类
recurring.lua -- 重复的job类
queue.lua -- 队列类
api.lua -- 客户端调用封装,这里做了一个非常轻量的封装

我们用的时候其实用的是 qless.lua 文件, 要用这个文件,需要用 make qless.lua 命令才产生:

在 qless.lua 的最后,我们可以看到下面一段代码,对这部分代码的解释如下:

if #KEYS > 0 then error('No Keys should be provided') end

local command_name = assert(table.remove(ARGV, 1), 'Must provide a command')
local command      = assert(
  QlessAPI[command_name], 'Unknown command ' .. command_name)

local now          = tonumber(table.remove(ARGV, 1))
local now          = assert(
  now, 'Arg "now" missing or not a number: ' .. (now or 'nil'))

return command(now, unpack(ARGV))

来自外部的调用,其实都被执行到 QlessAPI下的对应方法了, 外部调用传递进来的第1个参数是 QlessAPI 下对应的命令名字, 第二个是 这个命令的 now 参数,其他是其他参数。

 

在Redis中执行Lua的参数说明

在Redis中执行lua,我们最常用下面三个命令:EVAL、EVALSHA、SCRIPT LOAD

参考:http://www.cnblogs.com/ghj1976/p/4298206.html

以 eval 为例,它的参数如下,其他几个参数也类似:

EVAL script numkeys key [key ...] arg [arg ...]

script 参数是一段 Lua 5.1 脚本程序,它会被运行在 Redis 服务器上下文中,这段脚本不必(也不应该)定义为一个 Lua 函数。

numkeys 参数用于指定键名参数的个数。

键名参数 key [key ...]EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1]KEYS[2] ,以此类推)。

在命令的最后,那些不是键名参数的附加参数 arg [arg ...] ,可以在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1]ARGV[2] ,诸如此类)。

上面这几段长长的说明可以用一个简单的例子来概括:

> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"

其中 "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 是被求值的 Lua 脚本,数字 2 指定了键名参数的数量, key1key2 是键名参数,分别使用 KEYS[1]KEYS[2] 访问,而最后的 firstsecond 则是附加参数,可以通过 ARGV[1]ARGV[2] 访问它们。

参考: http://redis.readthedocs.org/en/latest/script/eval.html#eval

 

table.remove

table 的默认初始索引一般以 1 开始

table.remove(table, pos)

table.remove()函数删除并返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起.

参考:http://dhq.me/lua-learning-notes-table

 

assert (v [, message])

功能:相当于C的断言,

参数:

v:当表达式v为nil或false将触发错误,

message:发生错误时返回的信息,默认为"assertion failed!"

 

unpack

函数unpack可以返回多个值,它传入一个array,然后返回array中的每一个值

参考:http://blog.csdn.net/wzzfeitian/article/details/8653101

 

 

Golang 这个的实现版本在: https://github.com/kdar/goqless

其中的调用逻辑被封装在下面代码:

github.com\kdar\goqless\client.go

func (c *Client) Do(name string, keysAndArgs ...interface{}) (interface{}, error) {

  return c.lua.Do(name, keysAndArgs...)
}

这里的 name 是 qless的命令, 类似下面的 get, 其他是这里的参数。

-- Return json for the job identified by the provided jid. If the job is not

-- present, then `nil` is returned
function QlessAPI.get(now, jid)
  local data = Qless.job(jid):data()
  if not data then
    return nil
  end
  return cjson.encode(data)
end

Qless 相关知识的更多相关文章

  1. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  2. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

  3. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

  4. UIViewController相关知识

    title: UIViewController 相关知识date: 2015-12-13 11:50categories: IOS tags: UIViewController 小小程序猿我的博客:h ...

  5. 【转】java NIO 相关知识

    原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...

  6. NSString使用stringWithFormat拼接的相关知识

    NSString使用stringWithFormat拼接的相关知识 保留2位小数点 1 2 3 4 //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSSt ...

  7. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

  8. 电路相关知识--读<<继电器是如何成为CPU的>>

    电路相关知识–读<<继电器是如何成为CPU的>> */--> *///--> *///--> 电路相关知识–读<<继电器是如何成为CPU的> ...

  9. 地址标记,SpringMVC转发与调用相关知识存档

    1.mytest_mavenprj1中,index的 <a href="login/login.html">点击登录</a> 与 <a href=&q ...

随机推荐

  1. JSP(汇聚页)

    JSP(汇聚页) ------------------------------------------------------------------------------------------- ...

  2. tushare模块的应用

    一.简介以及环境安装 TuShare是一个著名的免费.开源的python财经数据接口包.其官网主页为:TuShare -财经数据接口包.该接口包如今提供了大量的金融数据,涵盖了股票.基本面.宏观.新闻 ...

  3. google Agent

    一句话:改HOSTS文件 有时候要查看appengine.google.com的后台,但死活上不去,怎么办?还是那个老办法: 1.在cmd下Ping www.google.com.hk,获得IP地址, ...

  4. Memcached安装教程及使用

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载 Table of contents 安装 使用 在spring中使用 安装 下载下来m ...

  5. Saiku 系列

    1.Saiku2.6 Saiku315 链接SQL的JDBC字符串 2.Saiku2.6 配置数据源 3.Saiku2.6 保存查询后,重新打开报 Error Loading Query错误. 4.C ...

  6. Great Expectations

    Dear friend, This game is created based on Dicken's Great Expectations. To colorful the contents, I ...

  7. Go语言指针

    指针简介 (Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值.由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元.因此,将 ...

  8. Mac下使用Wine安装Xshell 4和Xftp 4

    下载: (链接: https://pan.baidu.com/s/1o78qisM 密码: 79sq) 安装: 1.安装Wine 参考:http://www.cnblogs.com/EasonJim/ ...

  9. SPB 公开课记录

    sql server 用工具到处mysql脚本,不过目前有点问题

  10. (转)2017年Linux运维人员必会开源运维工具体系

    标签:操作系统 中间件 千里马 Linux 技能 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51ct ...