lock(name: string, expirationTime: number) {
return new Promise((resolve, reject) => {
this.redisClient
.setnx(name, 'locked')
.then(async (res) => {
if (res == 1) {
await this.redisClient.expire(name, expirationTime)
resolve('OK')
} else reject('Lock already held by another client')
})
.catch((err) => {
reject(err)
})
})
}
releaseLock(name: string) {
return new Promise((resolve, reject) => {
this.redisClient
.del(name)
.then((res) => {
resolve('OK')
})
.catch((err) => {
reject(err)
})
})
}
我已经使用上述代码来获取锁并释放它,它在本地PC上工作正常,但在AWS上不工作。事件ot不会引发任何错误
用法:
this.redisDataServices
.lock('publisher:lock', 30)
.then(async (lock) => {
// do something...
})
1条答案
按热度按时间vyu0f0g11#
以下是一些需要检查的事项:
1.Redis配置:确保您的AWS环境中的Redis服务器配置正确,并且可以从您的应用程序访问。验证用于连接Redis的主机、端口和身份验证详细信息(如果有)。
1.网络连接:确保您的AWS环境允许出站连接到Redis服务器。检查安全组和网络配置以确认允许必要的网络流量。
1.Redis版本兼容性:检查本地机器上运行的Redis版本和AWS上运行的版本。版本之间的行为或功能可能存在差异,这可能会影响锁获取和释放操作。
1.错误处理:虽然您提到没有引发错误,但在代码中包含错误处理和日志记录是一个很好的做法。添加适当的错误处理和日志记录语句,以捕获在锁获取或释放过程中可能发生的任何潜在错误或异常。这可以帮助您识别可能在静默状态下发生的任何问题或错误消息。
1.AWS特定注意事项:AWS环境通常具有额外的安全层或基础设施组件,这些组件可能会影响应用程序的行为。确保您拥有必要的权限和配置,以便与Redis或您正在使用的任何其他服务进行交互。
通过检查这些方面并确保您的AWS环境已正确配置为与Redis一起使用,您应该能够识别并解决可能导致本地计算机和AWS之间行为差异的任何问题。