关于PHP有点迷茫。。。

@Ta 2023-05-15发布,2023-05-15修改 623点击

我看很多php程序连接数据库部分都一个
db.php 里面内容

try {
    $pdo = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');
} catch (PDOException $e) {
    echo $e->getMessage();
}

然后别的需要查数据库的地方,例如list.php,action.php文件
就直接引入 db.php 文件,调用里面 $pdo 对象,
这样是不是每次访问list.php,action.php 都会重新连接一次数据库,
这样效率不是会很低?
有没有类似Java之类的,直接把 $pdo对象放spring管理,就启动的时候初始化一次,
用的时候,可以直接获取对象,之后一直不会重复连接数据库

回复列表(8|显示机器人聊天)
  • @Ta / 2023-05-15 / /

    @HongKongDoll 这个要看你怎么用PHP了,像你说的 java 如果我没理解错的话应该是连接池,java 常驻内存执行,所以后台维护一个连接池性能优化很大;但是像 php-fpm 这种,在一个生命周期内维护一个连接池,着实有点难为人;但是如果你用 php swoole这种常驻运行,同样可以做到你说得 java的效果。
    ~~~

  • @Ta / 2023-05-15 / /
    @㝶芾厶眵攴䭡,谢谢解答
  • @Ta / 2023-05-15 / /
    @㝶芾厶眵攴䭡,能否把正常需要初始化的全部对象,先初始化一次序列化一下存到redis中,例如pdo,然后读redis效率应该好点吧
  • @Ta / 2023-05-15 / /

    @HongKongDoll

    1. pdo 和 数据库的连接是有状态的,把它序列化隔段时间反序列化再拿出来,说实话我没试过,不知道这个状态能否维持。
    2. pdo 一次初始化是和数据库打一次交道(发生IO),假设第一条状态可维持,但是 php 和 redis 也会发生一次IO操作(即便redis响应很快)。

    连接池快的原因在于,所有状态都已经准备好了且随时可用,而且他放在程序本身的内存空间内,这速度比起你单独和Redis发生一次IO,千差万别。
    ~~~

  • @Ta / 2023-05-15 / /
    @㝶芾厶眵攴䭡,怪不到基本没什么高并发项目用php,基本java,go,python
  • @Ta / 2023-05-15 / /

    @HongKongDoll,workerman了解下,就是你说的长链接,注意内存变量也是持久性的,下一个用户会读取到上一个的变量,

  • @Ta / 2023-05-15 / /
    @胡椒舰长,好的谢谢
  • @Ta / 2023-05-16 / /
    虽然php忘光了,但谢谢哈,有用的知识+1
添加新回复
回复需要登录