sách gpt4 ăn đã đi

Tổng hợp ưu nhược điểm của việc đóng gói php instance pdo và kết nối dài pdo

In lại Tác giả: qq735679552 Thời gian cập nhật: 28-09-2022 22:32:09 28 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN này tổng hợp những ưu điểm và nhược điểm của việc đóng gói php instance pdo và các kết nối dài pdo của tác giả. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.

1. Lời nói đầu

Gần đây, tôi cần viết một tập lệnh để triển khai việc lưu trữ nhật ký sự cố. Đúng như dự đoán, nó được tách ra khỏi khung. Vì vậy, chúng ta chỉ có thể tự đóng gói các hoạt động liên quan đến cơ sở dữ liệu. Blogger ở đây đã chọn cách đóng gói cơ sở dữ liệu hoạt động pdo liên quan.

2. Tại sao chọn pdo

Như chúng ta đã biết, PHP ban đầu có phần mở rộng mysql, nhưng sau này nó đã quá cũ và thiếu các tính năng mới của mysql nên khóa chính bị từ chối.

Bắt đầu từ php5, bạn nên sử dụng tiện ích mở rộng mysqli. Đây là phiên bản nâng cao của tiện ích mở rộng mysql. Đây là giao diện MySQL hướng đối tượng và dễ sử dụng hơn. Nhược điểm là nó chỉ có thể vận hành mysql và không đủ mạnh.

Ngoài ra còn có tiện ích mở rộng pdo, đây là tiện ích mở rộng phong phú nhất và hỗ trợ nhiều cơ sở dữ liệu. Điều quan trọng là nó mạnh hơn hai tiện ích mở rộng còn lại về mặt bảo mật. Bằng cách sử dụng tính năng tiền xử lý đã được chuẩn bị sẵn, nó có thể ngăn chặn việc tiêm SQL một cách hiệu quả. Vì vậy, blogger ở đây đã lựa chọn gói gọn các thao tác liên quan đến pdo.

3. Kết nối pdo dài

1. Kết nối dài của pdo là gì?

Đúng như tên gọi, kết nối dài có nghĩa là kết nối luôn được duy trì. So với kết nối ngắn thông thường sẽ tạo lại liên kết mỗi khi có yêu cầu, kết nối dài có thể giảm thiểu quá trình tạo và tiết kiệm hiệu suất một cách hiệu quả.

Trong quá trình hoạt động, khi kết nối tới cơ sở dữ liệu thêm 1 tham số nữa:

?
1
$pdo = mới PDO( $dsn , $tên người dùng , $passwd , [PDO::ATTR_PERSISTENT => đúng]);

PDO::ATTR_PERSISTENT => true sau đây là phương thức cho phép kết nối dài.

2. Các kết nối dài có hợp lệ đối với nginx không?

Khi một blogger đang tìm kiếm kiến ​​thức về kết nối dài, anh ấy thấy một bài báo kết luận rằng kết nối dài chỉ áp dụng cho apache chứ không áp dụng cho nginx.

Bài viết tham khảo: http://www.zzvips.com/article/21945.html.

Kết luận chung là: các kết nối dài dành riêng cho apache, vì apache duy trì một nhóm quy trình. Sau khi chức năng mpm của apache được bật, apache sẽ duy trì một nhóm quy trình theo mặc định. socet connect. , nhưng vì một cái gì đó không được phát hành, nó được đưa vào nhóm quy trình/nhóm luồng.

Đối với nginx, các kết nối dài không hợp lệ và tài nguyên được giải phóng khi quá trình thực thi tập lệnh kết thúc?

3. Kiểm tra kết nối dài trong php-fpm

Các tiền bối ở đây đã test rồi, chúng tôi sẽ cho địa chỉ của các tiền bối nếu quan tâm có thể xem qua.

Kết luận: Hóa ra php-fpm có thể đạt được kết nối dài, nhưng nếu tiến trình không hoạt động sẽ gây lãng phí tài nguyên.

