gpt4 book ai didi

PHP Redis session 锁定内部结构

转载 作者:行者123 更新时间:2023-12-01 18:59:25 24 4
gpt4 key购买 nike

phpredis 怎么样? session 锁定在内部工作吗?它是否在内部存储一个值并不断检查它?如果我的 redis.session.lock_retries 很高,如果需要 10 秒才能获得锁定并且必须尝试数千次,这会给服务器带来负载吗?

以下是配置参数。

; Should the locking be enabled? Defaults to: 0.
redis.session.locking_enabled = 1
; How long should the lock live (in seconds)? Defaults to: value of max_execution_time.
redis.session.lock_expire = 60
; How long to wait between attempts to acquire lock, in microseconds (µs)?. Defaults to: 2000
redis.session.lock_wait_time = 50000
; Maximum number of times to retry (-1 means infinite). Defaults to: 10
redis.session.lock_retries = 10

最佳答案

Looks like it's a hot loop:

static int lock_acquire(RedisSock *redis_sock, redis_session_lock_status *lock_status)
{
...
for (i = 0; retries == -1 || i <= retries; i++) {
set_lock_key_result = set_session_lock_key(redis_sock, cmd, cmd_len);
...
/* Sleep unless we're done making attempts */
if (retries == -1 || i < retries) {
usleep(lock_wait_time);
}

对于长时间阻塞的请求,没有指数退避或其他缓解措施。如果您的扩展范围很高(例如,有时是即时锁定获取,有时是 1 秒,有时是 10 秒等),那么我建议将锁定尝试长度设置得相当低,然后编写自己的热循环,该循环更符合您的预计等待时间。如果您有一个相当稳定的预期等待时间(例如总是大约 10 秒),那么只需将等待时间设置得相当高即可。

关于PHP Redis session 锁定内部结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59426550/

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