sql >> Database >  >> NoSQL >> Redis

Redis Poplijstitem Op aantal items

Ik neem aan dat je werkt aan een wachtrij , waarbij u 1000 items op één plaats invoegt en ze op meerdere plaatsen terughaalt in de volgorde waarin ze zijn ingevoegd .

Je kunt het niet met één commando bereiken, maar je kunt het met 2 commando's doen. Je kunt een lua-script schrijven om ze atomair te maken.

Lrange:http://redis.io/commands/lrange

Lrange list -100 -1

Hiermee worden de eerste 100 elementen in de lijst weergegeven. hier is de offset -100. Merk op dat hierdoor de items worden geretourneerd in de tegenovergestelde volgorde waarin deze is ingevoegd. Dus je moet de lus omkeren om het wachtrijmechanisme te garanderen.

Ltrim:http://redis.io/commands/ltrim

ltrim list 0 -101

Hiermee worden de eerste 100 elementen in de lijst bijgesneden. hier is 101 n+1 dus het moet 101 zijn. Hier is offset 101

Als je ze in een lua-blok schrijft, weet je zeker dat je de atomiciteit hebt.

Laat me je een eenvoudig voorbeeld geven.

U voegt 100 elementen op één plaats in.

lpush list 1 2 3 .. 100

Je hebt meerdere clients die elk toegang proberen te krijgen tot dit lua-blok. Stel dat uw n-waarde hier 5 is. 1stclient komt binnen en krijgt de eerste 5 elementen ingevoegd.

127.0.0.1:6379> lrange list -5 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"

Je bewaart ze in je lua-object en verwijdert ze.

127.0.0.1:6379> LTRIM list 0 -6
OK

breng ze terug naar je code, nu is het resultaat dat je wilt 1 2 3 4 5 maar wat je hebt is 5 4 3 2 1. Dus je moet de lus omkeren en de bewerking uitvoeren.

Wanneer de volgende klant binnenkomt, krijgt deze de volgende reeks waarden.

127.0.0.1:6379> lrange list -5 -1
1) "10"
2) "9"
3) "8"
4) "7"
5) "6"

Op deze manier kunt u uw behoefte realiseren. Ik hoop dat dit helpt.

BEWERKEN:

Lua-script:

local result = redis.call('lrange', 'list','-5','-1')
redis.call('ltrim','list','0','-6')
return result


  1. Percona Live Frankfurt 2018 - Evenementoverzicht en onze sessies

  2. Redis gesorteerde sets en de beste manier om uids op te slaan

  3. Redis:Is ZADD beter dan O(logN) wanneer het ingevoegde element aan het begin of het einde staat?

  4. Transparante database-failover voor uw toepassingen