• Stars
    star
    174
  • Rank 211,369 (Top 5 %)
  • Language
    C#
  • License
    MIT License
  • Created almost 2 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Redis Stack .Net client

license .github/workflows/integration.yml codecov NRedisStack NuGet release

NRedisStack

.NET Client for Redis

Note

This project builds on StackExchange.Redis, and seeks to bring native support for Redis Stack commands to the C# ecosystem.

API

The complete documentation for Redis module commands can be found at the Redis commands website.

Redis OSS commands

You can use Redis OSS commands in the same way as you use them in StackExchange.Redis.

Stack commands

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.

Usage

๐Ÿ’ป Installation

Using the dotnet cli, run:

dotnet add package NRedisStack

๐Ÿ Getting started

Supported Redis versions

The most recent version of this library supports Redis version 6.2, 7.2.

Starting Redis

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.

Examples

Store a JSON object in Redis

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 "http://redis.io"
db.HashSet("doc:1", new HashEntry[] { new("title", "hello world"),
                                      new("body", "lorem ipsum"),
                                      new("url", "http://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.


Author

NRedisStack is developed and maintained by Redis Inc. It can be found here, or downloaded from NuGet.


Redis

More Repositories

1

redis

Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.
C
64,881
star
2

go-redis

Redis Go client
Go
19,143
star
3

node-redis

Redis Node.js client
TypeScript
16,619
star
4

ioredis

๐Ÿš€ A robust, performance-focused, and full-featured Redis client for Node.js.
TypeScript
13,878
star
5

redis-py

Redis Python Client
Python
12,153
star
6

jedis

Redis Java client
Java
11,542
star
7

hiredis

Minimalistic C client for Redis >= 1.2
C
6,040
star
8

redis-rb

A Ruby client library for Redis
Ruby
3,942
star
9

redis-doc

Redis documentation source code for markdown and metadata files, conversion scripts, and so forth
Shell
2,304
star
10

rueidis

A fast Golang Redis client that supports Client Side Caching, Auto Pipelining, Generics OM, RedisJSON, RedisBloom, RediSearch, etc.
Go
2,150
star
11

redis-om-node

Object mapping, and more, for Redis and Node.js. Written in TypeScript.
TypeScript
1,092
star
12

redis-om-python

Object mapping, and more, for Redis and Python
Python
982
star
13

redis-io

Application running http://redis.io
Ruby
637
star
14

redis-om-spring

Spring Data Redis extensions for better search, documents models, and more
Java
552
star
15

hiredis-py

Python wrapper for hiredis
C
486
star
16

redis-om-dotnet

Object mapping, and more, for Redis and .NET
C#
419
star
17

hiredis-rb

Ruby wrapper for hiredis
Ruby
317
star
18

hiredis-node

Node wrapper for hiredis
JavaScript
304
star
19

riot

๐Ÿงจ Get data in & out of Redis with RIOT
Java
227
star
20

redis-rcp

Redis Change Proposals
138
star
21

redis-hashes

Redis tarball SHA1 hashes
86
star
22

redis-specifications

A bin for Redis' specs
33
star
23

redis-benchmarks-specification

The Redis benchmarks specification describes the cross-language/tools requirements and expectations to foster performance and observability standards around redis related technologies. Members from both industry and academia, including organizations and individuals are encouraged to contribute.
Python
24
star
24

redis-debian

Debian packaging
Shell
16
star
25

librdb

Redis RDB file parser, with JSON, RESP and RDB-loader extensions
C
16
star
26

redis-snap

A repository for snap packaging
10
star
27

redis-website

HTML
9
star
28

docs

Documentation for Redis, Redis Cloud, and Redis Enterprise
Python
8
star
29

redis-clinterwebz

Python
4
star
30

redis-extra-ci

4
star
31

redis-rpm

Shell
2
star