跳到主要内容

执行进程词典事务代码 (proc_dict_run)

声明

返回内容, 错误信息 = proc_dict_run(事务代码)

参数

  • 事务代码
    字符串型,需要执行的事务 Lua 代码

返回值

  • 返回内容
    字符串型 | nil,执行成功返回代码返回的值,执行失败返回 nil
  • 错误信息
    文本型 | nil,执行成功返回 nil,执行代码发生错误时返回错误信息

说明

这个函数在 20250427 以后的版本方可使用
所有以 "xxtouch." 或 "1ferver." 开头的进程队列词典全部被保留
执行进程词典事务代码,事务代码执行期间,将阻止其它线程访问 proc_ 函数执行
单次运行最多不能超过 1000000 行
如果执行成功,这段 Lua 代码可以返回一个字符串值
这个字符串值将作为返回值返回给调用者
如果代码返回 nil,则会返回空字符串给调用者
如果执行失败,将返回 nil, 错误信息

运行事务 Lua 代码可以使用如下模块以及如下函数

base 模块(不包含 require)
table 模块
string 模块
math 模块
utf8 模块
bit32 模块
json 模块
os.time()
os.clock()
sys.mtime()
utils.gen_uuid()
proc_put(key, value)
proc_get(key)
proc_queue_push_back(key, value)
proc_queue_push_front(key, value)
proc_queue_pop_front(key)
proc_queue_pop_back(key)
proc_queue_pop_value(key, value)
proc_queue_count_value(key, value)
proc_queue_clear(key)
proc_queue_read(key)
proc_queue_size(key)

示例

function proc_inc(key, int_value)
return proc_dict_run(string.format([[
local key = %q
local value = %d
local ov = proc_get(key)
if ov == '' then
ov = 0
else
ov = tonumber(ov)
end
if not ov then
error('not a number')
end
proc_put(key, tostring(ov + value))
return ov
]], key, int_value))
end

for i = 1, 20 do
nLog(proc_inc('haha', 10))
end