3

Memcached.ClientLibrary を使用しようとしています。私はそれを機能させることができましたが、数回ヒットした後(初めてページを表示する前であっても)、検索時に情報が見つからないという奇妙なエラーが発生しました。

エラーメッセージ:

基になるストリームがシーク可能でない場合、読み取りバッファーが空でない間は BufferedStream に書き込むことはできません。この BufferedStream の基礎となるストリームが、この BufferedStream に対する読み取り操作と書き込み操作のインターリーブをシークまたは回避できることを確認してください。

スタックトレース:

[NotSupportedException: Cannot write to a BufferedStream while the read buffer is not empty if the underlying stream is not seekable. Ensure that the stream underlying this BufferedStream can seek or avoid interleaving read and write operations on this BufferedStream.]
System.IO.BufferedStream.ClearReadBufferBeforeWrite() +10447571
System.IO.BufferedStream.Write(Byte[] array, Int32 offset, Int32 count) +163
Memcached.ClientLibrary.SockIO.Write(Byte[] bytes, Int32 offset, Int32 count) in C:\devroot\memcacheddotnet\trunk\clientlib\src\clientlib\SockIO.cs:411
Memcached.ClientLibrary.SockIO.Write(Byte[] bytes) in C:\devroot\memcacheddotnet\trunk\clientlib\src\clientlib\SockIO.cs:391
Memcached.ClientLibrary.MemcachedClient.Set(String cmdname, String key, Object obj, DateTime expiry, Object hashCode, Boolean asString) in C:\devroot\memcacheddotnet\trunk\clientlib\src\clientlib\MemCachedClient.cs:766
Memcached.ClientLibrary.MemcachedClient.Set(String key, Object value, DateTime expiry) in C:\devroot\memcacheddotnet\trunk\clientlib\src\clientlib\MemCachedClient.cs:465
Yuusoft.Julian.Server.Models.Utils.Caching.CacheWrapper.Add(CacheKey key, T o, CacheDependency dependencies, Nullable`1 expirationTime, CacheItemRemovedCallback callBack)

初期化する私のコード(静的コンストラクター):

        SockIOPool pool = SockIOPool.GetInstance();
        pool.SetServers(CacheWrapper.Servers);

        pool.InitConnections = 3;
        pool.MinConnections = 1;
        pool.MaxConnections = 50;

        pool.SocketConnectTimeout = 1000;
        pool.SocketTimeout = 3000;

        pool.MaintenanceSleep = 30;
        pool.Failover = true;

        pool.Nagle = false;
        pool.Initialize();

// 設定するコード (2 番目はエラーです - 最初のヒットではありませんか?!)

        MemcachedClient mc = new MemcachedClient();
        mc.Set(key, o, expirationTime.Value);

// 取得するコード

        MemcachedClient mc = new MemcachedClient();
        object o = mc.Get(key);
4

1 に答える 1