Chuyển tới nội dung chính

Tăng/giảm giá trị nguyên tử (LCC.kvdb.dict.incr)

Khai báo​

value, meta_or_err = LCC.kvdb.dict.incr(name, key, by?, init?, min?, max?, coerce?, timeout?)

Tham số​

  • name
    Kiểu chuỗi, tên từ điển (không được rỗng, tối đa 256 byte)
  • key
    Kiểu chuỗi, tên khóa (phải là UTF-8 hợp lệ và không được rỗng)
  • by
    Kiểu số nguyên, tùy chọn; bước tăng hoặc giảm, mặc định là 1, có thể là số âm
  • init
    Kiểu số nguyên, tùy chọn; giá trị ban đầu khi khóa không tồn tại, mặc định là 0
  • min
    Kiểu số nguyên, tùy chọn; giới hạn dưới của kết quả, giá trị vượt giới hạn sẽ bị kẹp lại
  • max
    Kiểu số nguyên, tùy chọn; giới hạn trên của kết quả, giá trị vượt giới hạn sẽ bị kẹp lại
  • coerce
    Kiểu boolean, tùy chọn; khi là true, giá trị cũ không phải số nguyên sẽ bị buộc đặt lại thành init, mặc định là false
  • timeout
    Kiểu số, tùy chọn; thời gian chờ yêu cầu (giây), mặc định là 60

Giá trị trả về​

  • value
    Kiểu số, kết quả sau khi tăng hoặc giảm; khi thất bại là nil
  • meta_or_err
    Kiểu bảng hoặc chuỗi. Khi thành công, trả về bảng siêu dữ liệu:
    • created: kiểu boolean, cho biết khóa có được tạo mới trong lần này hay không
    • coerced: kiểu boolean, cho biết có kích hoạt ép kiểu hay không
    • clamped: kiểu boolean, cho biết kết quả có bị kẹp hay không
    • clamp_reason: chuỗi, lý do kẹp (min/max)
    • original_value: kiểu số, giá trị cũ (nếu tồn tại)
    • computed_value: kiểu số, giá trị được tính theo bước tăng hoặc giảm
    • result_value: kiểu số, giá trị cuối cùng được ghi Khi thất bại, trả về chuỗi mô tả lỗi

Mô tả​

Thao tác bộ đếm nguyên tử an toàn luồng.
Có thể dùng min/max để giới hạn khoảng kết quả; coerce dùng để đặt lại giá trị cũ không hợp lệ thành init.
Khi gọi thất bại, trả về nil, thông tin lỗi.

Ví dụ​

local value, meta = LCC.kvdb.dict.incr("Bộ đếm", "Số lần thử lại", 1, 0, 0, 5, true)
if value then
LCC.log(1, "Số lần thử lại hiện tại", value, meta.clamped and "Đã đạt giới hạn trên" or "")
end