2011-10-26 10 views
11

Come posso determinare perché Enyim restituito falso dal seguente invito:Come determinare il motivo per cui Enyim memcache restituisce false durante l'archiviazione di un articolo?

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

Altri elementi sono sempre conservato bene, in modo che non sembra essere un problema con una connessione al server. L'oggetto non sembra essere superiore a 1 MB.

Quindi, come posso determinare cosa sta causando il falso?

+2

Dovresti essere in grado di configurare la registrazione per registrare tutto il traffico creato dal client. Questo dovrebbe consentire di vedere quale errore è stato segnalato. Le informazioni sulla registrazione sono qui: https://github.com/enyim/EnyimMemcached/wiki/Configure-Logging – mikewied

risposta

0

Una possibilità è che la chiave possa includere caratteri non validi. In genere il molto basso dei caratteri ASCII può causare questo - credo che 0x30 e sopra siano sicuramente sicuri, e probabilmente anche 0x20 e superiori. Reimpostare un ASCII character chart è possibile vedere da 0x00 a 0x1F sono caratteri in gran parte speciali. 0x20 thru 0x2F sono caratteri "normali", ma in alcuni materiali di riferimento ho visto che potrebbero essere usati anche come caratteri di controllo.

Questo problema mi ha causato alcuni problemi; L'ho risolto costruendo una chiave molto particolare, con scarsa considerazione per la lunghezza, quindi generando un checksum MD5 della chiave. La somma MD5 garantisce un rischio minimo di collisione dei tasti, caratteri sicuri e una lunghezza inferiore rispetto alla chiave effettiva.

+0

Hmm, buona idea, ma no, i tasti che causano i problemi non contengono caratteri strani. – Dugan

0

Memcached limita la dimensione degli oggetti per impostazione predefinita a meno di 1 MB. Controlla la configurazione sul tuo server memcached. Il limite è configurabile, ma non consigliato per essere modificato in quanto influenzerà le prestazioni generali del server stesso.

+1

Sono tutti sotto 1 MB, come ho detto nel post. – Dugan

0

Abbiamo completamente avvolto il client Enyim per rendere i metodi statici che hanno fatto il giusto pool di connessioni. Abbiamo anche fatto due cose nel nostro codice wrapper:

1) Verificare che la chiave è < = 250 caratteri e contiene caratteri validi 2) Verificare che la lunghezza è < 1 MB. Controlliamo la lunghezza su stringhe e su byte [].

Abbiamo anche richiesto una richiesta di miglioramento. È: http://www.couchbase.org/issues/browse/NCBC-10

1

Un'altra cosa da verificare è che l'intero grafico oggetto che si sta memorizzando è [Serializable]. In caso contrario, Enyim genererà un'eccezione di serializzazione, che indicherà quale tipo deve essere contrassegnato come serializzabile. Seguire le istruzioni su https://github.com/enyim/EnyimMemcached/wiki/Configure-Logging per abilitare la registrazione.

Problemi correlati