Directorio artículo
Avance
Avanzada -Redis Redis problemas de diseño clave y BigKey áspera discuten BigKey, donde seguimos a venir a estudiar en BigKey
Redis Versión: 5.0.3
Analógico escribir BigKey
¿Cómo encontrar BigKey
Nada más que resumir algunos puntos
- registro excepción de aplicación (que no se ve directamente de la palabra clave de registro, porque después de esto bigkey bloqueado, dará lugar a algunas preguntas extrañas, tales como el acceso a no ver la conexión de la agrupación de conexiones, etc.)
- --bigkeys Redis-CLI
- Sistema de monitoreo de informe
- Otros ...
--bigkeys Redis-CLI
mirada Redis-cli en qué parámetros son compatibles
[redis@artisan bin]$ ./redis-cli --help
redis-cli 5.0.3
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h <hostname> Server hostname (default: 127.0.0.1).
-p <port> Server port (default: 6379).
-s <socket> Server socket (overrides hostname and port).
-a <password> Password to use when connecting to the server.
You can also use the REDISCLI_AUTH environment
variable to pass this password more safely
(if both are used, this argument takes predecence).
-u <uri> Server URI.
-r <repeat> Execute specified command N times.
-i <interval> When -r is used, waits <interval> seconds per command.
It is possible to specify sub-second times like -i 0.1.
-n <db> Database number.
-x Read last argument from STDIN.
-d <delimiter> Multi-bulk delimiter in for raw formatting (default: \n).
-c Enable cluster mode (follow -ASK and -MOVED redirections).
--raw Use raw formatting for replies (default when STDOUT is
not a tty).
--no-raw Force formatted output even when STDOUT is not a tty.
--csv Output in CSV format.
--stat Print rolling stats about server: mem, clients, ...
--latency Enter a special mode continuously sampling latency.
If you use this mode in an interactive session it runs
forever displaying real-time stats. Otherwise if --raw or
--csv is specified, or if you redirect the output to a non
TTY, it samples the latency for 1 second (you can use
-i to change the interval), then produces a single output
and exits.
--latency-history Like --latency but tracking latency changes over time.
Default time interval is 15 sec. Change it using -i.
--latency-dist Shows latency as a spectrum, requires xterm 256 colors.
Default time interval is 1 sec. Change it using -i.
--lru-test <keys> Simulate a cache workload with an 80-20 distribution.
--replica Simulate a replica showing commands received from the master.
--rdb <filename> Transfer an RDB dump from remote server to local file.
--pipe Transfer raw Redis protocol from stdin to server.
--pipe-timeout <n> In --pipe mode, abort with error if after sending all data.
no reply is received within <n> seconds.
Default timeout: 30. Use 0 to wait forever.
--bigkeys Sample Redis keys looking for big keys.
--hotkeys Sample Redis keys looking for hot keys.
only works when maxmemory-policy is *lfu.
--scan List all keys using the SCAN command.
--pattern <pat> Useful with --scan to specify a SCAN pattern.
--intrinsic-latency <sec> Run a test to measure intrinsic system latency.
The test will run for the specified amount of seconds.
--eval <file> Send an EVAL command using the Lua script at <file>.
--ldb Used with --eval enable the Redis Lua debugger.
--ldb-sync-mode Like --ldb but uses the synchronous Lua debugger, in
this mode the server is blocked and script changes are
not rolled back from the server memory.
--cluster <command> [args...] [opts...]
Cluster Manager command and arguments (see below).
--verbose Verbose mode.
--no-auth-warning Don't show warning message when using password on command
line interface.
--help Output this help and exit.
--version Output version and exit.
Cluster Manager Commands:
Use --cluster help to list all available cluster manager commands.
Examples:
cat /etc/passwd | redis-cli -x set mypasswd
redis-cli get mypasswd
redis-cli -r 100 lpush mylist x
redis-cli -r 100 -i 1 info | grep used_memory_human:
redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3
redis-cli --scan --pattern '*:12345*'
(Note: when using --eval the comma separates KEYS[] from ARGV[] items)
When no command is given, redis-cli starts in interactive mode.
Type "help" in interactive mode for information on available commands
and settings.
[redis@artisan bin]$
Herramientas proporcionadas por el funcionario
detección de la ejecución
[redis@artisan bin]$ ./redis-cli --bigkeys
# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type. You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).
[00.00%] Biggest string found so far 'artisan43206' with 12 bytes
[37.40%] Biggest string found so far 'artisanBIG' with 26890 bytes
-------- summary -------
Sampled 100004 keys in the keyspace!
Total key length in bytes is 1188921 (avg len 11.89)
Biggest string found 'artisanBIG' has 26890 bytes
100004 strings with 1215805 bytes (100.00% of keys, avg size 12.16)
0 lists with 0 items (00.00% of keys, avg size 0.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
0 hashs with 0 fields (00.00% of keys, avg size 0.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)
0 streams with 0 entries (00.00% of keys, avg size 0.00)
[redis@artisan bin]$
Redis exploración se lleva a cabo por medio de estadísticas clave, sin la preocupación de que pueda interferir con Redis, desde un punto de vista de los resultados que encontramos artisanBIG este bigkey
objeto de depuración
El propio comando bloqueará Redis, si es O (N), N necesidad de centrarse en el tamaño.
# 查看artisanBIG序列化后的长度
[redis@artisan bin]$ ./redis-cli debug object artisanBIG
Value at:0x7fa527edd0b0 refcount:1 encoding:raw serializedlength:5044 lru:7863297 lru_seconds_idle:112
Los parámetros de salida:
- Valor en: la dirección de memoria de la llave
- refcount: citas
- codificación: codificación de tipo
- serializedlength: secuencia de longitud 5044 -> 5 KB, no representan a la talla, para referencia
- lru_seconds_idle: tiempo de inactividad
- ...
comando objeto: https://redis.io/commands/object
Qué elegante BigKey delete (borrar perezoso)
- La forma tradicional: DEL canto
DEL Indudablemente, orden de bloqueo, si es O (N) N es grande, deben tenerse en cuenta.
- Otro punto a considerar: Un poco juego de llaves una fecha de caducidad, la operación de cambio de nombre , éstos clave ReDiS propio mantenimiento, que se ocupan de estos BigKey, la misma será bloqueada. Y esta línea no se graban en la consulta lenta, que son capaces de detectar. (Consultas lentas sólo registran el comportamiento del cliente, el comportamiento del servidor Redis en sí no se grabará
- Recomendado: Redis 4.0 proporciona una eliminación (comando de desenlace) perezoso
Eso es alrededor de 4,0 versión, cómo hacer frente a estos bigKey ella? ----- ", lotes Borrar exploraciones
Nos centramos mirar -------------> comando de borrado UNLINK perezoso
documento oficial UNLINK: https://redis.io/commands/unlink
127.0.0.1:6379> UNLINK artisanBIG
(integer) 1
127.0.0.1:6379>
Varios elementos de configuración acerca de la lazyfree
- lazyfree-lazy-desalojo: si la clave de expulsión asíncrona, cuando la memoria alcanza el límite superior, la asignación falla
- lazyfree-lazy-caduca: si la clave de procesamiento asíncrono expiró eventos
- lazyfree-lazy-servidor-del: del si el comando se ejecuta la operación de borrado de forma asíncrona, similar a la de desvinculación
- réplica-lazy-ras: réplica de cliente para hacer una sincronización completa de las veces, ya sea asíncrona db locales ras
El valor por defecto no es, la demanda abierta
Cómo optimizar bigKey
- estructuras de datos optimizadas: cadenas? picadillo ?. . . .
- Razonable llave dividida: 1 grande dividida llave en pequeña N clave
- optimización del sistema: getall-> mget
- O aislamiento físico actualización de la tarjeta (paliativo)