gpt4 book ai didi

redis - 使用 Redis 拥有本地和远程客户端

转载 作者:IT王子 更新时间:2023-10-29 06:12:14 26 4
gpt4 key购买 nike

我想在 Redis 中设置一些写入约束,我想将这些约束存储在哈希中。

我最初的想法是修改设置命令,以便它们在写入 Redis 之前检查规则。我在想通过这种方式检查会非常快。当然,每次更改 Redis 时,这种方法都需要进行更多修改,如果您认为这是关于学校作业,我觉得这有点硬核。

第二个想法是有两种类型的 Redis 客户端。一个在 Web 应用程序端(可能是 Web 应用程序的多个实例),一个在 Redis 机器上。基于这个想法提出了我的问题。

  1. 与首先检查约束然后写入 Redis 的 1 个客户端相比,2 个客户端(本地和远程)是否会提高性能?还是我应该坚持使用一个客户端来完成这一切(phpredis 或 predis,应用程序在 PHP 上,对约束检查进行了一些修改)?

  2. 如果我可以尝试这 2 个客户端,使用哪种编程语言来实现本地客户端(C、Lua 或其他)会更好?

最佳答案

与其尝试修改 Redis 行为本身,不如先尝试在服务器端 Lua 脚本中实现约束(需要 Redis 2.6 分支)。

Lua EVAL 脚本可以在执行实际写入操作之前轻松地对已存储在 Redis 中的数据执行一些检查。

这是一个例子。假设我们有两个代表银行账户的 key ,我们需要在账户之间实现安全交易。例如,我们必须检查两个账户是否存在以及源账户是否包含所需资金。

# set 2 accounts for John and Bob
set account:john 100
set account:bob 20

# transfer $10 from John to Bob, checking all constraints
eval "if redis.call('exists',KEYS[2])==1 and redis.call('get',KEYS[1])>=ARGV[1] then
redis.call( 'incrby', KEYS[2], ARGV[1] )
redis.call( 'incrby', KEYS[1], - ARGV[1] )
return 1
else
error('invalid transaction')
end" 2 account:john account:bob 10

您可以在以下位置找到有关 Redis 脚本功能的文档: http://redis.io/commands#scripting (先看 EVAL 命令)。

要回答您最初的问题(如果您不能使用 Redis 2.6),本地客户端会略微提高性能,因为它可以使用 unix 域套接字连接到 Redis(绕过一些 TCP 开销)并节省一些网络往返。但这是以额外的复杂性为代价的。

关于redis - 使用 Redis 拥有本地和远程客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10277740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com