1
+ // EXAMPLE: pipe_trans_tutorial
2
+ using NRedisStack ;
3
+ using StackExchange . Redis ;
4
+ //REMOVE_START
5
+ using NRedisStack . Tests ;
6
+
7
+ namespace Doc ;
8
+ [ Collection ( "DocsTests" ) ]
9
+ //REMOVE_END
10
+ public class PipeTransExample
11
+ // REMOVE_START
12
+ : AbstractNRedisStackTest , IDisposable
13
+ // REMOVE_END
14
+ {
15
+ // REMOVE_START
16
+ public PipeTransExample ( EndpointsFixture fixture ) : base ( fixture ) { }
17
+
18
+ [ SkippableFact ]
19
+ // REMOVE_END
20
+ public async Task run ( )
21
+ {
22
+ //REMOVE_START
23
+ // This is needed because we're constructing ConfigurationOptions in the test before calling GetConnection
24
+ SkipIfTargetConnectionDoesNotExist ( EndpointsFixture . Env . Standalone ) ;
25
+ var _ = GetCleanDatabase ( EndpointsFixture . Env . Standalone ) ;
26
+ //REMOVE_END
27
+ var muxer = ConnectionMultiplexer . Connect ( "localhost:6379" ) ;
28
+ var db = muxer . GetDatabase ( ) ;
29
+ // REMOVE_START
30
+ db . KeyDelete ( new RedisKey [ ] {
31
+ "counter:1" , "counter:2" , "counter:3" ,
32
+ "seat:0" , "seat:1" , "seat:2" , "seat:3" , "seat:4" ,
33
+ "customer:39182" ,
34
+ "Details"
35
+ } ) ;
36
+ // REMOVE_END
37
+
38
+ // STEP_START basic_pipe
39
+ var pipeline = new Pipeline ( db ) ;
40
+
41
+ for ( int i = 0 ; i < 5 ; i ++ )
42
+ {
43
+ pipeline . Db . StringSetAsync ( $ "seat:{ i } ", $ "#{ i } ") ;
44
+ }
45
+ pipeline . Execute ( ) ;
46
+
47
+ var resp1 = db . StringGet ( "seat:0" ) ;
48
+ Console . WriteLine ( resp1 ) ; // >>> #0
49
+
50
+ var resp2 = db . StringGet ( "seat:3" ) ;
51
+ Console . WriteLine ( resp2 ) ; // >>> #3
52
+
53
+ var resp3 = db . StringGet ( "seat:4" ) ;
54
+ Console . WriteLine ( resp2 ) ; // >>> #4
55
+ // STEP_END
56
+ // REMOVE_START
57
+ Assert . Equal ( "#0" , resp1 ) ;
58
+ Assert . Equal ( "#3" , resp2 ) ;
59
+ Assert . Equal ( "#4" , resp3 ) ;
60
+ // REMOVE_END
61
+
62
+ // STEP_START basic_trans
63
+ var trans = new Transaction ( db ) ;
64
+
65
+ trans . Db . StringIncrementAsync ( "counter:1" , 1 ) ;
66
+ trans . Db . StringIncrementAsync ( "counter:2" , 2 ) ;
67
+ trans . Db . StringIncrementAsync ( "counter:3" , 3 ) ;
68
+
69
+ trans . Execute ( ) ;
70
+
71
+ var resp4 = db . StringGet ( "counter:1" ) ;
72
+ Console . WriteLine ( resp4 ) ; // >>> 1
73
+
74
+ var resp5 = db . StringGet ( "counter:2" ) ;
75
+ Console . WriteLine ( resp5 ) ; // >>> 2
76
+
77
+ var resp6 = db . StringGet ( "counter:3" ) ;
78
+ Console . WriteLine ( resp6 ) ; // >>> 3
79
+ // STEP_END
80
+ // REMOVE_START
81
+ Assert . Equal ( "1" , resp4 ) ;
82
+ Assert . Equal ( "2" , resp5 ) ;
83
+ Assert . Equal ( "3" , resp6 ) ;
84
+ // REMOVE_END
85
+
86
+ // STEP_START trans_watch
87
+ var watchedTrans = new Transaction ( db ) ;
88
+
89
+ watchedTrans . AddCondition ( Condition . KeyNotExists ( "customer:39182" ) ) ;
90
+
91
+ watchedTrans . Db . HashSetAsync (
92
+ "customer:39182" ,
93
+ new HashEntry [ ] {
94
+ new HashEntry ( "name" , "David" ) ,
95
+ new HashEntry ( "age" , "27" )
96
+ }
97
+ ) ;
98
+
99
+ bool succeeded = watchedTrans . Execute ( ) ;
100
+ Console . WriteLine ( succeeded ) ; // >>> true
101
+ // STEP_END
102
+ // REMOVE_START
103
+ Assert . True ( succeeded ) ;
104
+ // REMOVE_END
105
+
106
+ // STEP_START when_condition
107
+ bool resp7 = db . HashSet ( "Details" , "SerialNumber" , "12345" ) ;
108
+ Console . WriteLine ( resp7 ) ; // >>> true
109
+
110
+ db . HashSet ( "Details" , "SerialNumber" , "12345A" , When . NotExists ) ;
111
+ string resp8 = db . HashGet ( "Details" , "SerialNumber" ) ;
112
+ Console . WriteLine ( resp8 ) ; // >>> 12345
113
+
114
+ db . HashSet ( "Details" , "SerialNumber" , "12345A" ) ;
115
+ string resp9 = db . HashGet ( "Details" , "SerialNumber" ) ;
116
+ Console . WriteLine ( resp9 ) ; // >>> 12345A
117
+ // STEP_END
118
+ // REMOVE_START
119
+ Assert . True ( resp7 ) ;
120
+ Assert . Equal ( "12345" , resp8 ) ;
121
+ Assert . Equal ( "12345A" , resp9 ) ;
122
+ // REMOVE_END
123
+ }
124
+ }
0 commit comments