3

との非常に厄介なクラッシュStackExchange.Redis SetAdd(key, val)

プログラムの GUID をキーにセットを設定したい。

(3 時間のデバッグ後)SetAdd(key, val)一部の GUID で動作することがわかりましたが、他の GUID ではクラッシュします。

        string key = "02639d71-0935-35e8-9d1b-9dd1a2a34629";
        const string val = "somevalue";

        db.SetAdd(key, val); // <=== Works

        key = "02639d71-0935-35e8-9d1b-9dd1a2a34627";
        db.SetAdd(key, val); // <=== CRASH @@!!@!@!

違いは最後の文字「9」対「7」

SetAddローカル GUID をキーとして使用できませんか?

環境: C# .NET 4 Win 8.1 VS2013

クラッシュ メッセージ:

An unhandled exception of type 'StackExchange.Redis.RedisServerException' occurred in StackExchange.Redis.dll
Additional information: WRONGTYPE Operation against a key holding the wrong kind of value

クラッシュポイントStackExchange.Redis

ここに画像の説明を入力

...

このコードを LINQPad でテストしました。同じところに落ちます。最初の GUID は機能しますが、2 番目の GUID は機能しません。

クラッシュはこれが原因ではなく、開始アプリの GUID であると思われます。

異なる GUID でさらにテストします。「7」で終わるものだけがクラッシュします。

    key = "02639d71-0935-35e8-9d1b-9dd1a2a34622";
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34623";
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34624";
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34625";
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34626";
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34627"; // <= crashes
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34628";
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34629";

...

KeyExistsStringIncrementStringSetkey = my GUID でうまく機能します。

4

1 に答える 1

5

Redis キーは不透明です。そのメッセージ:

WRONGTYPE 間違った種類の値を保持するキーに対する操作

「セット」ではないタイプのキーに以前にデータを保存したことを意味します。試してください(redis-cliで):

TYPE "02639d71-0935-35e8-9d1b-9dd1a2a34627"

これにより、既存のデータのデータ型がわかります。SADDキーが存在しない場合、またはキーが存在し、セットである場合にのみ使用できます。

于 2014-06-09T16:44:53.213 に答える