Myslím, že je to velmi jednoduché.
Řešení 1 (nižší, nedoporučuje se)
Váš způsob ZSCAN MySet 0 MATCH Id:92 count 1
nefungovalo, protože uložený řetězec je "{\"Id\":\"92\"...
ne "{\"Id:92\"...
. Řetězec byl změněn do jiného formátu. Zkuste tedy použít MATCH Id\":\"64
nebo něco takového, aby odpovídalo serializovaným datům json v redis. Nejsem obeznámen s json.net, takže skutečný řetězec necháte na vás.
Mimochodem, musím se vás zeptat, zda jste provedli ZSCAN MySet 0 MATCH Id:92 count 1
vrátit kurzor? Mám podezření, že jste použili ZSCAN
špatným způsobem.
Řešení 2 (lepší, důrazně doporučeno)
ZSCAN
je dobré, když vaše seřazená sada není velká a víte, jak ušetřit čas zpáteční cesty po síti pomocí transakce Redis' Lua. To stále dělá operaci "vyhledat podle ID" O(n). Proto je lepším řešením změnit svůj datový model následujícím způsobem:
změnit seřazenou sadu od
# Score Value
0 1443476076 {"Id":"92","Ref":"7ADT","DTime":1443476076,"ATime":1443901554,"ExTime":0,"SPName":"7ADT33CFSAU6","StPName":"7ADT33CFSAU6"}
1 1443482969 {"Id":"11","Ref":"DAJT","DTime":1443482969,"ATime":1443901326,"ExTime":0,"SPName":"DAJTJTT4T02O","StPName":"DAJTJTT4T02O"}
do
# Score Value
0 1443476076 Id:92
1 1443482969 Id:11
Přesuňte zbývající podrobná data do jiné sady klíčů typu hash:
# Key field-value field-value ...
0 Id:92 Ref-7ADT DTime-1443476076 ...
1 Id:11 Ref-7ADT DTime-1443476076 ...
Poté vyhledejte podle id provedením hgetall id:92
. Pokud jde o dotaz seřazený podle data, musíte provést ZRANGEBYSCORE sortedset mindate maxdate
pak hgetall
každé ID jedno po druhém. Raději použijte lua k zabalení těchto příkazů do jednoho a stále to bude super rychlé!
Data v databázi NoSql musí být organizována redundantním způsobem, jak je uvedeno výše. To může způsobit, že některé obvyklé operace zahrnují více než jeden příkaz a zpáteční cestu, ale lze to vyřešit pomocí funkce lua společnosti redis. Důrazně doporučuji funkci lua redis, protože zabaluje příkazy do jednoho síťového zpátečního spojení, které jsou všechny prováděny na straně redis-serveru a jsou atomické a super rychlé!
Odpovězte, pokud něco nevíte