

# Compatibilidad con memcached para MySQL
<a name="Appendix.MySQL.Options.memcached"></a>

Amazon RDS admite el uso de la interfaz `memcached` para las tablas de InnoDB que se introdujo en MySQL 5.6. La API de `memcached` permite a las aplicaciones utilizar las tablas de InnoDB de una manera similar a los almacenes de datos clave-valor de NoSQL.

**nota**  
La interfaz memcached ya no está disponible en MySQL 8.4. Al actualizar las instancias de base de datos a MySQL 8.4, debe deshabilitar `memcached` en los grupos de opciones existentes.

La interfaz `memcached` es una caché sencilla y basada en claves. Las aplicaciones utilizan `memcached` para insertar, manipular y recuperar pares de datos de clave-valor de la memoria caché. MySQL 5.6 introdujo un complemento que implementa un servicio de daemon que expone los datos de las tablas de InnoDB a través del protocolo de `memcached`. Para obtener más información acerca del complemento `memcached` de MySQL, consulte [InnoDB Integration with memcached](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached.html).

**A fin de habilitar el soporte de memcached para una instancia de base de datos RDS para MySQL**

1. Determine el grupo de seguridad que se utilizará para controlar el acceso a la interfaz `memcached`. Si el conjunto de aplicaciones que utilizan la interfaz SQL es el mismo que tendrá acceso a la interfaz `memcached`, puede utilizar el grupo de seguridad de la VPC existente utilizado por la interfaz de SQL. Si otro conjunto de aplicaciones va a acceder a la interfaz `memcached`, defina un grupo de seguridad de base de datos nuevo o una VPC nueva. Para obtener más información acerca de la administración de grupos de seguridad, consulte [Control de acceso con grupos de seguridad](Overview.RDSSecurityGroups.md) 

1. Cree un grupo de opciones de base de datos personalizado, seleccionando MySQL como versión y tipo de motor. Para obtener más información acerca de cómo crear un grupo de opciones, consulte [Creación de un grupo de opciones](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create).

1. Añada la opción `MEMCACHED` al grupo de opciones. Especifique el puerto que utilizará la interfaz `memcached` y el grupo de seguridad que se utilizará para controlar el acceso a la interfaz. Para obtener más información acerca de la adición de opciones, consulte [Agregar una opción a un grupo de opciones](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption).

1. Modifique las opciones para configurar los parámetros de `memcached`, si es necesario. Para obtener más información acerca de cómo modificar la configuración de las opciones, consulte [Modificación de una configuración de opciones](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption).

1. Aplique el grupo de opciones a una instancia. Amazon RDS permite usar `memcached` para esa instancia cuando se aplica el grupo de opciones:
   + Para poder usar `memcached` para una instancia nueva, especifique el grupo de opciones personalizado al lanzar la instancia. Para obtener más información acerca de cómo lanzar una instancia de MySQL, consulte [Creación de una instancia de base de datos de Amazon RDS](USER_CreateDBInstance.md).
   + Para poder usar `memcached` para una instancia existente, especifique el grupo de opciones personalizado al modificar la instancia. Para obtener más información acerca de la modificación de una instancia de base de datos de , consulte [Modificación de una instancia de base de datos de Amazon RDS](Overview.DBInstance.Modifying.md).

1. Especifique las columnas de las tablas de MySQL a las que se puede obtener acceso a través de la interfaz `memcached`. El complemento `memcached` crea una tabla de catálogo denominada `containers` en una base de datos dedicada denominada `innodb_memcache`. Inserte una fila en la tabla `containers` para asignar una tabla de InnoDB para el acceso a través de `memcached`. Especifique la columna de la tabla de InnoDB que se utiliza para almacenar los valores de clave de `memcached`, y una o varias columnas que se utilizan para almacenar los valores de datos asociados a la clave. También debe especificar el nombre que utiliza una aplicación de `memcached` para referirse a ese conjunto de columnas. Para obtener información detallada sobre cómo insertar filas en la tabla `containers`, consulte [InnoDB memcached Plugin Internals](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-internals.html). Para obtener un ejemplo de mapeo de una tabla InnoDB y acceso a ella a través de `memcached`, consulte [Writing Applications for the InnoDB memcached Plugin](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-developing.html).

1. Si las aplicaciones que acceden a la interfaz `memcached` se encuentran en equipos o instancias EC2 diferentes de los de las aplicaciones que utilizan la interfaz de SQL, añada la información de conexión para esos equipos al grupo de seguridad de la VPC asociado a la instancia de MySQL. Para obtener más información acerca de la administración de grupos de seguridad, consulte [Control de acceso con grupos de seguridad](Overview.RDSSecurityGroups.md).

