workerman redis与mysql怎么才能配合使用

abcabcxx

请问大神们,个人想法是先读取redis->get读取key,不存在时去数据库取同时设置缓存,在redis->get中不能使用数据库操作,正确写法应该怎么写,谢谢
错误代码 worker[BusinessWorker:8843] exit with status 64000
代码如下

1125 4 0
4个回答

li914

1、先通过redis查询数据存在,存在则直接返回
2、不存在,通过mysql查询,并且保存和设置redis缓存,然后返回

redis 中的 get 方法,好像不能使用闭包(匿名)函数吧
我记得好像,闭包函数使用上层变量,需要使用 use 引入变量

  • abcabcxx 2022-05-26

    我使用的是composer require workerman/redis 安装,读取都是,判断都是这样一个方法,在({ })内不能使用外面的变量与对象 ({ })后面加,会先执行,这种方式应该是异步了,所以不知道怎么写了
    $redis->get('key', function($result) {
    print_R($result);
    echo "\r\n";
    echo "11111111\r\n";
    });
    echo "222222222\r\n";
    判断存在也是这样写的同样的问题

    $redis->exists('key', function ($result) {
    print_R($result);
    echo "\r\n";
    echo "11111111\r\n";
    });
    echo "222222222\r\n";

    最终都是显示
    222222222
    $result数组的值
    111111111

yzh52521

先 判断 $redis->exists() 存在 获取 $redis->get()
不存在 $redis->set();

  • abcabcxx 2022-05-26

    谢谢

  • abcabcxx 2022-05-26

    我使用的是composer require workerman/redis 安装,读取都是,判断都是这样一个方法,在({ })内不能使用外面的变量与对象 ({ })后面加,会先执行,这种方式应该是异步了,所以不知道怎么写了
    $redis->get('key', function($result) {
    print_R($result);
    echo "\r\n";
    echo "11111111\r\n";
    });
    echo "222222222\r\n";
    判断存在也是这样写的同样的问题

    $redis->exists('key', function ($result) {
    print_R($result);
    echo "\r\n";
    echo "11111111\r\n";
    });
    echo "222222222\r\n";

    最终都是显示
    222222222
    $result数组的值
    111111111

  • yzh52521 2022-05-26

    支持 闭包么?

  • abcabcxx 2022-05-26

    试过没成功

li914

workerman/redis get可以支持闭包 截图

  • abcabcxx 2022-05-26

    这个闭包我试过,搞了好久,现在一试就好了,非常感谢 li914

抽不完的寂寞

不会异步就用redis扩展同步用法吧,看手册里workerman/redis用于subscribe订阅,除此之外建议用redis扩展。

  • 暂无评论
年代过于久远,无法发表回答
🔝