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

Cara membatalkan bagian hierarki (pohon) data dalam cache Redis

Setidaknya ada 3 cara berbeda untuk melakukannya, masing-masing memiliki kelebihan dan kekurangannya sendiri.

Pendekatan pertama adalah menggunakan pemindaian ad-hoc non-atomik pohon untuk mengidentifikasi dan membatalkan (menghapus) tingkat ke-2 pohon (set penyesuaian pertama). Untuk melakukannya, gunakan skema penamaan hierarki untuk bidang Hash Anda dan ulangi menggunakan HSCAN . Misalnya, dengan asumsi bahwa nama kunci Hash Anda adalah ID produk (mis. ProductA), Anda akan menggunakan sesuatu seperti '0001:0001' sebagai nama bidang untuk versi pertama penyesuaian pertama, '0001:0002' untuk versi kedua dan sebagainya. Demikian pula, '0002:0001' akan menjadi kustomisasi ke-2 versi pertama, dll... Kemudian, temukan semua kustomisasi versi 42, gunakan HSCAN ProductA 0 MATCH 0042:* , HDEL bidang dalam balasan, dan ulangi sampai kursor nol.

Pendekatan sebaliknya adalah secara proaktif "mengindeks" setiap versi penyesuaian sehingga Anda dapat mengambilnya secara efisien alih-alih melakukan pemindaian penuh Hash. Cara untuk melakukannya adalah menggunakan Set Redis - Anda menyimpan Set dengan semua nama bidang untuk versi produk tertentu. Versi dapat berurutan (seperti dalam contoh saya) atau apa pun asalkan unik. Biaya mempertahankan indeks ini - setiap kali Anda menambahkan atau menghapus penyesuaian dan/atau versi produk, Anda harus menjaga konsistensi dengan Set ini. Misalnya, pembuatan versi akan menjadi seperti:

HSET ProductA 0001:0001 "<customization 1 version 1 JSON payload"
SADD ProductA:0001 0001

Perhatikan bahwa kedua operasi ini harus dalam satu transaksi (yaitu menggunakan MULTI\EXEC blokir atau EVAL naskah Lua). Setelah Anda menyiapkan ini, membatalkan penyesuaian hanyalah masalah memanggil SMEMBERS pada Set yang relevan dan menghapus versi di dalamnya dari Hash (dan Set itu sendiri juga). Penting untuk dicatat, bagaimanapun, bahwa membaca semua anggota dari Set besar bisa memakan waktu - 1K anggota tidak terlalu buruk, tetapi untuk Set yang lebih besar ada SSCAN .

Terakhir, Anda dapat mempertimbangkan untuk menggunakan Sorted Set alih-alih Hash. Meskipun mungkin kurang intuitif dalam kasus penggunaan ini, Set Terurut akan memungkinkan Anda melakukan semua operasi yang Anda butuhkan. Harga untuk menggunakannya, bagaimanapun, adalah peningkatan kompleksitas O(logN) untuk menambah/menghapus/membaca dibandingkan dengan O(1) Hash, tetapi mengingat angka perbedaannya tidak signifikan.

Untuk melepaskan kekuatan Set Terurut, Anda akan menggunakan urutan leksikografis sehingga semua anggota Set Terurut harus memiliki skor yang sama (misalnya gunakan 0). Setiap produk akan diwakili oleh Set Terurut, seperti halnya dengan Hash. Anggota Set adalah setara dengan bidang Hash, yaitu versi penyesuaian. "Trik" adalah membangun anggota dengan cara yang memungkinkan Anda melakukan pencarian rentang (atau pembatalan level-2 jika Anda mau). Berikut adalah contoh tampilannya (perhatikan bahwa di sini kunci ProductA bukanlah Hash tetapi Kumpulan yang Diurutkan):

ZADD ProductA 0 0001:0001:<JSON>

Untuk membaca versi penyesuaian, gunakan ZRANGEBYLEX ProductA [0001:0001: [0001:0001:\xff dan pisahkan JSON dari balasan dan untuk menghapus seluruh penyesuaian, gunakan ZREMRANGEBYLEX .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Batalkan Pekerjaan Di Laravel

  2. Apa pustaka/metode komunikasi antar-proses node.js yang paling efisien?

  3. Penggunaan sederhana EM::Synchrony#sync menyebabkan FiberError 'root fiber' -- salah saya?

  4. Jaga agar data Redis tetap hidup antara komposisi docker ke bawah dan ke atas dalam wadah Docker

  5. Redis menemukan hash berdasarkan nilai bidang