Para desactivar la compatibilidad con `memcached` en una instancia, modifique la instancia y especifique el grupo de opciones predeterminado para la versión de MySQL. Para obtener más información acerca de la modificación de una instancia de base de datos de , consulte [Modificación de una instancia de base de datos de Amazon RDS](Overview.DBInstance.Modifying.md).

## Consideraciones de seguridad de la interfaz memcached de MySQL
<a name="w2aac47c83c15c13"></a>

El protocolo de `memcached` no admite la autenticación de usuarios. Para obtener más información sobre las consideraciones de seguridad de `memcached` de MySQL, consulte [Security Considerations for the InnoDB memcached Plugin](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-security.html) (Consideraciones de seguridad del complemento Memcached de InnoDB) en la documentación de MySQL.

Puede realizar las siguientes acciones para aumentar la seguridad de la interfaz `memcached`:
+ Al añadir la opción `MEMCACHED` al grupo de opciones, especifique un puerto distinto del predeterminado (11211).
+ Asegúrese de asociar la interfaz `memcached` a un grupo de seguridad de VPC que limite el acceso a las direcciones de los clientes o las instancias EC2 que sean conocidas y de confianza. Para obtener más información acerca de la administración de grupos de seguridad, consulte [Control de acceso con grupos de seguridad](Overview.RDSSecurityGroups.md).

## Información sobre la conexión de la interfaz memcached de MySQL
<a name="w2aac47c83c15c15"></a>

Para acceder a la interfaz `memcached`, una aplicación debe especificar tanto el nombre de DNS de la instancia de Amazon RDS como el número de puerto de `memcached`. Por ejemplo, si una instancia tiene el nombre de DNS `my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com` y la interfaz memcached utiliza el puerto 11212, la información de conexión especificada en PHP sería:

 

```
1. <?php
2. 
3. $cache = new Memcache;
4. $cache->connect('my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com',11212);
5. ?>
```

**Para encontrar el nombre DNS y el puerto de memcached de una instancia de base de datos de MySQL**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En la esquina superior derecha de la Consola de administración de AWS, seleccione la región que contiene la instancia de base de datos.

1. En el panel de navegación, seleccione **Databases (Bases de datos)**.

1. Seleccione el nombre de la instancia de base de datos MySQL para mostrar sus detalles.

1. En la sección **Connect**, anote el valor del campo **Endpoint**. El nombre DNS será igual al punto de enlace. Asimismo, observe que el puerto de la sección **Connect** no se utiliza para obtener acceso a la interfaz de `memcached`.

1. En la sección **Details**, anote el nombre que aparece en el campo **Option Group**.

1. En el panel de navegación, elija **Option groups** (Grupos de opciones).

1. Seleccione el nombre del grupo de opciones utilizado por la instancia de base de datos MySQL para mostrar los detalles del grupo de opciones. En la sección **Options**, anote el valor de la configuración **Port** de la opción **MEMCACHED**.

## Opciones de configuración de la interfaz memcached de MySQL
<a name="w2aac47c83c15c17"></a>

Amazon RDS expone los parámetros de la interfaz `memcached` de MySQL como opciones de configuración de la opción `MEMCACHED` de Amazon RDS.

### Parámetros de la interfaz memcached de MySQL
<a name="w2aac47c83c15c17b4"></a>
+  `DAEMON_MEMCACHED_R_BATCH_SIZE`: valor entero que especifica cuántas operaciones de lectura (get) de `memcached` se deben realizar antes de utilizar COMMIT para iniciar una transacción nueva. Los valores permitidos son de 1 a 4294967295, el valor predeterminado es 1. La opción no surtirá efecto hasta que no se reinicie la instancia.
+  `DAEMON_MEMCACHED_W_BATCH_SIZE`: valor entero que especifica cuántas operaciones de escritura de `memcached`, como add, set o incr, se deben realizar antes de utilizar COMMIT para iniciar una transacción nueva. Los valores permitidos son de 1 a 4294967295, el valor predeterminado es 1. La opción no surtirá efecto hasta que no se reinicie la instancia.
+  `INNODB_API_BK_COMMIT_INTERVAL`: valor entero que especifica la frecuencia con la que se confirmarán automáticamente las conexiones inactivas que utilizan la interfaz `memcached` de InnoDB. Los valores permitidos son de 1 a 1073741824, el valor predeterminado es 5. La opción entra en vigor inmediatamente, sin necesidad de reiniciar la instancia.
+  `INNODB_API_DISABLE_ROWLOCK`: valor booleano que desactiva (1 (true)) o activa (0 (false)) el uso de los bloqueos de filas cuando se utiliza la interfaz `memcached` de InnoDB. El valor predeterminado es 0 (false). La opción no surtirá efecto hasta que no se reinicie la instancia.
+  `INNODB_API_ENABLE_MDL`: valor booleano que, cuando se establece en 0 (false), bloquea la tabla utilizada por el complemento `memcached` de InnoDB, de modo que no pueda ser eliminado ni alterado por DDL a través de la interfaz de SQL. El valor predeterminado es 0 (false). La opción no surtirá efecto hasta que no se reinicie la instancia.
+  `INNODB_API_TRX_LEVEL`: valor entero que especifica el nivel de aislamiento de transacciones para las consultas procesadas por la interfaz `memcached`. Los valores permitidos son de 0 a 3. El valor predeterminado es 0. La opción no surtirá efecto hasta que no se reinicie la instancia.

Amazon RDS configura estos parámetros de `memcached` en MySQL y no es posible modificarlos: `DAEMON_MEMCACHED_LIB_NAME`, `DAEMON_MEMCACHED_LIB_PATH` e `INNODB_API_ENABLE_BINLOG`. Los parámetros que los administradores de MySQL establecen utilizando `daemon_memcached_options` están disponibles como opciones de configuración individuales de `MEMCACHED` en Amazon RDS.

### Parámetros de daemon\$1memcached\$1options de MySQL
<a name="w2aac47c83c15c17b6"></a>
+  `BINDING_PROTOCOL`: cadena que especifica el protocolo de enlace que se va a utilizar. Los valores permitidos son `auto`, `ascii` o `binary`. El valor predeterminado es `auto`, que significa que el servidor negocia automáticamente el protocolo con el cliente. La opción no surtirá efecto hasta que no se reinicie la instancia.
+  `BACKLOG_QUEUE_LIMIT` – valor entero que especifica cuántas conexiones de red pueden estar esperando a que las procese `memcached`. Si se aumenta este límite, se pueden reducir los errores recibidos por un cliente que no puede conectarse a la instancia de `memcached`, pero no se mejora el desempeño del servidor. Los valores permitidos son de 1 a 2048, el valor predeterminado es 1024. La opción no surtirá efecto hasta que no se reinicie la instancia.
+  `CAS_DISABLED`: valor booleano que activa (1 (verdadero)) o desactiva (0 (false)) el uso de la función de comparación e intercambio (CAS), lo que reduce el tamaño por cada elemento en 8 bytes. El valor predeterminado es 0 (false). La opción no surtirá efecto hasta que no se reinicie la instancia.
+  `CHUNK_SIZE`: valor entero que especifica el tamaño mínimo del fragmento, en bytes, que se debe asignar para la clave, el valor y las marcas del elemento más pequeño. Los valores permitidos son de 1 a 48. El valor predeterminado es 48, y se puede mejorar significativamente la eficiencia de la memoria con un valor inferior. La opción no surtirá efecto hasta que no se reinicie la instancia.
+  `CHUNK_SIZE_GROWTH_FACTOR`: valor de coma flotante que controla el tamaño de los fragmentos nuevos. El tamaño de un fragmento nuevo es el tamaño de fragmento anterior multiplicado por `CHUNK_SIZE_GROWTH_FACTOR`. Los valores permitidos son de 1 a 2, el valor predeterminado es 1.25. La opción no surtirá efecto hasta que no se reinicie la instancia.
+  `ERROR_ON_MEMORY_EXHAUSTED`: valor booleano que, cuando se establece en 1 (true), especifica que `memcached` devolverá un error en lugar de desalojar elementos cuando no haya más memoria para almacenar elementos. Si se establece en 0 (false), `memcached` desalojará elementos cuando no haya más memoria. El valor predeterminado es 0 (false). La opción no surtirá efecto hasta que no se reinicie la instancia.
+  `MAX_SIMULTANEOUS_CONNECTIONS`: valor entero que especifica el número máximo de conexiones simultáneas. Si este valor es menor que 10, MySQL no se iniciará. Los valores permitidos son de 10 a 1024, el valor predeterminado es 1024. La opción no surtirá efecto hasta que no se reinicie la instancia.
+  `VERBOSITY`: cadena que especifica el nivel de información que el servicio `memcached` registra en el registro de errores de MySQL. La opción predeterminada es v. La opción no surtirá efecto hasta que no se reinicie la instancia. Los valores permitidos son:
  +  `v`: registra los errores y las advertencias mientras de ejecuta el bucle del evento principal.
  +  `vv`: además de la información registrada por v, también registra cada comando de cliente y la respuesta.
  +  `vvv`: además de la información registrada por vv, también registra las transiciones entre los estados internos.

Amazon RDS configura estos parámetros de `DAEMON_MEMCACHED_OPTIONS` en MySQL; no es posible modificarlos: `DAEMON_PROCESS`, `LARGE_MEMORY_PAGES`, `MAXIMUM_CORE_FILE_LIMIT`, `MAX_ITEM_SIZE`, `LOCK_DOWN_PAGE_MEMORY`, `MASK`, `IDFILE`, `REQUESTS_PER_EVENT`, `SOCKET` y `USER`.