@@ -34,6 +34,39 @@ Please see
34
34
[ REPLICATE.md] ( https://github.com/memcached/memcached-proxylibs/blob/main/lib/routelib/REPLICATE.md )
35
35
for more details on what replication means in memcached.
36
36
37
+ ``` lua
38
+ pools {
39
+ -- We create an anonymous set of 3 pools, each with one server.
40
+ -- This lets us seamlessly expand the total size of the cache by adding
41
+ -- servers to each pool without changing anything else.
42
+ set_main = {
43
+ { backends = { " 127.1.0.1:11211" } },
44
+ { backends = { " 127.1.0.2:11211" } },
45
+ { backends = { " 127.1.0.3:11211" } },
46
+ },
47
+ }
48
+
49
+ routes {
50
+ cmap = {
51
+ -- override specific commands to fetch from just one server for
52
+ -- performance reasons.
53
+ get = route_failover {
54
+ children = " set_main" ,
55
+ stats = true , -- get extra stats counters in `stats proxy`
56
+ miss = true , -- failover if miss, not just for down server
57
+ shuffle = true , -- each proxy will have a different order
58
+ },
59
+ -- if gat/gets/mg/etc are used override here.
60
+ },
61
+ -- by default, copy commands to all servers
62
+ default = route_allfastest {
63
+ child = " main" ,
64
+ },
65
+ }
66
+ ```
67
+
68
+ ### Prefix router
69
+
37
70
``` lua
38
71
-- In this example we logically split our cache where by default keys are
39
72
-- spread across a pool of servers to maximize available memory. Then, a small
@@ -85,3 +118,123 @@ routes{
85
118
},
86
119
}
87
120
```
121
+
122
+ ### Command map
123
+
124
+ ``` lua
125
+ -- if you don't want to route based on prefix, but instead just based on the
126
+ -- command used, replace map with cmap when building routes{}
127
+ pools {
128
+ foo = {
129
+ backends = {
130
+ " 127.0.0.1:11214" ,
131
+ " 127.0.0.1:11215" ,
132
+ }
133
+ },
134
+ bar = {
135
+ backends = {
136
+ " 127.0.0.1:11216" ,
137
+ }
138
+ },
139
+ }
140
+
141
+ routes {
142
+ cmap = {
143
+ get = route_direct {
144
+ child = " foo" ,
145
+ },
146
+ },
147
+ default = route_allfastest {
148
+ children = { " bar" }
149
+ },
150
+ }
151
+ ```
152
+
153
+ ### Route by listener port with tags
154
+
155
+ ``` lua
156
+ -- it's possible to have different route trees based on the listener port.
157
+ -- this is useful if you want to route to different pools by port alone, or
158
+ -- have different prefix trees for different services.
159
+ --
160
+ -- memcached must be started like:
161
+ -- -l 127.0.0.1:12051 -l tag_b_:127.0.0.1:12052 -l tag_cccc_:127.0.0.1:12053
162
+ -- this gives a default listener on 12051, "b" tag for 12052, and "cccc" tag
163
+ -- for 12053.
164
+ pools {
165
+ foo = {
166
+ backends = {
167
+ " 127.0.0.1:11214" ,
168
+ }
169
+ },
170
+ bar = {
171
+ backends = {
172
+ { host = " 127.0.0.1" , port = 11215 , retrytimeout = 5 }
173
+ }
174
+ },
175
+ baz = {
176
+ backends = {
177
+ " 127.0.0.1:11216" ,
178
+ }
179
+ },
180
+ }
181
+
182
+ -- no supplied tag makes this the "default" router.
183
+ routes {
184
+ default = route_direct {
185
+ child = " foo" ,
186
+ }
187
+ }
188
+
189
+ -- this route tree is only executed if a client is connected to port 12052
190
+ routes {
191
+ tag = " b" ,
192
+ default = route_direct {
193
+ child = " bar"
194
+ }
195
+ }
196
+
197
+ -- this route tree is only executed if a client is connected to port 12053
198
+ routes {
199
+ tag = " cccc" ,
200
+ default = route_direct {
201
+ child = " baz"
202
+ }
203
+ }
204
+ ```
205
+
206
+ ### Nested route handlers
207
+
208
+ ``` lua
209
+ -- A route handler can accept another route handler for any child type entry.
210
+ -- This lets you freely compose complex behaviors from simpler route handlers.
211
+ pools {
212
+ one = {
213
+ backends = {
214
+ " 127.0.0.1:11214" ,
215
+ " 127.0.0.1:11215" ,
216
+ }
217
+ },
218
+ two = {
219
+ backends = {
220
+ " 127.0.0.1:11216" ,
221
+ }
222
+ },
223
+ three = {
224
+ backends = {
225
+ " 127.0.0.1:11217" ,
226
+ }
227
+ },
228
+ }
229
+
230
+ routes {
231
+ map = {
232
+ foo = route_split {
233
+ child_a = " foo" ,
234
+ child_b = route_allfastest {
235
+ children = { " two" , " three" }
236
+ },
237
+ },
238
+ },
239
+ }
240
+ ```
0 commit comments