pipeline.lua 738 B

12345678910111213141516171819202122232425262728293031323334
  1. -- 优化 redis 的管线操作,防止出现请求过多引发的操作失败
  2. local function pipeline(page_size)
  3. local table_insert = table.insert
  4. page_size = page_size or 1024
  5. assert(page_size > 0)
  6. local cache = {}
  7. local page = {}
  8. local function add(...)
  9. table_insert(page, { ... })
  10. if #page == page_size then
  11. table_insert(cache, page)
  12. page = {}
  13. end
  14. end
  15. local function execute(redis, resp)
  16. if #page > 0 then
  17. table_insert(cache, page)
  18. page = {}
  19. end
  20. if #cache > 0 then
  21. local old = cache
  22. cache = {}
  23. for _, v in ipairs(old) do
  24. redis:pipeline(v, resp)
  25. end
  26. end
  27. return resp
  28. end
  29. return { add=add, execute=execute }
  30. end
  31. return pipeline