-- Sets a JSON value to a msgpacked key -- Path to value is given by ARGV -- Get the stored value and unpack it local mp = redis.call('GET', KEYS[1]) local v = cmsgpack.unpack(mp) -- Parse the path local p = v local c = v local token, n while #ARGV > 1 do p = c token = table.remove(ARGV,1) n = tonumber(token) if n then c = p[n+1] else c = p[token] end end -- Get the new value local nv = cjson.decode(ARGV[1]) -- Replace the value in the parent if n then p[n+1] = nv else p[token] = nv end -- Pack the value local nmp = cmsgpack.pack(v) -- Store it redis.call('SET', KEYS[1], nmp) return 'OK'