Last active
October 5, 2022 18:28
-
-
Save kveber/fdda4503a0074e9df4a4f19beaa02cda to your computer and use it in GitHub Desktop.
Example - lua-resty-redis
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# SOURCE: https://nginx-lua.readthedocs.io/en/latest/examples/lua-resty-redis/ | |
# you do not need the following line if you are using | |
# the OpenResty bundle: | |
lua_package_path "/path/to/lua-resty-redis/lib/?.lua;;"; | |
server { | |
location /test { | |
content_by_lua_block { | |
local redis = require "resty.redis" | |
local red = redis:new() | |
red:set_timeouts(1000, 1000, 1000) -- 1 sec | |
-- or connect to a unix domain socket file listened | |
-- by a redis server: | |
-- local ok, err = red:connect("unix:/path/to/redis.sock") | |
local ok, err = red:connect("127.0.0.1", 6379) | |
if not ok then | |
ngx.say("failed to connect: ", err) | |
return | |
end | |
ok, err = red:set("dog", "an animal") | |
if not ok then | |
ngx.say("failed to set dog: ", err) | |
return | |
end | |
ngx.say("set result: ", ok) | |
local res, err = red:get("dog") | |
if not res then | |
ngx.say("failed to get dog: ", err) | |
return | |
end | |
if res == ngx.null then | |
ngx.say("dog not found.") | |
return | |
end | |
ngx.say("dog: ", res) | |
red:init_pipeline() | |
red:set("cat", "Marry") | |
red:set("horse", "Bob") | |
red:get("cat") | |
red:get("horse") | |
local results, err = red:commit_pipeline() | |
if not results then | |
ngx.say("failed to commit the pipelined requests: ", err) | |
return | |
end | |
for i, res in ipairs(results) do | |
if type(res) == "table" then | |
if res[1] == false then | |
ngx.say("failed to run command ", i, ": ", res[2]) | |
else | |
-- process the table value | |
end | |
else | |
-- process the scalar value | |
end | |
end | |
-- put it into the connection pool of size 100, | |
-- with 10 seconds max idle time | |
local ok, err = red:set_keepalive(10000, 100) | |
if not ok then | |
ngx.say("failed to set keepalive: ", err) | |
return | |
end | |
-- or just close the connection right away: | |
-- local ok, err = red:close() | |
-- if not ok then | |
-- ngx.say("failed to close: ", err) | |
-- return | |
-- end | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment