lua-resty-redis-connector
用于 lua-resty-redis 的连接工具,使其能够轻松可靠地连接到 Redis 主机,无论是直接连接还是通过 Redis Sentinel 连接。
$ opm get pintsized/lua-resty-redis-connector
lua-resty-redis-connector
[!构建状态](https://travis-ci.org/ledgetech/lua-resty-redis-connector)
用于 lua-resty-redis 的连接工具,使其能够轻松可靠地连接到 Redis 主机,无论是直接连接还是通过 Redis Sentinel 连接。
概要
在本地主机上对数据库 2 进行快速简单的身份验证连接
local redis, err = require("resty.redis.connector").new({
url = "redis://[email protected]:6379/2",
}):connect()
更详细的配置,包含超时时间和默认密码
local rc = require("resty.redis.connector").new({
connect_timeout = 50,
read_timeout = 5000,
keepalive_timeout = 30000,
password = "mypass",
})
local redis, err = rc:connect({
url = "redis://127.0.0.1:6379/2",
})
-- ...
local ok, err = rc:set_keepalive(redis) -- uses keepalive params
将所有配置保存在一个表中,以便根据需要轻松创建/关闭连接。
local rc = require("resty.redis.connector").new({
connect_timeout = 50,
read_timeout = 5000,
keepalive_timeout = 30000,
host = "127.0.0.1",
port = 6379,
db = 2,
password = "mypass",
})
local redis, err = rc:connect()
-- ...
local ok, err = rc:set_keepalive(redis)
connect 可用于覆盖 new 中提供的一些默认值,这些默认值仅与此连接相关。
local rc = require("resty.redis.connector").new({
host = "127.0.0.1",
port = 6379,
db = 2,
})
local redis, err = rc:connect({
db = 5,
})
DSN 格式
如果存在 params.url
字段,则会对其进行解析以设置其他参数。任何手动指定的参数都将覆盖 DSN 中给定的值。
注意:这是从 v0.06 版本开始的更改。以前,DSN 值具有优先级。
直接 Redis 连接
直接连接到 Redis 的格式为
redis://PASSWORD@HOST:PORT/DB
PASSWORD
和 DB
字段是可选的,所有其他组件都是必需的。
通过 Redis Sentinel 连接
通过 Redis Sentinel 连接时的格式如下
sentinel://PASSWORD@MASTER_NAME:ROLE/DB
同样,PASSWORD
和 DB
是可选的。ROLE
必须是 m
或 s
,分别表示主服务器/从服务器。
在 5.0.1 以上版本的 Redis 中,Sentinel 可以选择性地要求其自己的密码。如果启用,请在 sentinel_password
参数中提供此密码。
还必须提供一个 sentinels
表格,例如
local redis, err = rc:connect{
url = "sentinel://mymaster:a/2",
sentinels = {
{ host = "127.0.0.1", port = 26379 },
},
sentinel_password = "password"
}
代理模式
如果通过代理服务(例如 Twemproxy)连接到 Redis,请启用 connection_is_proxied
参数。这些代理通常仅支持 Redis 命令的有限子集,这些命令不需要状态并且不影响多个键。数据库和事务也不受支持。
代理模式将禁用在连接时切换到数据库。不支持的命令(默认为 Twemproxy 不支持的命令)将立即返回 nil, err
而不是发送到代理,这可能导致连接断开。
添加连接到 keepalive 池时,不会发送 discard
。
禁用的命令
如果配置为命令表,则命令方法将被一个函数替换,该函数会立即返回 nil, err
,而不会将命令转发到服务器。
默认参数
{
connect_timeout = 100,
read_timeout = 1000,
connection_options = {}, -- pool, etc
keepalive_timeout = 60000,
keepalive_poolsize = 30,
host = "127.0.0.1",
port = "6379",
path = "", -- unix socket path, e.g. /tmp/redis.sock
password = "",
sentinel_password = "",
db = 0,
master_name = "mymaster",
role = "master", -- master | slave
sentinels = {},
connection_is_proxied = false,
disabled_commands = {},
}
API
new
语法:rc = redis_connector.new(params)
创建 Redis Connector 对象,使用给定的参数覆盖默认参数。如果发生错误,则返回 nil
和一个描述错误的字符串。
connect
语法:redis, err = rc:connect(params)
尝试根据提供的 params 创建连接,回退到 new
中给定的默认值或预定义的默认值。如果无法建立连接,则返回 nil
和一个描述原因的字符串。
请注意,此处给定的 params
不会更改连接器自身的配置,仅用于更改此特定连接操作。因此,以下参数在 connect
中给出时没有任何意义。
keepalive_poolsize
keepalive_timeout
connection_is_proxied
disabled_commands
set_keepalive
语法:ok, err = rc:set_keepalive(redis)
尝试根据 new
中给定的超时时间和池大小参数或预定义的默认值,将给定的 Redis 连接放入 keepalive 池中。
这允许应用程序释放资源,而无需跟踪应用程序范围的 keepalive 设置。
返回 1
,或者在发生错误的情况下返回 nil
和一个描述错误的字符串。
工具函数
以下方法通常不需要,但如果需要自定义接口,则可能很有用。
connect_via_sentinel
语法:redis, err = rc:connect_via_sentinel(params)
通过首先访问 params.sentinels
表中提供的 sentinel 并使用 params.master_name
和 params.role
查询它来返回 Redis 连接。
try_hosts
语法:redis, err = rc:try_hosts(hosts)
按顺序尝试提供的 hosts 并返回第一个成功的连接。
connect_to_host
语法:redis, err = rc:connect_to_host(host)
尝试连接到提供的 host
。
sentinel.get_master
语法:master, err = sentinel.get_master(sentinel, master_name)
给定一个已连接的 Sentinel 实例和一个主服务器名称,将返回当前的主 Redis 实例。
sentinel.get_slaves
语法:slaves, err = sentinel.get_slaves(sentinel, master_name)
给定一个已连接的 Sentinel 实例和一个主服务器名称,将返回已注册的从 Redis 实例列表。
作者
James Hurst <[email protected]>
许可证
此模块在 2 条款 BSD 许可证下获得许可。
版权所有 (c) James Hurst <[email protected]>
保留所有权利。
在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否修改:
源代码的重新分发必须保留上述版权声明、此条件列表和以下免责声明。
二进制形式的重新分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表和以下免责声明。
本软件由版权持有人和贡献者“按原样”提供,并且不提供任何明示或暗示的担保,包括但不限于适销性和特定用途适用性的暗示担保。在任何情况下,版权持有人或贡献者均不对任何直接、间接、附带、特殊、惩罚性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润损失;或业务中断)负责,无论这些损害是如何造成的以及基于何种责任理论,无论是合同、严格责任还是侵权行为(包括疏忽或其他原因),即使已被告知可能发生此类损害。
作者
James Hurst
许可证
2bsd
版本
-
用于 lua-resty-redis 的连接工具,使其能够轻松可靠地连接到 Redis 主机,无论是直接连接还是通过 Redis Sentinel 连接。 2020-09-10 14:29:03
-
用于 lua-resty-redis 的连接工具,使其能够轻松可靠地连接到 Redis 主机,无论是直接连接还是通过 Redis Sentinel 连接。 2020-09-08 15:32:43
-
用于 lua-resty-redis 的连接工具,使其能够轻松可靠地连接到 Redis 主机,无论是直接连接还是通过 Redis Sentinel 连接。 2018-12-21 15:18:54
-
用于 lua-resty-redis 的连接工具,使其能够轻松可靠地连接到 Redis 主机,无论是直接连接还是通过 Redis Sentinel 连接。 2018-07-31 19:59:20
-
用于 lua-resty-redis 的连接工具,使其能够轻松可靠地连接到 Redis 主机,无论是直接连接还是通过 Redis Sentinel 连接。 2017-08-16 16:01:12
-
用于 lua-resty-redis 的连接工具,使其能够轻松可靠地连接到 Redis 主机,无论是直接连接还是通过 Redis Sentinel 连接。 2017-08-16 08:49:19
-
用于 lua-resty-redis 的连接工具,使其能够轻松可靠地连接到 Redis 主机,无论是直接连接还是通过 Redis Sentinel 连接。 2017-07-21 11:53:03
-
用于 lua-resty-redis 的连接工具,使其能够轻松可靠地连接到 Redis 主机,无论是直接连接还是通过 Redis Sentinel 连接。 2016-09-30 09:05:17