Ya tienes la respuesta a tu primera pregunta: la intención ADD
es solo funcionar cuando una clave aún no existe, mientras SET
está allí para actualizar el valor, independientemente de si ya existe. Si está familiarizado con SQL, es (aproximadamente) como la diferencia entre INSERT
consultas ( 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 SET
sería la operación más común, porque es más común que solo quieras decir "Quiero que la clave foo
tenga 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 ADD
serí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 SET
medida que el usuario trabajara en su aplicación.
REPLACE
no es ni siquiera SQL ... es "el lenguaje de programación relajado inspirado por SQL que MySQL entiende" (sonrisa)Además de la respuesta anterior por ID de usuario 'womble', considere también los siguientes puntos:
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
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)
fuente