From d03579367ae492c17da67a2344c0e410152b73e2 Mon Sep 17 00:00:00 2001 From: Shachar Pashchur Date: Thu, 22 Dec 2022 17:25:53 +0200 Subject: [PATCH 1/7] Add Pipeline support --- src/NRedisStack/Pipeline.cs | 51 +++++++++++++++++++++++ tests/NRedisStack.Tests/Json/JsonTests.cs | 24 +++++++++++ 2 files changed, 75 insertions(+) create mode 100644 src/NRedisStack/Pipeline.cs diff --git a/src/NRedisStack/Pipeline.cs b/src/NRedisStack/Pipeline.cs new file mode 100644 index 00000000..ef9058aa --- /dev/null +++ b/src/NRedisStack/Pipeline.cs @@ -0,0 +1,51 @@ +@@ -0,0 +1,50 @@ +using NRedisStack.RedisStackCommands; +using StackExchange.Redis; + +namespace NRedisStack +{ + public class Pipeline + { + private readonly IDatabase _db; + private readonly List _commands = new List(); + + public Pipeline(IDatabase db) + { + _db = db; + } + + public void AddCommand(SerializedCommand command) + { + _commands.Add(command); + } + + public RedisResult[] Execute() + { + var transaction = _db.CreateTransaction(); + var tasks = new List>(); + foreach (var command in _commands) + { + tasks.Add(transaction.ExecuteAsync(command.Command, command.Args)); + } + + transaction.Execute(); + Task.WhenAll(tasks).Wait(); + return tasks.Select(x => x.Result).ToArray(); + } + + public async Task ExecuteAsync() + { + var transaction = _db.CreateTransaction(); + var tasks = new List>(); + foreach (var command in _commands) + { + tasks.Add(transaction.ExecuteAsync(command.Command, command.Args)); + } + + transaction.Execute(); + await Task.WhenAll(tasks); + return tasks.Select(x => x.Result).ToArray(); + } + + } +} \ No newline at end of file diff --git a/tests/NRedisStack.Tests/Json/JsonTests.cs b/tests/NRedisStack.Tests/Json/JsonTests.cs index 1396881c..e92fafce 100644 --- a/tests/NRedisStack.Tests/Json/JsonTests.cs +++ b/tests/NRedisStack.Tests/Json/JsonTests.cs @@ -20,6 +20,30 @@ public void Dispose() redisFixture.Redis.GetDatabase().KeyDelete(_testName); } + [Fact] + public void TestPipeline() + { + var conn = redisFixture.Redis; + var db = conn.GetDatabase(); + IJsonCommands json = new JsonCommands(db); + var keys = CreateKeyNames(1); + var pipeline = new Pipeline(db); + pipeline.AddCommand(json.Set(keys[0], "$", new Person { Name = "Shachar", Age = 23 })); + pipeline.AddCommand(json.Get(keys[0])); + pipeline.AddCommand(json.Set(keys[0], "$.Name", "Shachar2")); + pipeline.AddCommand(json.Get(keys[0])); + pipeline.AddCommand(json.Set(keys[0], "$.Age", 24)); + pipeline.AddCommand(json.Get(keys[0])); + var results = pipeline.Execute(); + Assert.Equal(6, results.Length); + Assert.Equal("OK", results[0].ToString()); + Assert.Equal("{\"Name\":\"Shachar\",\"Age\":23}", results[1].ToString()); + Assert.Equal("OK", results[2].ToString()); + Assert.Equal("{\"Name\":\"Shachar2\",\"Age\":23}", results[3].ToString()); + Assert.Equal("OK", results[4].ToString()); + Assert.Equal("{\"Name\":\"Shachar2\",\"Age\":24}", results[5].ToString()); + } + [Fact] public void TestSetFromFile() { From b38449f73f13f87fbdb7344ea10c48b6f7e84456 Mon Sep 17 00:00:00 2001 From: Shachar Pashchur Date: Thu, 22 Dec 2022 19:36:30 +0200 Subject: [PATCH 2/7] delete line --- src/NRedisStack/Pipeline.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/NRedisStack/Pipeline.cs b/src/NRedisStack/Pipeline.cs index ef9058aa..dd833fd6 100644 --- a/src/NRedisStack/Pipeline.cs +++ b/src/NRedisStack/Pipeline.cs @@ -1,4 +1,3 @@ -@@ -0,0 +1,50 @@ using NRedisStack.RedisStackCommands; using StackExchange.Redis; From 8abd2d848cf5a888068c208e211ac3feb8018eb4 Mon Sep 17 00:00:00 2001 From: Shachar Pashchur Date: Thu, 22 Dec 2022 22:49:29 +0200 Subject: [PATCH 3/7] Fix test --- tests/NRedisStack.Tests/Json/JsonTests.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/NRedisStack.Tests/Json/JsonTests.cs b/tests/NRedisStack.Tests/Json/JsonTests.cs index e92fafce..b0273010 100644 --- a/tests/NRedisStack.Tests/Json/JsonTests.cs +++ b/tests/NRedisStack.Tests/Json/JsonTests.cs @@ -26,14 +26,14 @@ public void TestPipeline() var conn = redisFixture.Redis; var db = conn.GetDatabase(); IJsonCommands json = new JsonCommands(db); - var keys = CreateKeyNames(1); + var keys = CreateKeyNames(3); var pipeline = new Pipeline(db); - pipeline.AddCommand(json.Set(keys[0], "$", new Person { Name = "Shachar", Age = 23 })); - pipeline.AddCommand(json.Get(keys[0])); - pipeline.AddCommand(json.Set(keys[0], "$.Name", "Shachar2")); - pipeline.AddCommand(json.Get(keys[0])); - pipeline.AddCommand(json.Set(keys[0], "$.Age", 24)); - pipeline.AddCommand(json.Get(keys[0])); + pipeline.AddCommand(JsonCommandBuilder.Set(keys[0], "$", new Person { Name = "Shachar", Age = 23 })); + pipeline.AddCommand(JsonCommandBuilder.Get(keys[0])); + pipeline.AddCommand(JsonCommandBuilder.Set(keys[1], "$.Name", "Shachar2")); + pipeline.AddCommand(JsonCommandBuilder.Get(keys[1])); + pipeline.AddCommand(JsonCommandBuilder.Set(keys[2], "$.Age", 24)); + pipeline.AddCommand(JsonCommandBuilder.Get(keys[2])); var results = pipeline.Execute(); Assert.Equal(6, results.Length); Assert.Equal("OK", results[0].ToString()); From 7f12a8f5354e46cf565b10ef130bb301aadd08be Mon Sep 17 00:00:00 2001 From: Shachar Pashchur Date: Fri, 23 Dec 2022 01:07:04 +0200 Subject: [PATCH 4/7] fix test and version --- src/NRedisStack/NRedisStack.csproj | 2 +- tests/NRedisStack.Tests/Json/JsonTests.cs | 15 +++------------ tests/NRedisStack.Tests/NRedisStack.Tests.csproj | 2 +- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/src/NRedisStack/NRedisStack.csproj b/src/NRedisStack/NRedisStack.csproj index 65be7dd9..4e021fa3 100644 --- a/src/NRedisStack/NRedisStack.csproj +++ b/src/NRedisStack/NRedisStack.csproj @@ -1,7 +1,7 @@ - net6.0 + net7.0 enable enable Redis Open Source diff --git a/tests/NRedisStack.Tests/Json/JsonTests.cs b/tests/NRedisStack.Tests/Json/JsonTests.cs index b0273010..c0b9b2e1 100644 --- a/tests/NRedisStack.Tests/Json/JsonTests.cs +++ b/tests/NRedisStack.Tests/Json/JsonTests.cs @@ -26,22 +26,13 @@ public void TestPipeline() var conn = redisFixture.Redis; var db = conn.GetDatabase(); IJsonCommands json = new JsonCommands(db); - var keys = CreateKeyNames(3); var pipeline = new Pipeline(db); - pipeline.AddCommand(JsonCommandBuilder.Set(keys[0], "$", new Person { Name = "Shachar", Age = 23 })); - pipeline.AddCommand(JsonCommandBuilder.Get(keys[0])); - pipeline.AddCommand(JsonCommandBuilder.Set(keys[1], "$.Name", "Shachar2")); - pipeline.AddCommand(JsonCommandBuilder.Get(keys[1])); - pipeline.AddCommand(JsonCommandBuilder.Set(keys[2], "$.Age", 24)); - pipeline.AddCommand(JsonCommandBuilder.Get(keys[2])); + pipeline.AddCommand(JsonCommandBuilder.Set("key", "$", new Person { Name = "Shachar", Age = 23 })); + pipeline.AddCommand(JsonCommandBuilder.Get("key")); var results = pipeline.Execute(); - Assert.Equal(6, results.Length); + Assert.Equal(2, results.Length); Assert.Equal("OK", results[0].ToString()); Assert.Equal("{\"Name\":\"Shachar\",\"Age\":23}", results[1].ToString()); - Assert.Equal("OK", results[2].ToString()); - Assert.Equal("{\"Name\":\"Shachar2\",\"Age\":23}", results[3].ToString()); - Assert.Equal("OK", results[4].ToString()); - Assert.Equal("{\"Name\":\"Shachar2\",\"Age\":24}", results[5].ToString()); } [Fact] diff --git a/tests/NRedisStack.Tests/NRedisStack.Tests.csproj b/tests/NRedisStack.Tests/NRedisStack.Tests.csproj index 6e61a8a3..f10a4e74 100644 --- a/tests/NRedisStack.Tests/NRedisStack.Tests.csproj +++ b/tests/NRedisStack.Tests/NRedisStack.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net7.0 enable enable From 5ef2e8ee119b051527922631460a03b2a36afe93 Mon Sep 17 00:00:00 2001 From: Shachar Pashchur Date: Fri, 23 Dec 2022 01:13:53 +0200 Subject: [PATCH 5/7] add dotnet version '7.0.x' --- .github/workflows/integration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 04255b2e..43f8b289 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - dotnet-version: ['6.0.x'] + dotnet-version: ['6.0.x', '7.0.x'] steps: - uses: actions/checkout@v3 - name: install dotnet tools From dd0e355f8b10c66b9348db85418cbe6c5fce7dd6 Mon Sep 17 00:00:00 2001 From: Shachar Pashchur Date: Fri, 23 Dec 2022 01:16:34 +0200 Subject: [PATCH 6/7] only dotnet version '7.0.x' --- .github/workflows/integration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 43f8b289..8cbf408c 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - dotnet-version: ['6.0.x', '7.0.x'] + dotnet-version: ['7.0.x'] steps: - uses: actions/checkout@v3 - name: install dotnet tools From 25643ee34463efaf204590a7a031e50b7939d4b6 Mon Sep 17 00:00:00 2001 From: Shachar Pashchur Date: Fri, 23 Dec 2022 01:18:24 +0200 Subject: [PATCH 7/7] only dotnet version '7.0.x' in nuget-release --- .github/workflows/nuget-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nuget-release.yml b/.github/workflows/nuget-release.yml index 16f832a5..7e83e8c7 100644 --- a/.github/workflows/nuget-release.yml +++ b/.github/workflows/nuget-release.yml @@ -12,7 +12,7 @@ jobs: - name: Set up .NET Core uses: actions/setup-dotnet@v1 with: - dotnet-version: '6.0.x' + dotnet-version: '7.0.x' - name: Build run: dotnet pack -c Release --output .