sql >> Database >  >> NoSQL >> Redis

Wat is de beste strategie om Redis-gegevens te synchroniseren met MySQL?

Je hoeft niets te hacken;)

Ik weet niet helemaal zeker waarom je de gegevens op mysql nodig hebt. Als ik het wist, zou er misschien een passender antwoord zijn. Als generiek antwoord kunt u in ieder geval redis keyspace-meldingen gebruiken

U kunt zich abonneren op de opdrachten HSET, HMSET, HDEL en DEL op uw sleutels, zodat u een melding krijgt telkens wanneer een sleutel wordt verwijderd of een hash-waarde wordt ingesteld of verwijderd.

Merk op dat als u een melding mist, u een inconsistentie zou hebben. Dus af en toe kun je gewoon het SCAN-commando gebruiken om al je sleutels te doorlopen en op mysql te controleren of ze moeten worden bijgewerkt.

Een andere strategie zou het handhaven van twee afzonderlijke structuren kunnen zijn. De ene zou de hash met de waarden zijn en de andere zou een ZSET zijn van alle waarden gesorteerd op tijdstempel van de update. De beste manier om beide structuren up-to-date te houden, is door twee of drie lua-scripts te schrijven (invoegen/bijwerken en verwijderen) die atomair op de hash en de zset werken.

Vervolgens kunt u de ZSET periodiek opvragen voor de elementen met een tijdstempel hoger dan uw laatste synchronisatiebewerking, alle sleutels ophalen die zijn bijgewerkt (het zou verwijderde sleutels bevatten, tenzij u een tweede ZSET exclusief voor die elementen wilt behouden) en dan gewoon haal alle elementen per sleutel op en synchroniseer met mysql.

Ik hoop dat het voor u zal werken!



  1. Alle veldnamen in een mongodb-verzameling krijgen?

  2. Redis - Verlopen indexen worden niet verwijderd

  3. Verander het type veld binnen mongoDB-aggregatie en gebruikt $lookup index op velden of niet?

  4. Laravel 5.5 redis-wachtrij is te traag