Añadir vs Establecer en Memcached

17

No entiendo la diferencia entre ADD y SET ¿Alguna pista? Parece que ADD incluye SET o que ADD devuelve falso si hay algo allí y SET simplemente sobrescribe. ¡Gracias!

EDITAR: Mi pregunta específica es: "¿Cuándo usas agregar en lugar de establecer o establecer en lugar de agregar?"

usuario851171
fuente

Respuestas:

22

Ya tienes la respuesta a tu primera pregunta: la intención ADDes solo funcionar cuando una clave aún no existe, mientras SETestá allí para actualizar el valor, independientemente de si ya existe. Si está familiarizado con SQL, es (aproximadamente) como la diferencia entre INSERTconsultas ( ADD) y UPDATE( SET).

En lo que respecta a su pregunta de adición, usaría la que mejor se adapte a su propósito. Yo diría que esa SETsería la operación más común, porque es más común que solo quieras decir "Quiero que la clave footenga el valor bar, y no me importa si ya estaba allí o no". Sin embargo, habría ocasiones (menos frecuentes) en las que sería necesario saber que una clave ya no está en el caché.

Un ejemplo que viene a la mente cuando ADDsería apropiado es almacenar sesiones en Memcache (que, por cierto, no lo recomiendo): si está generando sus ID de sesión al azar (o mediante hash), no querrá para crear una nueva sesión con la misma clave que una existente, ya que esto otorgaría a un usuario acceso a los datos de otro usuario. En este caso, cuando creó la sesión que usaría ADD, y si devuelve un estado de falla, necesitaría generar una nueva ID de sesión e intentar nuevamente. La actualización de la sesión, por supuesto, se usaría a SETmedida que el usuario trabajara en su aplicación.

womble
fuente
1
Podría ser un poco quisquilloso aquí, pero en su comparación con SQL, si "agregar" se compara con INSERT, "set" se compararía con REPLACE en lugar de ACTUALIZAR.
matteo
2
De ahí el uso de la palabra "aproximadamente". Si desea obtener muy quisquillosa, REPLACEno es ni siquiera SQL ... es "el lenguaje de programación relajado inspirado por SQL que MySQL entiende" (sonrisa)
womble
3

Además de la respuesta anterior por ID de usuario 'womble', considere también los siguientes puntos:

  1. Posibilidad de una condición de carrera con 'set' en lugar de con 'add'. Vea a continuación el enlace a una respuesta de Nick Johnson: /programming/13234556/using-memcache-add-instead-of-set

  2. Si sabe que 'agregar' funcionará, entonces no use 'set'. Esto es para evitar el envío de datos a través de la red, ya que se trata de llamadas RPC . Y prácticamente todo el tiempo es consumido por el tráfico de red en lugar de buscar pares clave-valor en memcache. Entonces, si puede evitar el tráfico de red que es mejor, en ese caso su tiempo de respuesta será más rápido.


Vea Appstats ( https://developers.google.com/appengine/docs/python/tools/appstats (por Google)) y para comprender el punto # 2 más arriba, mire http://www.youtube.com/watch ? v = bvp7CuBWVgA por Guido Van Rossum (@Google)

dev-vb
fuente