【问题标题】:Laravel + Wincache on MS Azure: Not storing valuesMS Azure 上的 Laravel + Wincache:不存储值
【发布时间】:2016-02-10 15:13:20
【问题描述】:

我在 azure 上运行 PHP 应用程序并且遇到了一些奇怪的行为:这个 sn-p 在控制台命令中运行:

public function fire(Illuminate\Contracts\Cache\Repository $cache) {
    $cache->forever('someKey', 'someValue');

    var_dump($cache->get('someKey'));
}

输出是:

NULL

执行命令后通过 wincache_ucache_get 访问值也会返回 NULL(带前缀和不带前缀)。有人知道吗?


P.S.:根据 phpinfo(),wincache 用户缓存已启用:wincache.ucenabled On


经过更多调试,我知道了更多事实:

在隔离的 php 文件中,wincache_ucache_setwincache_ucache_get 可以完美运行。

但是,在Illuminate\Cache\WinCacheStore 中对wincache_ucache_set 的调用返回false

【问题讨论】:

    标签: php laravel azure wincache


    【解决方案1】:

    由于php运行时有一个设置wincache.enablecli来控制是否在CLI模式下启用wincache

    默认设置为 0,因此函数 wincache_ucache_set() 不能在工匠命令中工作。

    你可以参考Azure官方关于Changing PHP_INI_SYSTEM configuration settings的指南来设置

    wincache.enablecli=1

    在附加的 php 配置设置中。

    那么下面的代码sn-p应该可以正常工作了:

    public function fire()
        {
            wincache_ucache_set('foo','goo',0);
            var_dump(wincache_ucache_get('foo')); 
        }
    

    或喜欢:

    use Cache;
    public function fire()
        {
    
            Cache::forever('someKey', 'someValue');
            var_dump(Cache::get('someKey'));
    
        }
    

    【讨论】:

    • 感谢您的回答!但这对我不起作用:我设置了wincache.enablecli=1phpinfo() 报告wincache.enablecli On On。现在 wincache_ucache_set 在 artisan 命令中返回 true; CGI 脚本中的wincache_ucache_get 不返回正确的值。 CGI 和 CLI 是否可能有单独的商店?
    • 看来wincache 会为不同的用户创建不同的user cache 实例。这里cli中的artisan命令和cgi中的http请求是不同的用户。而且他们不能共享他们的用户缓存。也许我们需要一些其他的缓存类型。比如“file,array”,它将利用相同的本地文件来缓存值,或者“redis”,它可以将值共享给不同的用户。
    • 我可以确认@GaryLiu-MSFT 是正确的; WinCache 为 CLI 执行的进程与通过 fastcgi 启动的进程创建单独的缓存。来源:我是 WinCache 的当前所有者。
    猜你喜欢
    • 2021-05-06
    • 2020-11-13
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2020-07-24
    • 2021-03-07
    相关资源
    最近更新 更多