implement-resp-command
Skill6.2k starsChanged 3 days agoMITView on GitHub
Add a new Redis/RESP command (or overload) to StackExchange.Redis end-to-end — enum, interfaces, RedisDatabase implementation, ResultProcessor, public-API tracking, the ResultProcessor + RoundTrip unit tests, and TransactionAnalyzer coverage where the command replaces a transaction. Use when asked to "add/implement/support a Redis command", wire up a new RESP command, expose a server feature on IDatabase/IDatabaseAsync, or add a result processor.
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 0 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 10
Use an existing, similarly-shaped command as your template (e.g.
- Very specific: line 14
Before writing anything, get the command's exact argument order and reply shape — you need it for the Message (request bytes) and the …
- Very specific: line 30
Back-compat: never add an optional parameter to an existing shipped method (binary break → MissingMethodException).
- Very specific: line 128
Verify the precise outbound bytes (length prefixes included), and ideally that command-map rename and disable behave (the MapMode pattern …
- Very specific: line 132
Only if you need to prove behavior against a real server — these need the docker Redis topology (see AGENTS.md → Testing topology).
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Implement a new RESP command
This walks through adding a command to StackExchange.Redis (the src/StackExchange.Redis client). Read AGENTS.md first — especially Public API tracking → Backwards compatibility is paramount and Architecture. Do every step; the build and the API analyzer will fail loudly if you skip the wiring, but the tests are what prove the command actually works.
Use an existing, similarly-shaped command as your template (e.g. StringGet/GET for a simple key command, StreamAutoClaim/XAUTOCLAIM for a structured aggregate reply). Grep RedisDatabase.cs for one and mirror it.
Source the command's spec first
Before writing anything, get the command's exact argument order and reply shape — you need it for the Message (request bytes) and the ResultProcessor (reply parsing), and the round-trip test asserts both precisely.
- Existing / released commands are described in two authoritative places (substitute the command name, lower-case):
- Server source, JSON spec — e.g.
https://github.com/redis/redis/blob/unstable/src/commands/xdelex.json. This is the most precise: argument tokens/order/optionality,arity, key specs, and thewrite/readonlycommand flags (which directly tell you theIsPrimaryOnlyclassification) plus, often, areply_schema. - HTML docs — e.g.
https://redis.io/docs/latest/commands/xdelex/. More readable, with reply examples. - (For non-Redis targets the equivalents are the Valkey/Garnet/etc. source and docs — but the wire command is usually identical.)
- Server source, JSON spec — e.g.
- Module commands (RediSearch
FT.*, RedisJSONJSON.*, RedisTimeSeriesTS.*, RedisBloom, …) live in each module's own repo, usually as a single aggregatedcommands.json(e.g. RediSearch:https://github.com/RediSearch/RediSearch/blob/master/commands.json) rather than core Redis's one-file-per-command layout. Use it the same way for argument/reply shape. But module commands are generally handled by separate companion libraries (e.g. NRedisStack), not core StackExchange.Redis — so usually you won't add them here at all; ad-hoc use goes through the genericExecute/ExecuteAsync(string command, …)→RedisResultAPI. If you do wire one as first-class, note the wire token is dotted (FT.SEARCH) and a C# enum member name can't contain.; the token for a member whose name isn't a valid identifier is supplied via the[AsciiHash("FT.SEARCH")]override — seeeng/StackExchange.Redis.Build/AsciiHash.md. Confirm that a first-class typed binding is actually intended before following the enum steps below. - New / unreleased commands may not be in either yet. In that case ask the user for the spec — the exact argument order and a concrete sample request/reply (RESP bytes if possible) — rather than guessing; the round-trip and ResultProcessor tests are only as correct as that sample.
- RESP2 vs RESP3: the reply (and occasionally argument handling) can differ subtly between protocols — e.g. a map/
%vs a flat*array, a double/,vs a bulk-string number, or added attributes. The JSONreply_schemasometimes distinguishes them. Capture both forms and handle them in theResultProcessor(and cover both in the unit tests).
Steps
- Add the command name to the
RedisCommandenum —src/StackExchange.Redis/Enums/RedisCommand.cs. The enum member name is the wire token (CommandMapserializes it viacommand.ToString()), so name it exactly as Redis expects (e.g.GETEX,XAUTOCLAIM). Keep the existing alphabetical grouping.- Then classify it in
IsPrimaryOnly(theswitchin the same file). That switch is exhaustive — itsdefaultthrowsArgumentOutOfRangeException("Every RedisCommand must be defined in Message.IsPrimaryOnly…") at runtime for any unlisted command, so this is not optional. Put writes/mutations in the primary-only list; pure reads fall through to the replica-eligible branch. Getting it wrong mis-routes the command (e.g. a write sent to a replica).
- Then classify it in
- Declare the method on the interfaces —
src/StackExchange.Redis/Interfaces/IDatabase.csandIDatabaseAsync.cs(or the.Arrays.cs/.VectorSets.cspartials when relevant). Always provide both sync and async.- Back-compat: never add an optional parameter to an existing shipped method (binary break →
MissingMethodException). Add a new overload instead; seeAGENTS.md. - Additive-overload trick (avoids ambiguity): if the shipped method has an all-optional tail (e.g.
Foo(key, int? count = null, CommandFlags flags = CommandFlags.None)), a new overload that just appends more optional params (Foo(key, int? count = null, int? extra = null, CommandFlags flags = ...)) is ambiguous for existing calls likeFoo(key, 5)— both candidates substitute a default, so neither is "better" (compile errorCS0121, and the analyzer flagsRS0026). The fix: make the existing overload's parameters non-optional (remove the= ...defaults) and let the new overload carry all the optionals. Removing a default is binary-safe (the IL signature is unchanged) and source-safe (old calls simply rebind to the new all-optional overload, which is functionally identical). Do this consistently across the interface and every implementor (RedisDatabase,KeyPrefixed/KeyPrefixedDatabase), and update the changed signatures inPublicAPI.Shipped.txt(optional→required is an edit-in-place there; the new all-optional overload goes inPublicAPI.Unshipped.txt). Wrap the new overload in#pragma warning disable RS0026since the analyzer still flags competing optional-param overloads even when they're unambiguous. Watch for the "richest" existing overload living in a sibling partial (e.g.IDatabaseAsync.VectorSets.cs). - Implement the new member on every
IDatabase/IDatabaseAsyncimplementor, or the build breaks. ChieflyKeyspaceIsolation/KeyPrefixedDatabase.cs— and there it must prefix keys viaToInner(key); a stub that forwards without prefixing compiles but silently breaks keyspace isolation for the new command. If the command should also be usable in batches/transactions, add it toIBatch/ITransactionand their implementations (RedisBatch/RedisTransaction/KeyPrefixedBatch) too.
- Back-compat: never add an optional parameter to an existing shipped method (binary break →
- Implement in
RedisDatabase.cs(next to the template you picked). The standard shape:
For argument shapespublic RedisValue StringGet(RedisKey key, CommandFlags flags = CommandFlags.None) { var msg = Message.Create(Database, flags, RedisCommand.GET, key); return ExecuteSync(msg, ResultProcessor.RedisValue); } public Task<RedisValue> StringGetAsync(RedisKey key, CommandFlags flags = CommandFlags.None) { var msg = Message.Create(Database, flags, RedisCommand.GET, key); return ExecuteAsync(msg, ResultProcessor.RedisValue); }Message.Createdoesn't cover (optional tokens, variadic args, multiple round-trips), write a privateMessagesubclass overridingWriteImpl(searchRedisDatabase.csfor: MessageandGetStringGetExMessagefor examples), or anIMultiMessage. - Pick or write the
ResultProcessor<T>—src/StackExchange.Redis/ResultProcessor.cs. Reuse an existing one if the reply shape matches (RedisValue,RedisValueArray,Int64,Boolean,Lease, …). Otherwise add a nestedinternal sealed class XProcessor : ResultProcessor<T>overridingSetResult(PhysicalConnection, Message, ref RespReader)to parse the reply with theRespReader, and expose it as apublic static readonlyfield. Handle RESP2 vs RESP3 and older-server reply variants here. - New result types go in
src/StackExchange.Redis/APITypes/(mirrorStreamAutoClaimResultetc.). - Update public-API tracking — add every new public member to
PublicAPI.Unshipped.txt(and thenet6.0/subfolder if the API only exists on newer TFMs). The build error tells you the exact line. SeeAGENTS.md. - Write the two unit-test layers (below). These run with no external server, so they're the fast, reliable proof of correctness — write them even if you also add live integration tests.
- Gate pre-release server features behind
[Experimental(Experiments.Server_8_x)]when appropriate (seesrc/RESPite/Shared/Experiments.cs). - Ask whether the command is an atomic composition — does it do in one round-trip what callers currently write a
MULTI/WATCHtransaction (or several queued commands) to achieve? A surprising number of new commands are exactly that:GETDEL,GETEX,HGETDEL,SMOVE,SET ... NX/GET/IFEQ,SMISMEMBER, everyM*/variadic form. If yes, teachTransactionAnalyzerabout it, or the people who would benefit most never find out it exists — see the section below.
If the command replaces a transaction
eng/StackExchange.Redis.Build/TransactionAnalyzer.cs ships inside the package and tells consumers when a transaction they wrote is now one command. A new atomic command that isn't added there is invisible: the analyzer keeps quiet about exactly the code your command was written to replace. This is cheap to do at the time and nobody comes back for it later.
Work out which shape the command replaces, and add a row to the matching table in that file:
| The transaction it replaces | Table | Rule |
one AddCondition + one write, where the command now takes that condition as an argument | Map, family A | SER300 |
one AddCondition + one write, where a newer command subsumes both | Map, family B | SER301 |
one AddCondition + one write, where the write's own return value already answers the condition | Map, family C | SER302 |
| two different queued commands | MapPair | SER303 |
| the same command queued N times, now a variadic overload | MapVariadic | SER304 |
Beyond the suggestion text, a row states as much of the following as its table has columns for:
- The server version the suggestion needs — not the one the flagged code needs. Use the same
RedisFeaturesconstant the live integration test gates on, andServerVersion.Anywhere the form predates anything realistically in service (saying "requires 2.6 or later" is noise). This is what lets a project declaring<RedisMinServerVersion>see only what it can act on. - A coverage set — the parameter names the suggestion still carries. Anything the caller wrote that isn't in it makes the rule stay quiet, because a rewrite that silently drops an argument is worse than no suggestion: N x
StringSet(key, value, expiry)is notMSET, and "helpfully" collapsing it makes the keys permanent. State names kept, never names dropped, so that a parameter added to an overload later fails safe.CommandFlagsis exempt globally. Family C passesnullmeaning "everything", because it keeps the command as written and deletes only the condition. - Whether the same member or field has to match, not just the same key (
Map'sSameMember,MapVariadic'sRequiresMember). A condition about member"a"says nothing about a write to member"b", and collapsing the two drops a real guard. - Order, where the commands are not commutative (
MapPair).SET ... GETreturns the value from before the write;SETclears any TTL, soStringSet+KeyExpireisSET ... EXwhile the reverse is not. Map one direction and pin the other with a negative test. - Which way the keys go (
MapVariadic'sManyKeys).SADDtakes one key and many values, so N calls must be on the same key;MSET/DELtake many keys, so those must be on different ones. A mapping in the wrong direction suggests a command that does something else entirely.
Write down what you decided not to map, and why. The near-misses are the dangerous part and the comments in those tables are load-bearing: ListRightPop + ListLeftPush is not LMOVE (inside a transaction the pop's result is an unresolved Task, so the pushed value is a different one), N x ListLeftPop is not LMPOP (which pops from the first non-empty key, not from each). If you talk yourself out of a mapping, leave the reasoning where the next person will hit it.
Then:
- Tests in
tests/StackExchange.Redis.Build.Tests/— a positive inSER30x.cs, and the negatives that matter inDetectionShape.cs. The negatives are the point: they are correct code a keener analyzer would suggest breaking, in a diagnostic shipped to every consumer. If your mapping needs the same key, the same member, a particular order, or the absence of an argument, there is a test for each, or the constraint isn't real. - A row in
docs/rules/SER30x.md, since every message links to that page for the caveats it can't carry itself. - A new rule ID (rather than a row in an existing table) additionally needs a descriptor in
Diagnostics.csand an entry inAnalyzerReleases.Unshipped.md; IDs are a public contract once released, because consumers put them inNoWarn.
Tests — the two layers that matter
ResultProcessor unit test (parsing in isolation)
Proves your ResultProcessor turns raw RESP bytes into the right typed value. Add a class under tests/StackExchange.Redis.Tests/ResultProcessorUnitTests/ deriving ResultProcessorUnitTest; feed handcrafted RESP wire strings to Execute(resp, ResultProcessor.X) and assert on the result; use ExecuteUnexpected(resp, ...) for replies that must fail. Model it on ResultProcessorUnitTests/StreamAutoClaim.cs:
public class MyCommand(ITestOutputHelper log) : ResultProcessorUnitTest(log)
{
[Fact]
public void Basic_Success()
{
var resp = "*2\r\n$3\r\n0-0\r\n*0\r\n"; // hand-built RESP reply
var result = Execute(resp, ResultProcessor.MyCommand);
Assert.Equal("0-0", result.NextStartId.ToString());
}
[Fact]
public void WrongShape_Failure() => ExecuteUnexpected("$5\r\nhello\r\n", ResultProcessor.MyCommand);
}Cover the cases that actually bite: RESP2 and RESP3 forms, empty arrays, null ($-1/*-1), older-server reply shapes (e.g. a 2-element vs 3-element reply across versions), and at least one malformed reply via ExecuteUnexpected.
RoundTrip unit test (full write + read, still no server)
Proves the command serializes to the exact bytes Redis expects and parses back correctly, exercising Message.WriteTo + the command-map. Add to tests/StackExchange.Redis.Tests/RoundTripUnitTests/ using TestConnection.ExecuteAsync(message, processor, requestResp, responseResp, ...), which asserts the outbound RESP equals requestResp and then feeds responseResp back through the processor. See RoundTripUnitTests/AdhocMessageRoundTrip.cs:
[Theory(Timeout = 1000)]
[InlineData("hello", "*2\r\n$4\r\nECHO\r\n$5\r\nhello\r\n")]
public async Task MyCommand_RoundTrips(string payload, string requestResp)
{
var msg = /* build the Message exactly as RedisDatabase does */;
var result = await TestConnection.ExecuteAsync(msg, ResultProcessor.MyCommand, requestResp, ":5\r\n", log: log);
Assert.Equal(5, result.AsInt32());
}Verify the precise outbound bytes (length prefixes included), and ideally that command-map rename and disable behave (the MapMode pattern in that file).
Optional: live integration test
Only if you need to prove behavior against a real server — these need the docker Redis topology (see AGENTS.md → Testing topology). An absent server is skipped automatically by the test infrastructure, so you don't write code for that.
What you do need to handle for a new command is server version: most new commands are new server features, and the test must skip as inconclusive on servers too old to support them. Use the require: parameter when creating the connection — it connects and auto-skips when the live server is below the threshold:
await using var conn = Create(require: RedisFeatures.v7_4_0_rc1);
var db = conn.GetDatabase();
// ... exercise the command ...Pick the RedisFeatures.vX_Y_Z constant matching the version that introduced the command (see HashFieldTests.cs / CopyTests.cs for the pattern). If your command needs a version threshold that doesn't exist yet, add the constant to RedisFeatures. This keeps the suite green across the range of server versions CI and contributors run against.
The in-process managed server (toys/StackExchange.Redis.Server) may also need a handler if integration tests run against it.
Before finishing
dotnet build Build.csproj -c Release /p:CI=true— analyzers +TreatWarningsAsErrorsmust pass (this catches a missingPublicAPI.Unshipped.txtentry).dotnet test --project tests/StackExchange.Redis.Tests/StackExchange.Redis.Tests.csproj -f net10.0 --filter-class "*MyCommand*"— runs your new unit tests without any server (Microsoft.Testing.Platform filters take fully qualified names,*at either end).dotnet test --project tests/StackExchange.Redis.Build.Tests/StackExchange.Redis.Build.Tests.csproj— if you touchedTransactionAnalyzer. Also needs no server, and takes seconds.- Double-check no shipped signature changed (back-compat).
Trending
Steady talk.about the whole repository
Who's talking about StackExchange/StackExchange.Redis
- Stack Overflow“StackExchange.Redis with Azure Redis is unusably slow or throws timeout errors”Stack Overflow · Aug 21, 2014 · 36 votes
- dotnet/aspnetcore“Add ability to leverage StackExchange.Redis.CommandFlags via IDistributedCache or IDistributedRedisCache (new)”GitHub · Feb 5, 2021 · 16 reactions
- Xabaril/AspNetCore.Diagnostics.HealthChecks“Redis (Sentinel): The underlying connection is not renew if it's broken ”GitHub · Mar 10, 2022 · 12 reactions
- Stack Overflow“Azure Function App Could not load System.IO.Pipelines connecting to Redis”Stack Overflow · Dec 29, 2020 · 12 votes
- dotnet/runtime“Binding redirects not generated for .NET 4.7.2 transitive dependency chains with System.Buffers”GitHub · Sep 27, 2018 · 11 reactions
The biggest 5 of 81 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 81
Talked about on GitHub, Stack Overflow and Hacker News (81 times).
On GitHub · 50
- Feb 5, 2021Add ability to leverage StackExchange.Redis.CommandFlags via IDistributedCache or IDistributedRedisCache (new) — dotnet/aspnetcore16 reactions · 27 comments
- Mar 10, 2022Redis (Sentinel): The underlying connection is not renew if it's broken — Xabaril/AspNetCore.Diagnostics.HealthChecks12 reactions · 3 comments
- Sep 27, 2018Binding redirects not generated for .NET 4.7.2 transitive dependency chains with System.Buffers — dotnet/runtime11 reactions · 7 comments
- Jun 30, 2018React to changes in StackExchange.Redis 2.0 — aspnet/Caching8 reactions · 35 comments
- Sep 5, 2018StackExchange.Redis.StrongName is discontinued — Azure/aspnet-redis-providers6 reactions · 12 comments
45 more on GitHub
- Mar 16, 2026Redis centralized rate limiting, GCRA — dotnet/aspnetcore5 reactions · 18 comments
- Oct 14, 2022reconnectOnError fails to handle errors stemming from Lua scripts — redis/ioredis4 reactions · 2 comments
- Oct 13, 2020.Caching.StackExchangeRedis Sentinel support — dotnet/aspnetcore4 reactions · 1 comment
- May 15, 2018Library instrumentation guidance with DiagnosticSource — microsoft/ApplicationInsights-dotnet4 reactions · 8 comments
- May 22, 2016Restore Socket.ConnectAsync via hostname on *nix platforms. — dotnet/runtime3 reactions · 35 comments
- Oct 23, 2026chore(deps): update dependency stackexchange.redis to 3.4.20 — thomhurst/TUnit2 reactions · 3 comments
- Oct 9, 2026chore(deps): update dependency stackexchange.redis to 3.4.0 — thomhurst/Respire2 reactions · 7 comments
- Oct 9, 2026chore(deps): update dependency stackexchange.redis to 3.4.0 — thomhurst/TUnit2 reactions · 3 comments
- Sep 22, 2026chore(deps): update dependency stackexchange.redis to 3.3.1 — thomhurst/Respire2 reactions · 3 comments
- Sep 22, 2026chore(deps): update dependency stackexchange.redis to 3.3.1 — thomhurst/TUnit2 reactions · 3 comments
- Sep 13, 2026chore(deps): update dependency stackexchange.redis to 3.2.1 — thomhurst/ModularPipelines2 reactions · 3 comments
- Sep 13, 2026chore(deps): update dependency stackexchange.redis to 3.2.1 — thomhurst/Respire2 reactions · 3 comments
- Sep 13, 2026chore(deps): update dependency stackexchange.redis to 3.2.1 — thomhurst/TUnit2 reactions · 3 comments
- Aug 21, 2026chore(deps): update dependency stackexchange.redis to 3.1.31 — thomhurst/Respire2 reactions · 2 comments
- Aug 21, 2026chore(deps): update dependency stackexchange.redis to 3.1.31 — thomhurst/TUnit2 reactions · 2 comments
- Aug 21, 2026chore(deps): update dependency stackexchange.redis to 3.1.31 — thomhurst/ModularPipelines2 reactions · 2 comments
- Aug 8, 2026chore(deps): update dependency stackexchange.redis to 2.13.17 — thomhurst/Respire2 reactions · 42 comments
- Aug 6, 2026chore(deps): update dependency stackexchange.redis to 3.1.13 — thomhurst/TUnit2 reactions · 2 comments
- Aug 6, 2026chore(deps): update dependency stackexchange.redis to 3.1.11 — thomhurst/TUnit2 reactions · 1 comment
- Aug 3, 2026chore(deps): update dependency stackexchange.redis to 3.1.3 — thomhurst/TUnit2 reactions · 2 comments
- Jul 31, 2026chore(deps): update dependency stackexchange.redis to 3.1.0 — thomhurst/TUnit2 reactions · 1 comment
- Jul 30, 2026chore(deps): update dependency stackexchange.redis to 3.0.25 — thomhurst/TUnit2 reactions · 2 comments
- Jul 21, 2026chore(deps): update dependency stackexchange.redis to v3 — thomhurst/ModularPipelines2 reactions · 2 comments
- Jul 21, 2026chore(deps): update dependency stackexchange.redis to 2.13.17 — thomhurst/ModularPipelines2 reactions · 3 comments
- May 13, 2024Support for DefaultAzureCredential / Azure Active Directory / Entra ID — Azure/aspnet-redis-providers2 reactions · 3 comments
- Mar 4, 2024SignalR redis perf : consider sharded pub/sub when available — dotnet/aspnetcore2 reactions · 2 comments
- Jan 28, 2020Handling RedisCache is not connected. — dotnet/aspnetcore2 reactions · 1 comment
- May 14, 2019[StackExchange.Redis] Add DefaultReadCommandFlag into RedisCacheOptions for read operations — dotnet/aspnetcore2 reactions · 6 comments
- Oct 9, 2026chore(deps): update dependency stackexchange.redis to 3.4.0 — thomhurst/ModularPipelines1 reaction · 2 comments
- Sep 22, 2026chore(deps): update dependency stackexchange.redis to 3.3.1 — thomhurst/ModularPipelines1 reaction · 2 comments
- Sep 18, 2026chore(deps): update dependency stackexchange.redis to 3.3.0 — thomhurst/Respire1 reaction · 3 comments
- Sep 18, 2026chore(deps): update dependency stackexchange.redis to 3.3.0 — thomhurst/TUnit1 reaction · 3 comments
- Sep 17, 2026chore(deps): update dependency stackexchange.redis to 3.2.15 — thomhurst/Respire1 reaction · 3 comments
- Sep 17, 2026chore(deps): update dependency stackexchange.redis to 3.2.15 — thomhurst/TUnit1 reaction · 3 comments
- Sep 10, 2026chore(deps): update dependency stackexchange.redis to 3.2.0 — thomhurst/ModularPipelines1 reaction · 2 comments
- Sep 10, 2026chore(deps): update dependency stackexchange.redis to 3.2.0 — thomhurst/Respire1 reaction · 2 comments
- Sep 10, 2026chore(deps): update dependency stackexchange.redis to 3.2.0 — thomhurst/TUnit1 reaction · 2 comments
- Aug 9, 2026chore(deps): update dependency stackexchange.redis to v3.1.13 — thomhurst/Respire1 reaction · 59 comments
- Aug 6, 2026Update dependency StackExchange.Redis to 3.1.13 — thomhurst/ModularPipelines1 reaction · 2 comments
- Aug 3, 2026Update dependency StackExchange.Redis to 3.1.3 — thomhurst/ModularPipelines1 reaction · 2 comments
- Jul 31, 2026Update dependency StackExchange.Redis to 3.1.0 — thomhurst/ModularPipelines1 reaction
- Jul 30, 2026Update dependency StackExchange.Redis to 3.0.25 — thomhurst/ModularPipelines1 reaction
- Jul 10, 2026chore(deps): update dependency stackexchange.redis to 3.0.17 — thomhurst/TUnit1 reaction · 2 comments
- Apr 22, 2026Support StackExchange.Redis 3.0+ — open-telemetry/opentelemetry-dotnet-instrumentation1 reaction
- Mar 10, 2025High integrity mode support — redis/lettuce1 reaction
On Stack Overflow · 30
- Aug 21, 2014StackExchange.Redis with Azure Redis is unusably slow or throws timeout errors36 votes · 5 answers
- Dec 29, 2020Azure Function App Could not load System.IO.Pipelines connecting to Redis12 votes
- Sep 25, 2014Partitioned key space for StackExchange Redis11 votes
- Sep 8, 2016Tune Redis connection inside an Azure Function to prevent timeouts9 votes · 2 answers
- May 12, 2014How to connect to Azure Redis Cache9 votes
25 more on Stack Overflow
- Nov 20, 2014Are there any StackExchange.Redis example projects8 votes
- May 29, 2014StackExchange.Redis ConnectionMultiplexer.Connect() Intermittently Works7 votes
- Sep 12, 2019Wat is the optimal Azure REDIS Stackexchange configuration and usage running a .NET Core 2.1 WebApi6 votes
- Jul 20, 2021How to properly load a Lua script in StackExchange.Redis?5 votes
- Feb 26, 2016Redis Connections May Not be Closing with c#5 votes
- Apr 16, 2014I can't find the command equivalent to keys in Stack Exchange Redis5 votes
- Jan 29, 2021Invalid multibulk length In redis4 votes
- Jan 22, 2020How to do contains search in Redis?4 votes · 2 answers
- Feb 19, 2019StackExchange Redis AddOrUpdate handling (optimistic concurrency)4 votes · 1 answer
- May 5, 2018StackExchange.Redis not reading responses on heavy load4 votes · 1 answer
- Nov 18, 2016How can I support the Redis sentinel architecture using StackExchange.Redis?4 votes
- Dec 20, 2019StackExchange.Redis.RedisConnectionException: 'It was not possible to connect to the redis server(s)3 votes
- Jan 28, 2019Redis Cache Number of connected clients increasing3 votes · 2 answers
- Jul 5, 2018How can I get data from Redis in C#?3 votes
- Apr 19, 2018.net core IDistributedCache redis sentinel support for master / slave3 votes
- Jul 21, 2017MSET in StackExchange.Redis3 votes
- Apr 4, 2017Doesn't dispose() method of ConnectionMultiplexer flushes all keys and the redis database it is connected to?3 votes
- Mar 21, 2017Redis how to find optimal value for IOCP3 votes · 1 answer
- Dec 13, 2022What's the Point of Multiple Redis Databases?2 votes
- Jul 16, 2019No connection is available to service this operation (Redis Client )2 votes · 2 answers
- Apr 15, 2019How to lock an existing key?2 votes · 1 answer
- Mar 23, 2018Redis timeout after UnableToResolvePhysicalConnection exception2 votes
- Jun 13, 2016What is Booksleave IKeyCommands.Find equivalent in StackExchange.Redis2 votes
- Dec 11, 2015StackExchange.Redis How to Connect to Sentinel2 votes
- Jun 1, 2015StackExchange.Redis StringGet Timeouts2 votes · 1 answer
On Hacker News · 1
- Apr 2, 2015StackExchange Redis Client2 points
In this repository5 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- audit-command-coverageSkill
- create-implementation-plan-for-redis-api-changeSkill
- summarize-databaseSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

