Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pipeline examples #75

Merged
merged 13 commits into from
Feb 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,5 @@ jobs:
token: ${{secrets.CODECOV_TOKEN}}
verbose: true

- name: Build
run: dotnet pack -c Release --output .
14 changes: 7 additions & 7 deletions Examples/AsyncExample.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@

## All methods have synchronous & asynchronous implementation. the asynchronous methods all end ...Async(...), and are fully await-able. here is an example of using the async methods:

### Connect to the Redis server and get a reference to the database and for JSON commands:
Connect to the Redis server and get a reference to the database and for JSON commands:

```csharp
var redis = await ConnectionMultiplexer.ConnectAsync("localhost");
var db = redis.GetDatabase();
var json = db.JSON();
var redis = await ConnectionMultiplexer.ConnectAsync("localhost");
var db = redis.GetDatabase();
var json = db.JSON();
```

### call async version of JSON.SET/GET
call async version of JSON.SET/GET

```csharp
await json.SetAsync("key", "$", new { name = "John", age = 30, city = "New York" });
var john = await json.GetAsync("key");
await json.SetAsync("key", "$", new { name = "John", age = 30, city = "New York" });
var john = await json.GetAsync("key");
```
49 changes: 49 additions & 0 deletions Examples/CombinationModulesPipeline.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Combination modules Pipeline
## An example of pipelines mixing a pipeline with a combination of module commands with JSON & Search

Connect to the Redis server:
```csharp
var redis = ConnectionMultiplexer.Connect("localhost");
```

Setup pipeline connection
```csharp
var db = redis.GetDatabase();
var pipeline = new Pipeline(db);
```

## JSON
Add JsonSet to pipeline
```csharp
pipeline.Json.SetAsync("person:01", "$", new { name = "John", age = 30, city = "New York" });
pipeline.Json.SetAsync("person:02", "$", new { name = "Joy", age = 25, city = "Los Angeles" });
pipeline.Json.SetAsync("person:03", "$", new { name = "Mark", age = 21, city = "Chicago" });
pipeline.Json.SetAsync("person:04", "$", new { name = "Steve", age = 24, city = "Phoenix" });
pipeline.Json.SetAsync("person:05", "$", new { name = "Michael", age = 55, city = "San Antonio" });
```

## Search
Create the schema to index name as text field, age as a numeric field and city as tag field.
```csharp
var schema = new Schema().AddTextField("name").AddNumericField("age", true).AddTagField("city");
```

Filter the index to only include Jsons with prefix of person:
```csharp
var parameters = FTCreateParams.CreateParams().On(IndexDataType.JSON).Prefix("person:");
```

Create the index via pipeline
```csharp
pipeline.Ft.CreateAsync("person-idx", parameters, schema);
```

Search for all indexed person records
```csharp
var getAllPersons = db.FT().SearchAsync("person-idx", new Query());
```

Execute the pipeline
```csharp
pipeline.Execute();
```
29 changes: 14 additions & 15 deletions Examples/HsetAndSearch.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@

# HSET and Search
## An example of mixing Redis open source command (HSET) with Redis Stack Redis commands (FT.CREATE & FT.SEARCH)

### Connect to the Redis server:
Connect to the Redis server:
```csharp
var redis = ConnectionMultiplexer.Connect("localhost");
```
### Get a reference to the database and for search commands:
Get a reference to the database and for search commands:
```csharp
var db = redis.GetDatabase();
var ft = db.FT();
```
### Use HSET to add a field-value pair to a hash:
Use HSET to add a field-value pair to a hash:
```csharp
db.HashSet("profesor:5555", new HashEntry[] { new("first", "Albert"), new("last", "Blue"), new("age", "55") });
db.HashSet("student:1111", new HashEntry[] { new("first", "Joe"), new("last", "Dod"), new("age", "18") });
Expand All @@ -22,40 +21,40 @@ db.HashSet("student:5555", new HashEntry[] { new("first", "Joen"), new("last", "
db.HashSet("teacher:6666", new HashEntry[] { new("first", "Pat"), new("last", "Rod"), new("age", "20") });
```

### Create the schema to index first and last as text fields, and age as a numeric field:
Create the schema to index first and last as text fields, and age as a numeric field:
```csharp
var schema = new Schema().AddTextField("first").AddTextField("last").AddNumericField("age");
```
### Filter the index to only include hashes with an age greater than 16, and prefix of 'student:' or 'pupil:'
Filter the index to only include hashes with an age greater than 16, and prefix of 'student:' or 'pupil:'
```csharp
var parameters = FTCreateParams.CreateParams().Filter("@age>16").Prefix("student:", "pupil:");
```
### Create the index:
Create the index:
```csharp
ft.Create("example_index", parameters, schema);
```
## Search Examples:

### Search all hashes in the index:
Search all hashes in the index:
```csharp
var noFilters = ft.Search("example_index", new Query());
```
### _noFilters_ now contains: _student:1111_, _student:5555_, _pupil:4444_, _student:3333_.<br /><br />
_noFilters_ now contains: _student:1111_, _student:5555_, _pupil:4444_, _student:3333_.<br /><br />

### Search for hashes with a first name starting with Jo
Search for hashes with a first name starting with Jo
```csharp
var startWithJo = ft.Search("example_index", new Query("@first:Jo*"));
```
### _startWithJo_ now contains: _student:1111_ (Joe), _student:5555_ (Joen).<br /><br />
_startWithJo_ now contains: _student:1111_ (Joe), _student:5555_ (Joen).<br /><br />

