[nominatim-web] Use lua-resty-redis instead of ngx_redis and ngx_redis2
- From: Bartłomiej Piotrowski <bpiotrowski src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nominatim-web] Use lua-resty-redis instead of ngx_redis and ngx_redis2
- Date: Wed, 27 May 2020 09:28:40 +0000 (UTC)
commit 5569078758153243673f7f820b8e0fbe9cbb9ecd
Author: Bartłomiej Piotrowski <bpiotrowski gnome org>
Date: Wed May 27 11:20:55 2020 +0200
Use lua-resty-redis instead of ngx_redis and ngx_redis2
Dockerfile | 1 +
nginx.conf | 26 +++++++++-----------------
redis.lua | 43 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 53 insertions(+), 17 deletions(-)
---
diff --git a/Dockerfile b/Dockerfile
index 5289888..37b7b32 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,2 +1,3 @@
FROM openresty/openresty:1.15.8.3-2-buster
ADD nginx.conf /usr/local/openresty/nginx/conf/nginx.conf
+ADD redis.lua /usr/local/openresty/nginx/redis.lua
diff --git a/nginx.conf b/nginx.conf
index 60edd5c..9689a11 100644
--- a/nginx.conf
+++ b/nginx.conf
@@ -34,9 +34,8 @@ http {
server nominatim-int.gnome.org:80;
}
- upstream redis {
- server redis.nominatim-web.svc.cluster.local:6379;
- keepalive 300;
+ init_by_lua_block {
+ redis_svc = "redis.nominatim-web.svc.cluster.local"
}
server {
@@ -53,24 +52,17 @@ http {
return ngx.req.get_uri_args()["accept-language"]
}
- location /redis-fetch {
+ location /redis {
internal;
+ resolver local=on ipv6=off;
set_md5 $redis_key $args;
- redis_pass redis;
- }
-
- location /redis-store {
- internal;
- set_md5 $key $arg_key;
- redis2_query set $key $echo_request_body;
- redis2_query expire $key 2592000;
- redis2_pass redis;
+ content_by_lua_file /usr/local/openresty/nginx/redis.lua;
}
location = /search {
set $cache_key search_$lang$arg_limit$arg_q$arg_country$arg_state$arg_city$arg_street;
- srcache_fetch GET /redis-fetch $cache_key;
- srcache_store PUT /redis-store key=$cache_key;
+ srcache_fetch GET /redis key=$cache_key;
+ srcache_store PUT /redis key=$cache_key;
srcache_store_no_cache on;
srcache_response_cache_control off;
@@ -95,8 +87,8 @@ http {
';
set $cache_key "reverse_$lang${arg_lat}x${arg_lon}";
- srcache_fetch GET /redis-fetch $cache_key;
- srcache_store PUT /redis-store key=$cache_key;
+ srcache_fetch GET /redis key=$cache_key;
+ srcache_store PUT /redis key=$cache_key;
srcache_store_no_cache on;
srcache_response_cache_control off;
diff --git a/redis.lua b/redis.lua
new file mode 100644
index 0000000..a444ecc
--- /dev/null
+++ b/redis.lua
@@ -0,0 +1,43 @@
+local method = ngx.req.get_method()
+local key = ngx.var.redis_key
+
+local redis = require "resty.redis"
+local red = redis:new()
+local ok, err = red:connect(redis_svc, 6379)
+
+if not ok then
+ ngx.log(ngx.ERR, err)
+ ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE)
+end
+
+if method == "GET" then
+ local res, err = red:get(key)
+
+ if err then
+ ngx.log(ngx.ERR, err)
+ ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE)
+ end
+
+ if res == ngx.null then
+ ngx.exit(ngx.HTTP_NOT_FOUND)
+ end
+
+ ngx.print(res)
+
+elseif method == "PUT" then
+ local value = ngx.req.get_body_data()
+
+ local ok, err = red:set(key, value, "EX", 2592000, "NX")
+ if not ok then
+ ngx.log(ngx.ERR, err)
+ ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE)
+ end
+else
+ ngx.exit(ngx.HTTP_NOT_ALLOWED)
+end
+
+red:set_keepalive(30000, 128)
+if not ok then
+ ngx.log(ngx.ERR, err)
+ return
+end
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]