Er der nogen anden måde at dumpe big data fra Redis til MySQL?
Redis har mulighed for (ved at bruge bgsave) at generere et dump af dataene på en ikke-blokerende og konsekvent måde.
https://github.com/sripathikrishnan/redis-rdb-tools
Du kan bruge Sripathi Krishnans velkendte pakke til at parse en redis dump-fil (RDB) i Python og udfylde MySQL-instansen offline. Eller du kan konvertere Redis-dumpen til JSON-format og skrive scripts på ethvert sprog, du vil udfylde MySQL.
Denne løsning er kun interessant, hvis du vil kopiere de komplette data fra Redis-instansen til MySQL.
Har Redis noget triggersystem, som jeg kan bruge til at undgå crons som køsystem?
Redis har intet trigger-koncept, men intet forhindrer dig i at poste begivenheder i Redis-køer, hver gang noget skal kopieres til MySQL. For eksempel i stedet for:
# Add an item to a user shopping cart
RPUSH user:<id>:cart <item>
du kunne udføre:
# Add an item to a user shopping cart
MULTI
RPUSH user:<id>:cart <item>
RPUSH cart_to_mysql <id>:<item>
EXEC
MULTI/EXEC-blokken gør den atomær og konsistent. Så skal du bare skrive en lille dæmon, der venter på elementer i cart_to_mysql-køen (ved hjælp af BLPOP-kommandoer). For hvert element, der er sat ud af kø, skal dæmonen hente de relevante data fra Redis og udfylde MySQL-instansen.
Redis fejler vores lagerdata i filen, så er det muligt at gemme disse data direkte i MySQL-databasen?
Jeg er ikke sikker på, at jeg forstår spørgsmålet her. Men hvis du bruger ovenstående løsning, vil forsinkelsen mellem Redis-opdateringer og MySQL-opdateringer være ret begrænset. Så hvis Redis fejler, vil du kun miste de allersidste operationer (i modsætning til en løsning baseret på cron-job). Det er selvfølgelig ikke muligt at have 100 % konsistens i udbredelsen af data.