いがにんのぼやきスマートフォン用の表示で見るいがにんのぼやきWEBエンジニアのブログ。IT、WEB、バンド、アニメ。C#単純に使うだけまずNugetでStackExchange.Redisをインストール。StackExchange.Redis;Azureの記事だけどこれが参考になる。cache.StringGet("key");例外Redisを使う以上、あらゆる例外に向き合わなければいけない。GitHubここではString型にJSONが入っていることを想定し値をオブジェクトにマッピングするときに、想定しうる例外を各々キャッチする処理を書いてみた。ここに挙げたコードを元に発生しうる例外を挙げてみる。単純に接続情報が間違えていた時やRedisが落ちた時。Redisの操作がある場合、一律でRedisConnectionExceptionをcatchしておかないと例外が発生し落ちる可能性がある。存在しないキーをStringGetメソッドに投げるとRedisValue型でNullを表すような値が返ってくる。それをDeserializeObjectに投げると当然例外が発生する。ここではArgumentExceptionになる。e);}String型ではない別の型で保存されていた場合String型が欲しい時にハッシュ型などの違う型で値が格納されている場合は一律でRedisServerExceptionが発生する。下の例だとマッピングしたクラスのプロパティはNullで何もマッピングされない。NullチェックをしないとNullReferenceExceptionが発生する。e);}中身がJSONではなくただの文字列の場合JSON形式で文字列が保存されていない場合Json.Net側でJsonReaderExceptionが発生する。中身が配列の文字列を格納したString型の場合Json.NetのJsonSerializationExceptionが発生する。e);}まとめこんな感じで数多の例外が発生する可能性がある。防御的に各々全ての例外をcatchしてもいいのだが、格納されている型が違うだとかJSONの形式として正しい形式で値が入っていないとかは値を保存する側のプログラムのバグや仕様把握漏れになると思うので取得側では契約的に例外をcatchしなくてもいいんじゃないかと思っている。間違えられた瞬間システムが落ちるので悩みどころ。最低限としては接続確認としてRedisConnectionExceptionと、キーが存在しないとき用に値のNullチェックあたりをして、そこからはシステムの要件と相談という形になりそう。