http-redis2 #
Streaming non-blocking upstream module for Redis — proxy raw Redis protocol traffic from nginx with full pipelining support, complementing the Lua resty.redis client.
Source: upstream source
Directives
redis2_bind #
syntax: redis2_bind 1 arg; · context: http, server, location
Sets the local IP address for outgoing connections to the Redis upstream server.
redis2_buffer_size #
syntax: redis2_buffer_size 1 arg (size (k/m/g)); · context: http, server, location
Size in bytes; accepts k / m / g suffixes.
redis2_connect_timeout #
syntax: redis2_connect_timeout 1 arg (duration in ms); · context: http, server, location
Such warnings might be rare but just be prepared for it. * You should tune the various timeout settings provided by this module like redis2_connect_timeout and redis2_read_timeout.
redis2_literal_raw_query #
syntax: redis2_literal_raw_query 1 arg (string); · context: location, location-if
Here's some examples Note that in the second sample above, the set_unescape_uri directive is provided by the set-misc-nginx-module. Back to TOC redis2_literal_raw_query ------------------------ syntax: redis2_literal_raw_query QUERY default: no context: location, location if Specify a raw Redis query but Nginx variables in it will not be not recognized.
redis2_next_upstream #
syntax: redis2_next_upstream 1+ args (bitmask); · context: http, server, location
This default size is the page size, may be 4k or 8k. Back to TOC redis2_next_upstream -------------------- syntax: redis2_next_upstream [ error | timeout | invalid_response | off ] default: error timeout context: http, server, location Specify which failure conditions should cause the request to be forwarded to another upstream server.
redis2_pass #
syntax: redis2_pass 1 arg; · context: location, location-if
Applies only when the value in redis2_pass is an upstream with two or more servers.
redis2_query #
syntax: redis2_query 1+ args; · context: location, location-if
So you can use them in redis2_query directives, for example, Back to TOC Lua Interoperability ==================== This module can be served as a non-blocking redis2 client for lua-nginx-module (but nowadays it is recommended to use the lua-resty-redis library instead, which is much simpler to use and more efficient most of the time).
redis2_raw_queries #
syntax: redis2_raw_queries 2 args; · context: location, location-if
If you want to specify multiple pipelined commands in a single query, use the redis2_raw_queries directive instead. Back to TOC redis2_raw_queries ------------------ syntax: redis2_raw_queries N QUERIES default: no context: location, location if Specify N commands in the QUERIES argument.
redis2_raw_query #
syntax: redis2_raw_query 1 arg; · context: location, location-if
For example, then GET /pipelined will yield two successive raw Redis responses while newlines here are actually CR LF (\r\n). Back to TOC redis2_raw_query ---------------- syntax: redis2_raw_query QUERY default: no context: location, location if Specify raw Redis queries and nginx variables are recognized in the QUERY argument.
redis2_read_timeout #
syntax: redis2_read_timeout 1 arg (duration in ms); · context: http, server, location
Time units supported are s(seconds), ms(milliseconds), y(years), M(months), w(weeks), d(days), h(hours), and m(minutes). Back to TOC redis2_read_timeout ------------------- syntax: redis2_read_timeout <time> default: 60s context: http, server, location The timeout for reading TCP responses from the redis server, in seconds by default.
redis2_send_timeout #
syntax: redis2_send_timeout 1 arg (duration in ms); · context: http, server, location
This time must be less than 597 hours. Back to TOC redis2_send_timeout ------------------- syntax: redis2_send_timeout <time> default: 60s context: http, server, location The timeout for sending TCP requests to the Redis server, in seconds by default.
Example
location = /foo {
set $value 'first';
redis2_query set one $value;
redis2_pass 127.0.0.1:6379;
}
# GET /get?key=some_key
location = /get {
set_unescape_uri $key $arg_key; # this requires ngx_set_misc
redis2_query get $key;
redis2_pass foo.com:6379;
}
# GET /set?key=one&val=first%20value
location = /set {
set_unescape_uri $key $arg_key; # this requires ngx_set_misc
set_unescape_uri $val $arg_val; # this requires ngx_set_misc
redis2_query set $key $val;
redis2_pass foo.com:6379;
}
# multiple pipelined queries
location = /foo {
set $value 'first';
redis2_query set one $value;
redis2_query get one;
redis2_query set one two;
redis2_query get one;
redis2_pass 127.0.0.1:6379;
}
location = /bar {
# $ is not special here...
redis2_literal_raw_query '*1\r\n$4\r\nping\r\n';
redis2_pass 127.0.0.1:6379;
}
location = /bar {
# variables can be used below and $ is special
redis2_raw_query 'get one\r\n';
redis2_pass 127.0.0.1:6379;
}
# GET /baz?get%20foo%0d%0a
location = /baz {
set_unescape_uri $query $query_string; # this requires the ngx_set_misc module
redis2_raw_query $query;
redis2_pass 127.0.0.1:6379;
}
location = /init {
redis2_query del key1;
redis2_query lpush key1 C;
redis2_query lpush key1 B;
redis2_query lpush key1 A;
redis2_pass 127.0.0.1:6379;
}
location = /get {
redis2_query lrange key1 0 -1;
redis2_pass 127.0.0.1:6379;
}