Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

Redis' Lua cjson में शून्य/शून्य की जांच कैसे करें?

cjson.decode() . द्वारा लौटाए गए मानों के लिए TL;DR , उपयोग करें cjson.null JSON के null . से तुलना करने के लिए मूल्य।

व्याख्या:लुआ nil का उपयोग करता है हटाई गई प्रविष्टियों को चिह्नित करने के लिए तालिकाओं में। अगर JSONinc null s को पागल nil . में बदल दिया गया s, डिकोड की गई वस्तुएं भ्रष्ट होंगी। इसलिए, cjson lib null . का प्रतिनिधित्व करने के लिए हल्के उपयोगकर्ताडेटा प्रकार का उपयोग करता है /nil

आपके 'call_data' में एक 'date_created' फ़ील्ड है जो शून्य है - जो त्रुटि का कारण बनता है।

मजेदार बात यह है कि रेडिस, लुआ की तरह, एक शून्य/शून्य मान संग्रहीत नहीं करेगा, इसलिए आपको या तो शून्य मानों को अनदेखा करना होगा या उन्हें ध्वजांकित करने के लिए रेडिस में एक विशेष मान का उपयोग करना होगा।

यह मानते हुए कि आप उन्हें नज़रअंदाज़ कर रहे हैं, इसका एक तरीका यह है:

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)

साथ ही, अपडेट को बैच करने के लिए एक छोटा अनुकूलन होगा, जैसे:

  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))

पी.एस. यदि आप चाहते हैं, तो मेरे द्वारा लिखे गए ReJSON को देखें - यह आपकी मदद करने के लिए डिज़ाइन किया गया है जो ऐसा प्रतीत होता है कि आप करने का प्रयास कर रहे हैं।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रेडिस में Azure कैश/डेटा कैश शैली क्षेत्र

  2. क्या किसी आइटम को अपडेट करते समय Azure Redis Cache में कोई लॉक मैकेनिज्म है?

  3. रेडिस कुंजी के भीतर कोलन का उद्देश्य क्या है

  4. रेडिस इंस्टेंस संस्करण की जांच कैसे करें?

  5. रेडिस में वस्तु गुणों को संग्रहीत करना