五月天激情丁香,国产精品2019,国产成人精品亚洲2020,国产精品免费视频一区二区三区,开心久久婷婷综合中文字幕,天堂视频在线观看免费完整版

TP ORM使用問題

由于swoole 是在常駐內存+協程環境下運行的,使用TP ORM 時,TP ORM自帶了很多靜態變量,將會出現問題,具體分析如下:

非協程常駐內存模式

在同步,非協程模式下,一個worker在一個時間內只處理一個請求,到max_request時也將重啟進程,可以勉強操作sql,但是以下靜態變量會出現問題:

think\Db 靜態變量:

protected static $config = [];
//數據庫配置,幾乎沒有影響

protected static $query;
//查詢類名,沒有影響

protected static $queryMap = [
    'mongo' => '\\think\\db\Mongo',
];
//查詢類自動映射,沒有影響

public static $queryTimes = 0;
//數據庫查詢次數
//常駐內存下是全局查詢次數

public static $executeTimes = 0;
//執行次數
//常駐內存下其實是全局執行執行次數

protected static $cacheHandler;
//緩存對象,沒有影響

think\Model 靜態變量:

protected static $initialized = [];
//初始化過的模型.
//原本作用:確保一個模型類中的init方法在一次請求中只被執行一次
//常駐內存下:一個模型只在第一次請求時執行該方法,后續請求不再執行,極有可能會造成bug

protected static $readMaster;
//是否從主庫讀取數據
//幾乎沒有影響

think\db\Connection 靜態變量:

protected static $instance = [];
//PDO操作實例
//建立的連接管理實例
//協程模式,高并發下可能會導致數據庫操作bug

protected static $event = [];
//監聽回調
//原本作用:給模型設置的事件回調
//常駐內存下:隨著運行時間不斷增加將不斷增加運行內存,一次請求增加的事件將影響到另外一次請求

protected static $info = [];
// 數據表信息
// 幾乎沒有影響

protected static $log = [];
// 數據庫日志
// 原本作用: 記錄一個請求的所有日志操作
// 常駐內存: 隨著數據庫的不斷操作,會使該變量不斷增加,會造成內存溢出

think\db\Query 靜態變量:

protected static $connections = [];
// 數據庫Connection對象
// 暫時沒發現使用的地方

private static $event = [];
//回調事件
//原本作用:一次請求下,設置自身的回調事件
//常駐內存下:一次請求增加的事件將影響到另外一次請求

private static $extend = [];
//擴展查詢方法
//幾乎沒有影響

private static $readMaster = [];
//需要讀取主庫的表
//原本作用:設置某一個或者全部模型是否從主庫讀取數據
//常駐內存下:如果在一個請求執行了Query::readMaster()方法,Query::$readMaster不會釋放,將會影響到其他請求

think\Db\ModelEvent 靜態變量:

private static $event = [];
// 回調事件
//原本作用:給模型設置的事件回調
//常駐內存下:隨著運行時間不斷增加將不斷增加運行內存,一次請求增加的事件將影響到另外一次請求

protected static $observe = ['before_write', 'after_write', 'before_insert', 'after_insert', 'before_update', 'after_update', 'before_delete', 'after_delete', 'before_restore', 'after_restore'];
//模型事件觀察
//沒有影響

協程常駐內存模式

在協程模式下,多個客戶端共用一個數據庫連接,將會出現數據庫操作異常問題, 例如:

  • 用戶A訪問業務A,數據庫開啟事務->支付邏輯->完成事務
  • 用戶B同時訪問業務B,插入n條數據
  • 用戶C同時訪問業務A,數據庫開啟事務->支付邏輯->邏輯出錯,回滾

在這個邏輯中,由于都是共享一個數據庫操作,并且受協程切換影響,數據庫執行步驟可能會變為: 用戶A數據庫開啟事務->用戶B插入n條數據->用戶C開啟事務->用戶A支付邏輯->用戶C支付邏輯->用戶C邏輯錯誤,回滾事務->用戶A完成事務
當數據庫這樣執行時,用戶A,B,C的所有數據庫操作都將回滾,但是前端可能卻會返回成功.

同樣,由于靜態變量共用,其他回調事件等問題同樣存在

主站蜘蛛池模板: 男女啪网站 | 免费网站黄成人影院 | 久久精品国产福利国产琪琪 | 男人的天堂2020 | 久久一区二区三区不卡 | 澳门久久 | 欧美色第一页 | 久久久久九九精品影院 | 精品无人区一区二区三 | 狠狠综合视频精品播放 | 精品福利一区二区三区免费视频 | 国产精品视频你懂的网址 | 天天干天天干天天干天天干天天干 | 久久久久久久国产精品 | 久久久国产精品免费看 | 亚洲欧美日韩激情在线观看 | 亚洲精品免费日日日夜夜夜夜 | 久久精品国产久精国产 | 国内精品久久久久影院不卡 | 国产精品久久久久免费视频 | 理论片亚洲| 一级毛片免费毛片一级毛片免费 | 97高清国语在线看免费观看 | 视频一区二区三区自拍 | 五月天激情影院 | 黄色视屏在线 | 色综合久久中文字幕 | 久草综合网 | 欧美日韩亚洲综合久久久 | 777奇米第四色 | 日韩中文字幕精品免费一区 | 奇米影视777第四色 奇米影视4色 | 日本天堂免费a | 国产欧美一区视频在线观看 | 欧美久久网 | a级精品国产片在线观看 | 开心网五月天 | 国外精品视频在线观看免费 | 久久国产这里只有精品 | 四虎影视国产精品一区二区 | 欧美成人性色大片在线观看 |