Tệp cấu hình của php-fpm có thể xem xét đặt pm.max_requests = 1000, đại diện cho số lượng yêu cầu dịch vụ tối đa cho mỗi quy trình con. Nếu vượt quá giá trị này, quy trình con sẽ tự động được khởi động lại.

Ví dụ: nếu tham số max_requests được đặt thành giá trị lớn, quy trình con sẽ phải chạy nhiều lần trước khi khởi động lại. Nếu xảy ra lỗi hoặc rò rỉ bộ nhớ trong yêu cầu, việc đặt giá trị này thành giá trị lớn là không phù hợp. Nhưng nếu yêu cầu không có vấn đề gì, nếu giá trị này được đặt thành một giá trị nhỏ, nó sẽ khởi động lại thường xuyên, điều này cũng sẽ gặp rất nhiều vấn đề về 502, vì vậy đây là vấn đề cần sự phán đoán và khôn ngoan. Đây là cài đặt ban đầu. là 1000. Nếu không có rò rỉ bộ nhớ trong quá trình kiểm tra, v.v. Vấn đề có thể lớn hơn.

4. Tác động của kết nối dài tới giao dịch

Địa chỉ bài viết blog tham khảo: https://www.zhihu.com/question/62603122.

Tóm tắt: Nếu hoạt động đồng thời tương đối lớn và có các giao dịch thì không nên sử dụng các kết nối dài.

5. Tóm tắt

Trong quá trình tìm kiếm liên tục, blogger nhận thấy rằng để đạt được hiệu suất tốt nhất cho các kết nối dài, không thể tránh khỏi việc tổng hợp kết nối và PHP không thể triển khai kết nối tổng hợp cho tốt. Điều này thực sự hơi đáng tiếc.

Nói chung, tạm thời không thể định cấu hình nhóm kết nối hoàn hảo với MySQL trong PHP. Ở những nơi hoạt động kinh doanh phức tạp hơn, tốt hơn hết bạn nên thận trọng khi sử dụng các kết nối dài. Mỗi kết nối là một luồng, điều này sẽ gây ra nhiều lãng phí. của tài nguyên.

Nếu một số doanh nghiệp yêu cầu các hoạt động cơ sở dữ liệu liên tục, chẳng hạn như gửi giao diện nhật ký, v.v., thì bạn có thể xem xét việc mở một kết nối dài. Hãy nhớ đặt max_requests để đóng kết nối php-fpm một cách định lượng. Sau khi đóng fpm, kết nối mysql sẽ tự động. phát hành.

Ngoài ra còn có pm.max_spare_servers để đặt số lượng quy trình php-fpm tối đa khi máy chủ không hoạt động.

Ví dụ: pm.max_spare_servers = 25 Nếu không hoạt động, số lượng quy trình sẽ được kiểm tra. Nếu có nhiều hơn 25, một số quy trình sẽ bị đóng cho đến khi trạng thái đạt tới 25.

Những học viên giỏi swoole có thể tham khảo bài viết này: Triển khai nhóm kết nối cơ sở dữ liệu PHP thực sự dựa trên phần mở rộng swoole.

4. Đóng gói bản demo phần pdo

Trước hết, phần này các blogger đề cập đến gói của một cư dân mạng, địa chỉ github như sau:

https://github.com/nadirvisun/php-pdo-class 。

Các bổ sung, xóa, sửa đổi và tìm kiếm cơ bản của cư dân mạng này đều được gói gọn và tất cả các tham số đều được xử lý trước. Tính bảo mật vẫn được chấp nhận. Tuy nhiên, vì là lớp cơ bản nên nó vẫn thiếu một thứ gì đó.

1. Cơ chế ngắt kết nối và kết nối lại

Ví dụ: chức năng kết nối lại:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
  * @params: Chức năng kết nối lại, giới hạn trên 3 lần
  * @ngày: 2020/3/18
  * @thời gian:17:03
  */
