2016-07-29 5 views
1

Ich versuche, die HSCAN Befehl in Redis aufrufen laufen nur die Hash-Felder übereinstimmen, die über C# benötigt werdenkann nicht HSCAN mit Muster von .NET Stack Redis

Dies ist, was der Code wie

sieht
var options = new ConfigurationOptions 
{ 
    EndPoints = { "endpoint" }, 
    Proxy = Proxy.Twemproxy 
}; 
twemproxy_new = ConnectionMultiplexer.Connect(options); 
db = twemproxy_new.GetDatabase(); 
Dictionary<string,string> inputDict = new Dictionary<string, string>(); 
// populate inputDict with "n" fields & values 
var cachekey = "my_hash"; 
db.GetDatabase().HashSet(cachekey, inputDict, CommandFlags.FireAndForget); 

db.HashScan(cacheKey, "*9*"); 
// this is where it fails with the exception 
// Command is not available on your server: HSCAN 

Aber wenn ich die HSCAN Befehl auf dem twemproxy Server laufen scheint es, als

HSCAN cache_Key 0 MATCH *pattern*

erwartet zu funktionieren Was bin ich mis singen?

Dank

Antwort

0

Ich habe das gleiche Problem, wenn Redis on windows ausgeführt wird, und ich denke, es liegt daran, dass die StackExchange.Redis Bibliothek der Redis Version vom Server zurück analysieren schlägt fehl, wenn Sie eine Beta Version ausgeführt werden, so Es nimmt eine niedrigere Version von Redis an, die den HSCAN-Befehl nicht enthält.

In meinem Fall der Server die folgende Zeichenfolge als Redis Version zurückkehrt:

3.0.300-Beta1

Und wenn SE.Redis versucht, den Versions-String (ResultProcessor.cs zu analysieren):

Version version; 
if (Version.TryParse(val, out version)) 
{ 
    server.Version = version; 
    server.Multiplexer.Trace("Auto-configured version: " + version); 
} 

fehl die Versionsnummern, wegen des -beta1 Teils der Version Zeichenfolge zu analysieren, dass der Parameter ist die fo haben sollte llowing Format wie auf MSDN erklärte:

major.minor [.build [.revision]]

versuchen, eine nicht Beta-Version von redis läuft.

Ich habe gerade ein issue darüber auf SE.Redis GitHub geöffnet.

+0

Danke Das könnte das Problem sein Wie haben Sie entschlüsselt, was der Twemproxy-Server zurückgegeben hat? Ich sehe die Version "2.0", wenn ich auf die Version des Multiplexer-Servers schaue (was ist, was ich standardmäßig annehme) Aber ich bin mir nicht sicher, wo ich es als 3.0300-Beta (oder gleichwertig) sehen würde –

+0

Verbinden Sie sich mit ** Redis-Cli ** mit Ihrem Redis-Server und führen Sie den Befehl ** INFO SERVER **, dort sollten Sie die Versionszeichenfolge – thepirat000

+0

Die Redis-Version auf dem Server ist 3.2.0. Aber aus irgendeinem Grund SE es zu 2.0 in .Net Vorerst, indem Sie diese var Optionen = new ConfigurationOptions { EndPoints = { "redis-Endpunkt"}, Proxy = Proxy.None um es wurde auf die Standard scheint }; –

Verwandte Themen