### Search for hashes with first name of Pat
Search for hashes with first name of Pat
```csharp
var namedPat = ft.Search("example_index", new Query("@first:Pat"));
```
### _namedPat_ now contains _pupil:4444_ (Pat). _teacher:6666_ (Pat) is not included because it does not have a prefix of 'student:' or 'pupil:'<br /><br />
_namedPat_ now contains _pupil:4444_ (Pat). _teacher:6666_ (Pat) is not included because it does not have a prefix of 'student:' or 'pupil:'<br /><br />

### Search for hashes with last name of Rod
Search for hashes with last name of Rod
```csharp
var lastNameRod = ft.Search("example_index", new Query("@last:Rod"));
```
### _lastNameRod_ is empty because there are no hashes with a last name of Rod that match the index definition.
_lastNameRod_ is empty because there are no hashes with a last name of Rod that match the index definition.
52 changes: 52 additions & 0 deletions Examples/PipelineExample.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Pipeline
## An example of pipelines Redis Stack Redis commands (JSON.SET & JSON.CLEAR & JSON.GET)

Connect to the Redis server and Setup new Pipeline
```csharp
IDatabase db = redisFixture.Redis.GetDatabase();
var pipeline = new Pipeline(db);
```


Add JsonSet to pipeline
```csharp
pipeline.Json.SetAsync("person", "$", new { name = "John", age = 30, city = "New York", nicknames = new[] { "John", "Johny", "Jo" } });
```

Increase age by 2
```csharp
pipeline.Json.NumIncrbyAsync("person", "$.age", 2);
```

Clear the nicknames from the Json
```csharp
pipeline.Json.ClearAsync("person", "$.nicknames");
```

Delete the nicknames
```csharp
pipeline.Json.DelAsync("person", "$.nicknames");
```

Get the Json response
```csharp
var getResponse = pipeline.Json.GetAsync("person");
```

Execute pipeline
```csharp
pipeline.Execute();
```

Get the result of getResponse
```csharp
var result = getResponse.Result;
```
now result is:
```json
{
"name": "John",
"age": 32,
"city": "New York"
}
```
69 changes: 69 additions & 0 deletions Examples/PipelineWithAsync.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Pipeline With Async
## An example of pipelines Redis Stack Redis commands (JSON.SET & JSON.CLEAR & JSON.GET)

Connect to the Redis server
```csharp
var redis = ConnectionMultiplexer.Connect("localhost");
```

Get a reference to the database
```csharp
var db = redis.GetDatabase();
```

Setup pipeline connection
```csharp
var pipeline = new Pipeline(db);
```

Create metedata lables for time-series.
```csharp
TimeSeriesLabel label1 = new TimeSeriesLabel("temp", "TLV");
TimeSeriesLabel label2 = new TimeSeriesLabel("temp", "JLM");
var labels1 = new List<TimeSeriesLabel> { label1 };
var labels2 = new List<TimeSeriesLabel> { label2 };
```

Create a new time-series.
```csharp
pipeline.Ts.CreateAsync("temp:TLV", labels: labels1);
pipeline.Ts.CreateAsync("temp:JLM", labels: labels2);
```

Adding multiple sequenece of time-series data.
```csharp
List<(string, TimeStamp, double)> sequence1 = new List<(string, TimeStamp, double)>()
{
("temp:TLV",1000,30),
("temp:TLV", 1010 ,35),
("temp:TLV", 1020, 9999),
("temp:TLV", 1030, 40)
};
List<(string, TimeStamp, double)> sequence2 = new List<(string, TimeStamp, double)>()
{
("temp:JLM",1005,30),
("temp:JLM", 1015 ,35),
("temp:JLM", 1025, 9999),
("temp:JLM", 1035, 40)
};
```
Adding mutiple samples to mutiple series.
```csharp
pipeline.Ts.MAddAsync(sequence1);
pipeline.Ts.MAddAsync(sequence2);
```

Execute the pipeline
```csharp
pipeline.Execute();
```

Get a reference to the database and for time-series commands
```csharp
var ts = db.TS();
```

Get only the location label for each last sample, use SELECTED_LABELS.
```csharp
var respons = await ts.MGetAsync(new List<string> { "temp=JLM" }, selectedLabels: new List<string> { "location" });
```
4 changes: 3 additions & 1 deletion src/NRedisStack/NRedisStack.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@
<Authors>Redis Open Source</Authors>
<Owners>Redis OSS</Owners>
<Description>.Net Client for Redis Stack</Description>
<PackageReadmeFile>README.md</PackageReadmeFile>
<Version>0.5.0</Version>
<ReleaseVersion>0.5.0</ReleaseVersion>
<PackageVersion>0.5.0</PackageVersion>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="StackExchange.Redis" Version="2.6.45" />
<PackageReference Include="StackExchange.Redis" Version="2.6.45" />
<None Include="..\..\README.md" Pack="true" PackagePath="\" />
</ItemGroup>

</Project>
5 changes: 0 additions & 5 deletions src/NRedisStack/Pipeline.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,6 @@ namespace NRedisStack;

public class Pipeline
{
public Pipeline(IConnectionMultiplexer muxer)
{
_batch = muxer.GetDatabase().CreateBatch();
}

public Pipeline(IDatabase db)
{
_batch = db.CreateBatch();
Expand Down
Loading