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

Query Multi-Field di Redis Menggunakan Redis Spring

Lihat Spring Data Redis - 8.5. Indeks Sekunder dan:

  • 8.6. Kueri dengan Contoh
  • 8.10. Kueri dan Metode Kueri

Anotasi @Indexed menginstruksikan Spring Data Redis (SDR) untuk membuat indeks sekunder sebagai kumpulan untuk mengindeks bidang hash.

Artinya ketika Anda memasukkan data, SDR akan menjalankan tujuh perintah ke Redis:

HMSET "OrgWork:19315449-cda2-4f5c-b696-9cb8018fa1f9" "_class" "OrgWork" 
    "id" "19315449-cda2-4f5c-b696-9cb8018fa1f9" 
    "CorpDetails" "CorpDetailsValueHere" "ContractType" "ContractTypeValueHere" 
    ... "Country" "Costa Rica"
SADD  "OrgWork" "19315449-cda2-4f5c-b696-9cb8018fa1f9"                           
SADD  "OrgWork:CorpDetails:CorpDetailsValueHere" "19315449-cda2-4f5c-b696-9cb8018fa1f9"
SADD  "OrgWork:ContractType:ContractTypeValueHere" "19315449-cda2-4f5c-b696-9cb8018fa1f9"
...
SADD  "OrgWork:Country:Costa Rica" "19315449-cda2-4f5c-b696-9cb8018fa1f9"

Menggunakan Kueri dengan Contoh:

Anda ingin membuat repositori:

interface OrgWorkRepository extends QueryByExampleExecutor<OrgWork> {
}

Dan kemudian implementasikan kueri seperti pada contoh layanan di bawah ini:

class OrgWorkService {

  @Autowired OrgWorkRepository orgWorkRepository;

  List<OrgWork> findOrgWorks(OrgWork probe) {
    return orgWorkRepository.findAll(Example.of(probe));
  }
}

Dan gunakan sebagai:

OrgWork orgWorkExample = new OrgWork();                          
orgWorkExample.setCorpDetails("CorpDetailsValueHere"); 
orgWorkExample.setContractType("ContractTypeValueHere");
...
List<OrgWork> results = orgWorkService.findOrgWorks(orgWorkExample);

Di balik layar, SDR akan menangani konversi ini ke perintah Redis untuk mendapatkan data Anda, menggunakan kombinasi SINTER dan HGETALL:

SINTER   …:CorpDetails:CorpDetailsValueHere   …:ContractType:ContractTypeValueHere   ...
HGETALL "OrgWork:d70091b5-0b9a-4c0a-9551-519e61bc9ef3" 
HGETALL ...

Ini adalah proses dua langkah:

  1. Ambil kunci yang terdapat di persimpangan indeks sekunder, menggunakan SINTER
  2. Ambil setiap kunci yang dikembalikan oleh <1> satu per satu, menggunakan HGETALL

Beban kerja 100.000 per menit harus dapat dikelola untuk Redis dengan asumsi Anda memiliki server yang berkualitas, ukuran kumpulan data yang masuk akal, dan rata-rata kuerinya agak spesifik.

SINTER memiliki kompleksitas waktu O(N*M) kasus terburuk di mana N adalah kardinalitas dari himpunan terkecil dan M adalah jumlah himpunan. Anda memiliki satu set untuk setiap dimensi pada kueri Anda.

HGETALL adalah O(N) di mana N adalah ukuran hash, 7 dalam kasus Anda.

Seperti biasa, Anda disarankan untuk melakukan beberapa pembandingan untuk menguji apakah Anda mendapatkan kinerja yang diinginkan dan menyesuaikan jika diperlukan.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara mengisi used_memory di Redis?

  2. Apakah Redis menyimpan data?

  3. Gunakan Banyak DB Dengan Satu Skrip Redis Lua?

  4. Haruskah saya membagikan koneksi Redis antar file/modul?

  5. Menginstal Redis di Debian 9