日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php larval 胖模型,php – 从缓存中获取的Laravel模型访问器 – 性能增强

發布時間:2024/9/19 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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模型访问器 – 性能增强的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。