công cộng chức năng tùy chỉnhKết nối()
{
     thử {
         $cái này ->pdo = mới PDO( $cái này ->cấu hình[ 'dsn' ], $cái này ->cấu hình[ 'tên người dùng' ], $cái này ->cấu hình[ 'mật khẩu' ], $cái này ->cấu hình[ 'tham số' ]);
         $cái này ->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Cần chuyển chế độ xử lý lỗi sang chế độ ngoại lệ
         trở lại ĐÚNG VẬY;
     } nắm lấy (Ngoại lệ $e ) {
         nếu như ( truyện tranh ( $e ->getMessage(), 'Máy chủ MySQL đã biến mất' ) !== sai || truyện tranh ( $e ->getMessage(), 'byte không thành công với errno=10053' ) !==sai) {
             $cái này ->đóng();
             $cái này ->tryNums++;
             nếu như ( $cái này ->tryNums > 3) {
                 trở lại SAI;
             }
             tự::customConnect();
         } khác {
             $cái này ->ném_ngoại_lệ( $e ->getMessage());
             trở lại SAI;
         }
     }
}

2. Chuyển đổi cảnh báo php thành lỗi có thể được phát hiện bằng try...catch

Nguyên nhân của bước này là do kết nối dài sẽ thường xuyên gây ra lỗi mysql gone gone, và lỗi này là lỗi cấp độ cảnh báo PHP try..catch không bắt được chút nào nên blogger ở đây tùy chỉnh chức năng xử lý lỗi để xử lý.

Phần này nói về việc chuyển đổi các cảnh báo PHP thành các lỗi có thể được ghi lại bằng try..catch. Chúng ta sẽ thảo luận về cơ chế báo cáo lỗi và xử lý lỗi của PHP trong bài viết tiếp theo.

?
1
2
3
// Hàm xử lý cảnh báo tùy chỉnh set_error_handler('customException'); // Sau khi nhận được lỗi cảnh báo, hãy chuyển nó thành lỗi lỗi và ném nó để có thể nắm bắt được bằng hàm try..catch customException( $error_no, $error_msg , $error_file, $error_line){
     ném mới \Ngoại lệ( $error_msg ,0,null);
     //ném ra \Exception($error_msg);} mới

3. Phương pháp tiêu hủy để tái chế tài nguyên

?
1
2
3
4
5
6
7
/**
  * struct đóng kết nối cơ sở dữ liệu
  */
công cộng chức năng hủy()
{
     $cái này ->pdo = rỗng;
}

4. Ping khi truy vấn

?
1
2
3
4
5
6
7
8
9
công cộng chức năng truy vấn( $sql = rỗng, $tham số = không có)
   {
       // Kiểm tra xem kết nối có hoạt động không
       $cái này ->pdo_ping();
       //Xác định xem có tập kết quả trước đó không
       nếu như (! trống ( $cái này ->Câu lệnh PDO)) {
           $cái này ->miễn phí();
       }
       xxxxxxxxxxx }

5. Địa chỉ tải xuống

Sau khi hoàn thành bốn bước này, lớp pdo này vẫn có thể được sử dụng. Nếu cần, bạn có thể tải xuống từ Baidu Cloud.

Link: https://pan.baidu.com/s/1Siz_bKlhEIVNV99Y0zTzqw Mã trích xuất: ebqx.

Phần này kết thúc bài viết này về bản tóm tắt các ưu điểm và nhược điểm của các ví dụ pdo đóng gói php và các kết nối dài pdo. Để có thêm phân tích liên quan về ưu điểm và nhược điểm của các ví dụ pdo đóng gói php và các kết nối dài pdo, vui lòng tìm kiếm các bài viết trước của tôi hoặc tiếp tục duyệt bên dưới. Các bài viết liên quan mong các bạn sẽ ủng hộ mình nhiều hơn trong thời gian tới! .

Liên kết gốc: https://www.php.cn/php-ask-486222.html.

Cuối cùng, bài viết này về bản tóm tắt những ưu điểm và nhược điểm của các ví dụ pdo đóng gói php và các kết nối dài pdo kết thúc ở đây. Nếu bạn muốn biết thêm về những ưu điểm và nhược điểm của các ví dụ pdo đóng gói php và các kết nối dài pdo, vui lòng tìm kiếm bài viết CFSDN. Hoặc tiếp tục duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

28 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress