aws - Mejores prácticas de Memcached: ¿objetos pequeños y muchas llaves o objetos grandes y pocas llaves?
memcached windows (6)
Cuanto menos procesamiento tenga que hacer de los valores en caché, mejor. Entonces, ¿por qué no solo los vueltas a la memoria caché individualmente?
Yo uso memcached
para almacenar el resultado entero de un cálculo complejo. ¡Tengo cientos de objetos enteros que podría almacenar en caché! ¿Debo almacenarlos en una única clave en un objeto más complejo o debo usar cientos de claves diferentes para los objetos? (los objetos que estoy almacenando en caché no necesitan ser invalidados más de una vez al día)
Depende de su aplicación. Aunque memcached es muy rápido, sí requiere alguna transmisión de solicitud y tiempo de búsqueda de memoria por solicitud. Esos números aumentan dependiendo de si el servidor está o no en la máquina local (localhost), en la red local o en un área amplia. El tamaño de tu caché generalmente no afecta la velocidad de búsqueda.
Entonces, si su aplicación está usando MUCHOS objetos por unidad de procesamiento (por solicitud, método o lo que usted tiene), entonces generalmente es mejor definir su caché de una manera que disminuya el número total de visitas a la caché, mientras que al mismo tiempo tiempo tratando de no duplicar datos de caché. Como todo lo demás, es un equilibrio.
es decir, si tiene una solicitud web que extrae una lista de entradas de blog, sería más beneficioso almacenar en caché toda la lista de objetos como una clave memcached, en lugar de (y esto es un ejemplo un poco malo, obviamente) almacenar en caché una matriz de claves de caché para esa lista, que se relaciona con objetos memcached individualmente.
Diría muchas pequeñas llaves. De esta forma, puede obtener el resultado exacto que desea en una llamada con un mínimo esfuerzo de serialización.
Si lo almacena en otro objeto (una matriz, por ejemplo) tendrá que buscar la matriz desde la memoria caché y luego recuperar el elemento que realmente desea de esa matriz, además de tener la sobrecarga de serializar / deserializar todo el objeto complejo de nuevo. Dependiendo de su idioma de elección, esto podría significar escribir manualmente una función de serialización / deserialización desde cero.
Escribí un análisis un tanto extenso en http://dammit.lt/2008/12/25/memcached-for-small-objects/ , que describe cómo optimizar el almacenamiento de objetos pequeños en memcached, puede arrojar bastante luz sobre el tema.
Depende de cuáles son esos números. Si pudiera, por ejemplo, agruparlos en rangos, entonces podría optimizar el almacenamiento. Si pudiera hash, en un mapa o hashtable y almacenar ese mapa serializado en memcached, sería bueno hacerlo.
De todos modos, puedes guardar muchas pequeñas claves, solo asegúrate de configurar las losas para que tengan trozos pequeños, para que no pierdas espacio en la memoria.
Yo diría que debes almacenar valores individualmente y usar algún tipo de clase auxiliar para recuperar valores con multiget y generar un objeto de datos complejo para ti.