相关疑难解决方法(0)

如何正确使用 PHP5 信号量?

我有这个函数试图从缓存中读取一些值。但是如果值不存在,它应该调用替代源 API 并将新值保存到缓存中。但是,服务器非常过载,几乎每次当值不存在时都会创建一个请求(大量 API 调用),并且每个请求都会将新值存储到缓存中。但是,我想要的是能够多次调用 API,但只有一个进程/请求能够将其存储在缓存中:

function fetch_cache($key, $alternativeSource) {
    $redis = new Redis();
    $redis->pconnect(ENV_REDIS_HOST);
    $value = $redis->get($key);

    if( $value === NULL ) {
        $value = file_get_contents($alternativeSource);

        // here goes part that I need help with
        $semaphore = sem_get(6000, 1); // does this need to be called each time this function is called?
        if( $semaphore === FALSE ) {
            // This means I have failed to create semaphore?
        }

        if( sem_aquire($semaphore, true) ) {
            // we have aquired semaphore so …
Run Code Online (Sandbox Code Playgroud)

php semaphore

7
推荐指数
1
解决办法
5446
查看次数

标签 统计

php ×1

semaphore ×1