Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Bagaimana cara memeriksa nil/null di Redis' Lua cjson?

TL;DR untuk nilai yang dikembalikan oleh cjson.decode() , gunakan cjson.null untuk membandingkan dengan null J JSON nilai.

Penjelasan:Lua menggunakan nil dalam tabel untuk menandai entri yang dihapus. Jika JSONinc null s dikonversi ke nil Luna Lunatic s, objek yang didekodekan akan rusak. Oleh karena itu, cjson lib menggunakan tipe data pengguna yang ringan untuk mewakili null /nil .

'data_panggilan' Anda memiliki bidang 'tanggal_dibuat' yang nol - yang menyebabkan kesalahan.

Lucunya, Redis, seperti Lua, tidak akan menyimpan nilai nil/null, jadi Anda harus mengabaikan nilai null atau menggunakan nilai khusus di Redis untuk menandainya.

Dengan asumsi Anda akan mengabaikannya, inilah satu cara untuk mengatasinya:

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)

Selain itu, pengoptimalan kecil adalah mengelompokkan pembaruan, seperti:

  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. jika Anda mau, lihat ReJSON yang saya tulis - ini dirancang untuk membantu apa yang tampaknya Anda coba lakukan.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara mengatur/mendapatkan kerangka data Pandas ke Redis menggunakan pyarrow

  2. Bagaimana cara EXPIRE kunci anak HSET di redis?

  3. Jedis, Tidak bisa mendapatkan koneksi jedis:tidak bisa mendapatkan sumber daya dari kumpulan

  4. ModuleNotFoundError:Tidak ada modul bernama 'grp' di windows

  5. Bagaimana cara menjaga has_many :through hubungan saat membuat serial ke JSON dan kembali ke Rails 4.0.3?