redis
Redis-nycklar
Sök…
Introduktion
Redis-tangentområdet kan betraktas som en hash-tabell eller ordbokskartläggningsknappar till datastrukturer i databasen.
Redis tillhandahåller ett brett utbud av kommandon som arbetar med nycklar för att hantera nyckelområdet, inklusive möjligheten att ta bort nycklar, inspektera nyckelmetadata, söka efter nycklar och ändra vissa egenskaper för nycklar.
Syntax
- NYCKELMönster
- PERSIST-nyckel
- EXPIRE-knappsekunder
- EXPIREAT nyckeltidstämpel
- TTL-nyckel
- PEXPIRE viktiga millisekunder
- PEXPIREAT nyckel millisekunder-tidsstämpel
- PTTL-nyckel
- UNLINK-knapp [nyckel ...]
- DEL-tangent [nyckel ...]
- SCAN-markör [MATCH-mönster] [COUNT count]
Anmärkningar
För giltiga tecken i Redis-nycklar förklarar manualen detta helt :
Redisnycklar är binära säkra, det betyder att du kan använda valfri binärsekvens som nyckel, från en sträng som "foo" till innehållet i en JPEG-fil. Den tomma strängen är också en giltig nyckel.
Några andra regler om nycklar:
Mycket långa nycklar är inte en bra idé, till exempel är en nyckel på 1024 byte en dålig idé, inte bara minnesmässigt, utan också för att uppslaget av nyckeln i datasatsen kan kräva flera dyra nyckeljämförelser. Även när uppgiften är att matcha förekomsten av ett stort värde, är det en bättre idé att ta till det hashning (till exempel med SHA1), särskilt med tanke på minne och bandbredd.
Mycket korta tangenter är ofta inte bra. Det är liten mening att skriva "u1000flw" som nyckel om du istället kan skriva "user: 1000: followers". Det senare är mer läsbart och det tillagda utrymmet är mindre jämfört med det utrymme som används av själva nyckelobjektet och värdeobjektet. Medan korta tangenter naturligtvis förbrukar lite mindre minne, är ditt jobb att hitta rätt balans.
Försök att hålla fast vid ett schema. Till exempel är "objekttyp: id" en bra idé, som i "användare: 1000". Prickar eller streck används ofta för flerordsfält, som i "kommentar: 1234: svar.to" eller "kommentar: 1234: svar-till".
Den maximala tillåtna nyckelstorleken är 512 MB.
Var försiktig med att använda KEYS-kommandot mot ett produktionssystem, det kan orsaka allvarliga prestandaproblem. Om du behöver göra en sökning mot tangentområdet är SCAN- kommandona ett bättre alternativ.
Giltiga nycklar
Redis-nycklar är binära säkra, så bokstavligen kan allt användas som en nyckel. De enda begränsningarna är att de måste vara mindre än 512 MB.
Exempel på giltiga nycklar:
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.
Ogiltiga redisnycklar:
Anything larger than 512MB.
Nyckelnamnsscheman
För tydlighet och underhåll rekommenderas det ofta att utveckla ett system eller ett schema för namngivning av dina Redis-nycklar. Här är några exempel på vanliga och underhållbara system för namngivning av dina nycklar:
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
Observera att även om det är tillåtet använder större tangenter mer minne och resulterar i långsammare uppslagstider, så att använda en 500MB-nyckel kanske inte är en bra idé för prestanda. En bättre idé kan vara att använda en SHA-1, SHA-256 eller MD5-hash för ett stort binärt objekt som nyckel istället:
image/9517bb726d33efdc503a43582e6ea2eea309482b
image52e9df0577fca2ce022d4e8c86b1eccb070d37bef09dec36df2fabbfa7711f5c
Visar alla nycklar
Du kan lista alla nycklar i en Redis-databas genom att utföra följande kommandon från redis-cli:
KEYS *
Parametern för KEYS är ett globalt stilmässigt matchande uttryck. Exempel på stöttade mönster inkluderar:
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
Att använda KEYS * -kommandot kan påverka prestandan negativt, så det rekommenderas inte mot produktionsfall. Använd SCAN-operationen för att söka efter nycklar i produktionskod.
TTL och nyckeltid
Utgångsvärdena för en nyckel kan hanteras av en användare utanför uppdateringskommandona. Redis tillåter en användare att bestämma den aktuella tiden att leva (TTL) för en nyckel med hjälp av TTL-kommandot:
TTL key
Detta kommando returnerar TTL för en knapp på några sekunder eller returnerar specialvärden -1 eller -2. A -1 indikerar att nyckeln är beständig (går inte ut) och en -2 indikerar att nyckeln inte finns.
En utgångsnyckel kan göras ihållande med kommandot PERSIST:
PERSIST KEY
och en ihållande nyckel kan göras för att löpa ut med hjälp av kommandot EXPIRE:
EXPIRE KEY seconds
Expire kan också användas för att modifiera TTL för en befintlig nyckel. Alternativt kan du använda EXPIREAT-kommandot med en UNIX-tidsstämpel för att ställa in en utgångstid.
Det finns millisekundversioner av kommandona TTL, EXPIRE och EXPIREAT som är förinställda med en P.
Ta bort nycklar
Redis har två funktioner för att ta bort nycklar från databasen: del och unlink.
Delfunktionen tar bort en eller flera nycklar från databasen. Del-kommandot gör att Redis omedelbart tar tillbaka minnet för den raderade tangenten på den aktuella exekveringstråden. Exekveringstiden för del är proportionell mot antalet enskilda element som raderas från alla tangenter.
Länkfunktionen fungerar som del-kommandot, den tar bort en eller flera nycklar från databasen. Till skillnad från kommandot del återvinns emellertid minnet som används av dessa knappar asynkront på en annan tråd.
Skanna Redis Keyspace
Redis tillhandahåller SCAN-kommandot för att iterera över nycklarna i databasen som matchar ett visst mönster. Redis stöder globalt mönstermatchning i SCAN-kommandot.
SCAN-kommandot tillhandahåller en markörbaserad iterator över Redis-tangentområdet. Den iterativa samtalssekvensen till SCAN börjar med att användaren ringer ett samtal med markörargumentet inställt på 0. Resultatet av det samtalet är en bunt med objekt och en uppdaterad markör som levereras till nästa samtal till SCAN. Denna iteration fortsätter tills Redis returnerar en 0-markör.
Följande Python-funktion visar den grundläggande användningen av 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
SCAN-kommandot är det rekommenderade sättet att söka efter nycklar i databasen och rekommenderas via KEYS *
.