Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Làm thế nào để kiểm tra nil / null trong Redis 'Lua cjson?

TL; DR cho các giá trị được trả về bởi cjson.decode() , sử dụng cjson.null để so sánh với null của JSON giá trị.

Giải thích:Lua sử dụng nil trong bảng để đánh dấu các mục đã xóa. Nếu JSONinc null s đã được chuyển đổi thành Lunatic nil s, các đối tượng được giải mã sẽ bị hỏng. Do đó, lib cjson sử dụng loại dữ liệu người dùng nhẹ để đại diện cho null / nil .

'Call_data' của bạn có trường 'date_create' không có giá trị - nguyên nhân gây ra lỗi.

Điều buồn cười là Redis, giống như Lua, sẽ không lưu trữ giá trị nil / null, vì vậy bạn sẽ phải bỏ qua các giá trị null hoặc sử dụng một giá trị đặc biệt trong Redis để gắn cờ chúng.

Giả sử bạn sẽ bỏ qua chúng, đây là một cách giải quyết vấn đề:

local call_data     = cjson.decode(ARGV[1])
local other_data    = cjson.decode(ARGV[2])
local data          = {}
local next          = next
local null          = cjson.null
local populate_data = function(source)
  if next(source) == nil then
    return
  end

  for property,value in pairs(source) do
    if value ~= null then
      redis.call('HSET', KEYS[2], property, value)
    end
  end
end
populate_data(call_data)
populate_data(other_data)

Ngoài ra, một tối ưu hóa nhỏ sẽ là thực hiện hàng loạt các bản cập nhật, như vậy:

  local payload = {}
  for property,value in pairs(source) do
    if value ~= null then
      table.insert(payload, property)
      table.insert(payload, value)
    end
  end
  redis.call('HSET', KEYS[2], unpack(payload))

P.S. nếu bạn muốn, hãy xem ReJSON mà tôi đã viết - nó được thiết kế để trợ giúp những gì bạn đang cố gắng thực hiện.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách lưu trữ một JSON lồng nhau phức tạp trong Redis bằng Python

  2. Muốn triển khai các ổ cắm web trong Laravel

  3. Redis không cập nhật khi có nhiều yêu cầu cùng một lúc

  4. xử lý các tình huống tối đa của redis với đường ray khi sử dụng bộ nhớ đệm đường ray

  5. Tham số liên kết làm gì trong Redis?