php larval 胖模型,php – 从缓存中获取的Laravel模型访问器 – 性能增强
當前使用Cache& D B
>您正在使用IP地址來識別用戶v / s,就像user_id一樣簡單.這是故意的嗎?如果同一用戶再次從另一個IP登錄,您是否要顯示不同的號碼?
>在數據庫中,你正在存儲#up-votes&每個項目的下注,但在緩存中,您通過項目和IP地址(或用戶ID)的組合存儲投票類型(向上投票/向下投票).此外,緩存在24小時后過期.
因此,當您說Cache :: get($voteKey)時,它將返回向上投票或向下投票,但前提是用戶在過去24小時內對此項目進行了投票(否則返回null).這是有意的嗎?
何時使用Cache v / s DB
通常,您會使用緩存進行頻繁查詢(當您需要頻繁執行特定的讀操作但不經常編寫時).如果不是這種情況,通常會回退到DB.
現在讓我們假設您實際上想要按用戶和項目的組合按項目和投票類型存儲#up-votes / down-votes.想一想,哪個查詢會更頻繁? #up-votes / down-votes每個項目或投票類型的組合用戶和&項目?當然,這將是第一個場景(如果有的話).但是,你正在做相反的事情.
You’re storing the more frequently accessed query in DB and the less
frequently accessed query in cache
這實際上會降低您應用的整體性能!
什么是正確的方法?
那么,這取決于用例.例如,假設您希望按項目ID存儲用戶ID和投票類型(典型用例,因為您不希望任何用戶的投票在投票重鑄時每個項目被計算多次).然后,我將把它存儲在數據庫中,并在緩存中按項目存儲總的#up-votes / down-votes(僅當經常訪問時 – 例如,您可以選擇不存儲所有項目的#potes)但僅限于具有至少X個視圖的更受歡迎的項目)
對于上面的用例,我會建議這樣的事情:
DB Schema
Schema::create('item_user',function ($table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->integer('item_id')->unsigned();
$table->enum('vote_type',['up_vote','down_vote']);
$table->unique(['user_id','item_id']);
$table->timestamps();
});
投票控制器邏輯
$user = Auth::user();
$vote = $request->get('vote');
$voteType = $vote ? 'up_vote' : 'down_vote';
$voteKey = "{$voteType}_{$item->id}";
$item->users()->updateExistingPivot($user->id,['vote_type' => $voteType]);
Cache::increment($voteKey);
原始問題
至于您的原始問題,Laravel使用單個連接實例進行Redis和Memcached的緩存查詢.因此,如果同一請求獲取100個不同的緩存項,它將不會啟動100個連接 – 它將在單個緩存連接中完成工作
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的php larval 胖模型,php – 从缓存中获取的Laravel模型访问器 – 性能增强的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: php 伪静态有什么用,网站为什么要做伪
- 下一篇: 罐装八宝粥的功效与作用、禁忌和食用方法
