redis
Redis Keys
Zoeken…
Invoering
De Redis-sleutelruimte kan worden beschouwd als een hashtabel of woordenboektoetsen voor gegevensstructuren in de database.
Redis biedt een breed scala aan opdrachten die werken met sleutels om de sleutelruimte te beheren, inclusief de mogelijkheid om sleutels te verwijderen, sleutelmetagegevens te inspecteren, naar sleutels te zoeken en bepaalde eigenschappen van sleutels te wijzigen.
Syntaxis
- SLEUTELS patroon
- PERSIST-toets
- VERLOPEN belangrijke seconden
- EXPIREAT-toets tijdstempel
- TTL-toets
- PEXPIRE belangrijke milliseconden
- PEXPIREAT belangrijkste milliseconden-tijdstempel
- PTTL-toets
- UNLINK-toets [key ...]
- DEL-toets [toets ...]
- SCAN cursor [MATCH patroon] [COUNT count]
Opmerkingen
Voor geldige tekens in Redis-toetsen wordt dit volledig uitgelegd in de handleiding :
Redis-sleutels zijn binair veilig, dit betekent dat u elke binaire reeks als sleutel kunt gebruiken, van een string als "foo" tot de inhoud van een JPEG-bestand. De lege string is ook een geldige sleutel.
Een paar andere regels over sleutels:
Zeer lange sleutels zijn geen goed idee, bijvoorbeeld een sleutel van 1024 bytes is een slecht idee, niet alleen qua geheugen, maar ook omdat het opzoeken van de sleutel in de dataset verschillende dure sleutelvergelijkingen kan vereisen. Zelfs als het gaat om het matchen van het bestaan van een grote waarde, is het een beter idee om er gebruik van te maken (bijvoorbeeld met SHA1), vooral vanuit het oogpunt van geheugen en bandbreedte.
Zeer korte toetsen zijn vaak geen goed idee. Het heeft weinig zin om "u1000flw" als sleutel te schrijven als u in plaats daarvan "user: 1000: volgers" kunt schrijven. Dit laatste is beter leesbaar en de toegevoegde ruimte is gering vergeleken met de ruimte die wordt gebruikt door het sleutelobject zelf en het waardeobject. Hoewel korte toetsen duidelijk wat minder geheugen verbruiken, is het uw taak om de juiste balans te vinden.
Probeer je aan een schema te houden. "Object-type: id" is bijvoorbeeld een goed idee, zoals in "user: 1000". Punten of streepjes worden vaak gebruikt voor velden met meerdere woorden, zoals in "comment: 1234: reply.to" of "comment: 1234: reply-to".
De maximaal toegestane sleutelgrootte is 512 MB.
Wees voorzichtig met het gebruik van het KEYS-commando tegen een productiesysteem, dit kan ernstige prestatieproblemen veroorzaken. Als u een zoekopdracht in de keyspace moet uitvoeren, zijn de SCAN- opdrachten een beter alternatief.
Geldige sleutels
Redis-sleutels zijn binair veilig, dus letterlijk alles kan als sleutel worden gebruikt. De enige beperkingen zijn dat ze minder dan 512 MB moeten zijn.
Voorbeelden van geldige sleutels:
7
++++
`~!@#$%^&*()-_=+
user:10134
search/9947372/?query=this%20is%20a%28test%29%20query
<div id="div64">
Any other string less than 512MB in size.
The raw binary content of an image or other binary file.
An entire multi-line text document.
An entire SQL query.
Any integer, hexadecimal, octal, or binary value.
Anything else you can think of less than 512MB in size.
Ongeldige Redis-sleutels:
Anything larger than 512MB.
Key Naming Schemes
Voor de duidelijkheid en onderhoudbaarheid wordt het vaak aanbevolen om een systeem of schema te ontwikkelen voor het benoemen van uw Redis-sleutels. Hier zijn enkele voorbeelden van veelgebruikte en onderhoudbare systemen voor het benoemen van uw sleutels:
user:10134
user:10134:favorites
user:10134:friends
user:10134:friends-of-friends
user:10134
user:10134/favorites
user:10134/friends
user:10134/friends.of.friends
user/10134
user/10134/favorites
user/10134/friends
user/10134/friends of friends
Houd er rekening mee dat, hoewel toegestaan, grotere toetsen meer geheugen gebruiken en leiden tot langzamere opzoektijden, dus het gebruik van een sleutel van 500 MB is misschien geen goed idee voor prestaties. Een beter idee zou kunnen zijn om in plaats daarvan een SHA-1, SHA-256 of MD5 hash van een groot binair object als sleutel te gebruiken:
image/9517bb726d33efdc503a43582e6ea2eea309482b
image52e9df0577fca2ce022d4e8c86b1eccb070d37bef09dec36df2fabbfa7711f5c
Lijst met alle sleutels
U kunt alle sleutels in een Redis-database weergeven door de volgende opdrachten van redis-cli uit te voeren:
KEYS *
De parameter voor KEYS is een uitdrukking voor het matchen van patronen in globale stijl. Voorbeelden van ondersteunde patronen zijn onder meer:
h?llo matches hello, hallo and hxllo
h*llo matches hllo and heeeello
h[ae]llo matches hello and hallo, but not hillo
h[^e]llo matches hallo, hbllo, ... but not hello
h[a-b]llo matches hallo and hbllo
Het gebruik van het KEYS * -commando kan de prestaties nadelig beïnvloeden, dus het wordt niet aanbevolen voor productie-exemplaren. Gebruik de SCAN-bewerking om te zoeken naar sleutels in productiecode.
TTL en vervaldatum van de sleutel
De vervalwaarden van een sleutel kunnen worden beheerd door een gebruiker buiten de update-opdrachten. Met Redis kan een gebruiker de huidige tijd tot leven (TTL) van een sleutel bepalen met behulp van het TTL-commando:
TTL key
Dit commando retourneert de TTL van een sleutel in seconden of retourneert de speciale waarden -1 of -2. Een -1 geeft aan dat de sleutel persistent is (verloopt niet) en een -2 geeft aan dat de sleutel niet bestaat.
Een verlopen sleutel kan permanent worden gemaakt met behulp van de opdracht PERSIST:
PERSIST KEY
en een persistente sleutel kan worden vervallen met behulp van de opdracht EXPIRE:
EXPIRE KEY seconds
Vervallen kan ook worden gebruikt om de TTL van een bestaande sleutel te wijzigen. U kunt ook de opdracht EXPIREAT gebruiken met een UNIX-tijdstempel om een vervaltijd in te stellen.
Er zijn milliseconde versies van TTL-, EXPIRE- en EXPIREAT-opdrachten die worden voorafgegaan door een P.
Sleutels verwijderen
Redis biedt twee functies voor het verwijderen van sleutels uit de database: del en ontkoppelen.
De del-functie verwijdert een of meer sleutels uit de database. De opdracht del zorgt ervoor dat Redis het geheugen voor de verwijderde sleutel in de huidige thread van uitvoering onmiddellijk terugwint. De uitvoeringstijd voor del is evenredig met het aantal afzonderlijke elementen dat uit alle toetsen is verwijderd.
De functie voor ontkoppelen werkt als de opdracht del, deze verwijdert een of meer sleutels uit de database. In tegenstelling tot het commando del wordt elk geheugen dat door die toetsen wordt gebruikt asynchroon op een andere thread teruggewonnen.
Scannen van de Redis Keyspace
Redis biedt het SCAN-commando om de sleutels in de database te herhalen die overeenkomen met een bepaald patroon. Redis ondersteunt patroonaanpassing in globale stijl in het SCAN-commando.
De opdracht SCAN biedt een cursorgebaseerde iterator over de Redis-sleutelruimte. De iteratieve oproepvolgorde voor SCAN begint met de gebruiker die een oproep doet met het cursorargument ingesteld op 0. Het resultaat van die oproep is een batch items en een bijgewerkte cursor die wordt geleverd aan de volgende oproep naar SCAN. Deze iteratie gaat door totdat Redis een cursor 0 retourneert.
De volgende Python-functie demonstreert het basisgebruik van SCAN:
def scan_keys(r, pattern):
"Returns a list of all the keys matching a given pattern"
result = []
cur, keys = r.scan(cursor=0, match=pattern, count=2)
result.extend(keys)
while cur != 0:
cur, keys = r.scan(cursor=cur, match=pattern, count=2)
result.extend(keys)
return result
De opdracht SCAN is de aanbevolen manier om naar sleutels in de database te zoeken en wordt aanbevolen via de opdracht KEYS *
.