15 個のプロパティを保持するオブジェクトがあります。独自のタイプのリストに格納されているオブジェクトですが、リストは少し大きいです (330.000 オブジェクト)。オブジェクトをRedisに保存するように設定しましたが、すべて問題ありません。私が抱えている問題は、Redis からリストを取得するときに System.OutOfMemoryException を受け取ることです (十分なメモリとディスク容量があることに注意してください)。以下は例外のスタックトレースです
at System.String.CreateStringFromEncoding(Byte* bytes, Int32 byteLength, Encoding encoding)
at System.Text.UTF8Encoding.GetString(Byte[] bytes, Int32 index, Int32 count)
at ServiceStack.StringExtensions.FromUtf8Bytes(Byte[] bytes)
at ServiceStack.Redis.RedisClient.GetValue(String key)
at ServiceStack.Redis.RedisClient.<>c__DisplayClass1c`1.<Get>b__1b(RedisClient r)
at ServiceStack.Redis.RedisClient.Exec[T](Func`2 action)
at ServiceStack.Redis.RedisClient.Get[T](String key)
at KaysisClientCache.RedisCacheProvider.GetCache[T](CacheNames key, Func`2 query) in d:\BBProjects\BBSunucu\KaysisClientCache\RedisCacheProvider.cs:line 32
以下は、キャッシュを設定する方法です
redisClient.Set(cacheOb.Name, cacheItem, DateTime.Now.AddMinutes(cacheOb.TimeoutInMin));
これがキャッシュを取得する方法です
return query != null ? redisClient.Get<List<T>>(key.ToString()).Where(query).ToList() : redisClient.Get<List<T>>(key.ToString()).ToList();
ServiceStack.Redis ver. を使用しています。4.0.35.0