2011-10-26 10 views
11

¿Cómo puedo determinar por qué Enyim volvió falsa de la siguiente llamada:¿Cómo puedo determinar por qué Enyim Memcache devuelve falso cuando almacena un elemento?

cache.Store(Enyim.Caching.Memcached.StoreMode.Set, key, value); 

Otros artículos están siendo almacenados bien, por lo que no parece ser un problema con una conexión con el servidor. El objeto no parece ser mayor que 1 MB.

Entonces, ¿cómo puedo determinar qué está causando lo falso?

+2

Debería poder configurar el registro para registrar todo el tráfico creado por su cliente. Esto debería permitirle ver qué error se informó. La información sobre el registro está aquí: https://github.com/enyim/EnyimMemcached/wiki/Configure-Logging – mikewied

Respuesta

0

Una posibilidad es que su clave puede incluir caracteres ilegales. Normalmente, el extremo inferior de los caracteres ASCII puede causar esto: creo que 0x30 y superiores son ciertamente seguros, y posiblemente 0x20 y superiores también. Si se hace referencia a ASCII character chart, puede ver que de 0x00 a 0x1F son en gran medida caracteres especiales. 0x20 hasta 0x2F son caracteres "normales", pero en algunos materiales de referencia que he visto mencionar que también se pueden usar como personajes de control.

Este problema me causó algunos problemas; Lo he resuelto construyendo una clave altamente única, sin tener en cuenta la longitud, y generando una suma de comprobación MD5 de la clave. La suma de MD5 garantiza un riesgo mínimo de colisión de claves, caracteres seguros y una longitud más corta que la clave real.

+0

Hmm, buena idea, pero no, las claves que están causando los problemas no contienen ningún carácter extraño. – Dugan

0

Memcached limita el tamaño de los objetos por defecto a menos de 1MB. Verifique la configuración en su servidor memcached. El límite es configurable, pero no se recomienda cambiarlo, ya que afectará el rendimiento general del servidor.

+1

Todos están por debajo de 1MB, como menciono en la publicación. – Dugan

0

Completamos totalmente el cliente Enyim para crear métodos estáticos que hicieran la conexión correcta. También hicimos dos cosas en nuestro código de contenedor:

1) Comprobar que la clave es < = 250 caracteres y contiene caracteres válidos 2) Compruebe que la longitud es < 1mb. Verificamos la longitud en cadenas y en bytes [].

También solicitamos una solicitud de mejora. Es: http://www.couchbase.org/issues/browse/NCBC-10

1

Otra cosa para comprobar es que todo el gráfico de objetos que está almacenando es [Serializable]. Si no es así, Enyim lanzará una excepción de serialización, que le indicará qué tipo debe marcarse como serializable. Siga las instrucciones al https://github.com/enyim/EnyimMemcached/wiki/Configure-Logging para habilitar el registro.

Cuestiones relacionadas