.NET Client for Redis
This project builds on StackExchange.Redis, and seeks to bring native support for Redis Stack commands to the C# ecosystem.
Learn for free at Redis University
Build faster with the Redis Launchpad
The complete documentation for Redis module commands can be found at the Redis commands website.
You can use Redis OSS commands in the same way as you use them in StackExchange.Redis.
Each module has a command class with its own commands.
The supported modules are Search, JSON, TimeSeries, Bloom Filter, Cuckoo Filter, T-Digest, Count-min Sketch, and Top-K.
Note: RedisGraph support has been deprecated starting from Redis Stack version 7.2. For more information, please refer to this blog post.
Using the dotnet cli, run:
dotnet add package NRedisStack
The most recent version of this library supports Redis version 6.2, 7.2.
Before writing any code, you'll need a Redis instance with the appropriate Redis modules. The quickest way to get this is with Docker:
docker run -p 6379:6379 --name redis-stack redis/redis-stack:latest
This launches Redis Stack, an extension of Redis that adds modern data structures to Redis.
Now, you need to connect to Redis, exactly the same way you do it in StackExchange.Redis:
using NRedisStack;
using NRedisStack.RedisStackCommands;
using StackExchange.Redis;
//...
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();
Now you can create a variable from any type of module in the following way:
BloomCommands bf = db.BF();
CuckooCommands cf = db.CF();
CmsCommands cms = db.CMS();
TopKCommands topk = db.TOPK();
TdigestCommands tdigest = db.TDIGEST();
SearchCommands ft = db.FT();
JsonCommands json = db.JSON();
TimeSeriesCommands ts = db.TS();
GraphCommands graph = db.GRAPH(); // If Redis version is less than 7.2
Then, that variable will allow you to call all the commands of that module.
To store a json object in Redis:
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();
JsonCommands json = db.JSON();
var key = "myKey";
json.Set(key, "$", new { Age = 35, Name = "Alice" });
Now, to execute a search for objects, we need to index them on the server, and run a query:
Setup:
using NRedisStack.Search;
using NRedisStack.Search.Literals.Enums;
//...
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();
SearchCommands ft = db.FT();
JsonCommands json = db.JSON();
Create an index with fields and weights:
// FT.CREATE myIdx ON HASH PREFIX 1 doc: SCHEMA title TEXT WEIGHT 5.0 body TEXT url TEXT
ft.Create("myIndex", new FTCreateParams().On(IndexDataType.HASH)
.Prefix("doc:"),
new Schema().AddTextField("title", 5.0)
.AddTextField("body")
.AddTextField("url"));
After creating the index, future documents with the doc:
prefix will be automatically indexed when created or modified.
To create a new hash document and add it to the index, use the HSET command:
// HSET doc:1 title "hello world" body "lorem ipsum" url "https://redis.io"
db.HashSet("doc:1", new HashEntry[] { new("title", "hello world"),
new("body", "lorem ipsum"),
new("url", "https://redis.io") });
Search the index for documents that contain "hello world":
// FT.SEARCH myIndex "hello world" LIMIT 0 10
ft.Search("myIndex", new Query("hello world").Limit(0, 10));
Drop the index:
// FT.DROPINDEX myIndex
ft.DropIndex("myIndex");
More examples can be found in the examples folder.
NRedisStack is developed and maintained by Redis Inc. It can be found here, or downloaded from NuGet.