sql >> Database >  >> NoSQL >> Redis

Redis Lua-script dat CAS implementeert (check-and-set)?

Volgens de documentatie van Redis zit je wat betreft atomiciteit goed:

Redis gebruikt dezelfde Lua-interpreter om alle opdrachten uit te voeren. Ook garandeert Redis dat een script op een atomaire manier wordt uitgevoerd:er wordt geen ander script of Redis-commando uitgevoerd terwijl een script wordt uitgevoerd. Deze semantiek is vergelijkbaar met die van MULTI / EXEC. Vanuit het oogpunt van alle andere clients zijn de effecten van een script nog steeds niet zichtbaar of al voltooid.

Als het script echter te traag is, veroorzaakt dit problemen. Dus script is het beste voor lichte operaties die enige logica en atomiciteit vereisen.

Een andere maas in de wet waar je in zou kunnen vallen, is dat als het script op de een of andere manier in het midden faalt, de aanroepen die je hebt gedaan niet kunnen worden teruggedraaid, hoewel het script een fout zal retourneren.

Bijv:je hebt een script als dit:

redis.call('set', 'foo', 1)
redis.call('rpush', 'foo', 2)

De uitvoering van het script geeft een fout terug, maar foo is al in redis ingesteld als 1 .

Iets dat niets met uw vraag te maken heeft:ik heb gemerkt dat u

eval "your_raw_code" key_count keys argv

eigenlijk zou je het lua-scriptbestand in eval kunnen aanroepen als je in de terminal bent:

> redis-cli eval "$(cat path/to/script/script_name.lua)" key_count keys argv



  1. Een tekstindex maken in MongoDB

  2. Scan strings met nodejs in redis

  3. Zal het redis incr-commando een beperking zijn tot een specifiek aantal?

  4. Waarom kan ik code niet opsporen in een asynchrone methode?