问题如题,注意不是指模糊查询Key,是指对值的模糊(关键字)查询。
举个栗子:
$ HMSET user:1 name jack age 18
$ HMSET user:2 name jackson age 21
$ HMSET user:3 name suse age 16
假如有上述用户数据,以哈希形式存储,如果要做排序,可以
# score为#age,value为#userId,以ZSET结构存储
$ ZADD user:rank:age 18 1 21 2 16 3
# 查询有序列表
$ ZRANGE user:rank:age 0 -1
但如果需要既实现根据年龄排序,还要能够实现关键字查询(模糊匹配用户名),应该怎样实现?
Terdapat kaedah alternatif, yang boleh mencapai jumlah pertanyaan kabur yang mudah dan kecil pada tahap tertentu:
Apabila melakukan pertanyaan kabur selepasApabila menulis maklumat pengguna, pisahkan nama pengguna sebagai Kunci untuk merekodkan ID pengguna
, masukkan:
j
, kemudian anda boleh mencari dua itemSET
danjack
daripada koleksijackson
Sudah tentu, kedua-dua nilai ini boleh digantikan dengan ID pengguna, dan kemudian mengikut ID pengguna untuk menanyakan maklumat hash pengguna.Kaedah ini hanya sesuai untuk senario di mana keadaan pertanyaan adalah tunggal dan panjang medan adalah pendek Jika: Padanan kabur tajuk siaran dan artikel tidak akan berfungsi pada masa yang sama. Anda masih boleh mencuba tajuk kandungan pasti tidak akan tercapai.
Sudah tentu Redis tidak sesuai untuk ini, jadi jika terdapat penyelesaian lain, adalah disyorkan untuk menggunakan penyelesaian lain untuk mencapainya.
Cara eufemistik ialah dengan menulis sendiri skrip Lua.
Atau jika set data tidak besar, tapis sendiri di sisi pelanggan.
Jika pertanyaan kabur adalah keperluan yang sukar, adalah disyorkan untuk beralih ke Solr atau Elasticsearch.
Redis tidak mempunyai kaedah pertanyaan kaya dan pertanyaan kabur hanya boleh dilakukan dalam kekunci, yang tidak dapat memenuhi keperluan kaya anda. Jika anda mahukan storan berkelajuan tinggi, disyorkan untuk menggunakan Redis Jika anda ingin melaksanakan logik perniagaan dan mempunyai kaedah pertanyaan yang kaya, disyorkan untuk menggunakan MongoDb
.