• Redis 简单使用
    • 简单操作
    • 指定连接池获取连接
    • 缓存命中率
    • 事件监听
      • before 事件
      • after 事件

    Redis 简单使用

    简单操作

    比如显示给定用户的配置文件。

    1. $user = Redis::get('user:profile:'.$id);
    2. Redis::set('user:profile:'.$id, "ok");

    你可以在 Redis 上调用任何的 Redis 命令。Swoft 使用魔术方法将传递命令给 Redis服务器,因此只需传递 Redis 命令所需的参数即可:

    1. Redis::set('name', 'Taylor');
    2. $values = Redis::lrange('names', 5, 10);

    所有方法和 操作 phpredis 原生一样 本质是通过魔术方法代理访问的,让操作变得更简单

    当然普通的字符串设置不能满足我们的日常开发,你也可以使用 数组的方式

    1. $setData = [
    2. 'goods' => [
    3. 'goods_id' => 1,
    4. 'goods_name' => 'iPhone xx'
    5. ]
    6. ];
    7. Redis::set($key, $setData);

    通过 get 方法 调用,底层会自动反序列化,保证了存进去,取出来的数据一致性

    指定连接池获取连接

    当然 所有的连接都是在连接池中分配的 如果你想使用自己定义的连接可以使用

    1. $poolName = 'redis-clusters-pool'
    2. $redis = Redis::connection($poolName);
    3. $redis->get("a");

    获取的连接了之后和 操作 和phpredis 原生使用方式扩展一致 如何创建连接池 参考 redis 设置章节
    ,默认是在 redis.pool连接池中获取的

    缓存命中率

    如果你想看一个 key 获取的命中情况,可以在你的notice日志级别中获取,格式大致是 redis.hit/req.... 这样的前缀,有助于你分析缓存命中率。

    事件监听

    before 事件

    Redis 执行之前底层会抛出 RedisEvent::BEFORE_COMMAND 事件

    1. <?php declare(strict_types=1);
    2. namespace App\Listener;
    3. use Swoft\Event\Annotation\Mapping\Listener;
    4. use Swoft\Event\EventHandlerInterface;
    5. use Swoft\Event\EventInterface;
    6. use Swoft\Redis\RedisEvent;
    7. /**
    8. * Class FinishListener
    9. *
    10. * @since 2.0
    11. *
    12. * @Listener(event=RedisEvent::BEFORE_COMMAND)
    13. */
    14. class RedisBeforeListener implements EventHandlerInterface
    15. {
    16. /**
    17. * @param EventInterface $event
    18. */
    19. public function handle(EventInterface $event): void
    20. {
    21. [$method, $parameters] = $event->getParams();
    22. }
    23. }

    after 事件

    Redis 命令之后会抛出 RedisEvent::AFTER_COMMAND 事件 你可以监听命令的执行情况,如果在执行命令中出现异常 不会抛出 RedisEvent::AFTER_COMMAND 事件

    1. <?php declare(strict_types=1);
    2. namespace App\Listener;
    3. use Swoft\Event\Annotation\Mapping\Listener;
    4. use Swoft\Event\EventHandlerInterface;
    5. use Swoft\Event\EventInterface;
    6. use Swoft\Redis\RedisEvent;
    7. /**
    8. * Class FinishListener
    9. *
    10. * @since 2.0
    11. *
    12. * @Listener(event=RedisEvent::AFTER_COMMAND)
    13. */
    14. class RedisAfterListener implements EventHandlerInterface
    15. {
    16. /**
    17. * @param EventInterface $event
    18. */
    19. public function handle(EventInterface $event): void
    20. {
    21. [$method, $parameters, $result] = $event->getParams();
    22. }
    23. }