以下のクラス形式のオブジェクトをキャッシュしています。
public class CachedObject {
@javax.persistence.Transient
public List<ObjectA> objectAs;
@javax.persistence.Transient
public Date cacheExpirationDate;
}
キャッシュされたオブジェクトの有効期限をチェックし、有効期限が切れる前にキャッシュを更新するプロセスがあります。更新がある場合、replace (spymemcached) メソッドを使用してキャッシュされたオブジェクトを更新する別のプロセスもあります。私たちの状況では、通常、更新は objectAs に対して行われます。キャッシュされたオブジェクトが削除されることはありません。また、デフォルトのスラブ (1MB) サイズ設定で memcached を開始しました。
問題: 一部のオブジェクトを取得すると、キャッシュ オブジェクトが null ではなく、objectAs が null であることがわかります。その後、objectAs で何かをしようとすると、null ポインター例外が発生します。確認したところ、キャッシュ/更新の前に常に objectAs 値を設定しています。また、telnet インターフェイスから不完全なキャッシュ オブジェクトを確認しました。キャッシュを更新すると、キャッシュ内の完全なオブジェクトが表示されるようになりました。
誰かがおそらく間違っている可能性があることを提案できますか?