diff --git a/Changelog b/Changelog index 20bce27a3..97ac92fbc 100755 --- a/Changelog +++ b/Changelog @@ -1,3 +1,5 @@ +2018-05-10 DariusIII + * Chg: Cache queries on request to prevent running many duplicated queries 2018-05-09 DariusIII * Chg: Rearrange pagination queries * Chg: Remove groupBy from getBrowseRange function diff --git a/app/Models/BookInfo.php b/app/Models/BookInfo.php index 61ea0578f..1e64f00a9 100644 --- a/app/Models/BookInfo.php +++ b/app/Models/BookInfo.php @@ -2,12 +2,14 @@ namespace App\Models; +use App\Support\Database\CacheQueryBuilder; use Laravel\Scout\Searchable; use Illuminate\Database\Eloquent\Model; class BookInfo extends Model { use Searchable; + use CacheQueryBuilder; /** * @var string */ diff --git a/app/Models/Category.php b/app/Models/Category.php index 9da5c3051..4be446e9d 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -2,12 +2,15 @@ namespace App\Models; +use App\Support\Database\CacheQueryBuilder; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Cache; use Illuminate\Database\Eloquent\Model; class Category extends Model { + use CacheQueryBuilder; + /** * Category constants. * Do NOT use the values, as they may change, always use the constant - that's what it's for. diff --git a/app/Models/ConsoleInfo.php b/app/Models/ConsoleInfo.php index 6314c129b..a18072e5e 100644 --- a/app/Models/ConsoleInfo.php +++ b/app/Models/ConsoleInfo.php @@ -2,12 +2,14 @@ namespace App\Models; +use App\Support\Database\CacheQueryBuilder; use Laravel\Scout\Searchable; use Illuminate\Database\Eloquent\Model; class ConsoleInfo extends Model { use Searchable; + use CacheQueryBuilder; /** * @var string */ diff --git a/app/Models/GamesInfo.php b/app/Models/GamesInfo.php index dd3a7ad07..a40272a85 100644 --- a/app/Models/GamesInfo.php +++ b/app/Models/GamesInfo.php @@ -2,12 +2,14 @@ namespace App\Models; +use App\Support\Database\CacheQueryBuilder; use Laravel\Scout\Searchable; use Illuminate\Database\Eloquent\Model; class GamesInfo extends Model { use Searchable; + use CacheQueryBuilder; /** * @var string diff --git a/app/Models/MusicInfo.php b/app/Models/MusicInfo.php index 157ba50be..d6dae72ed 100644 --- a/app/Models/MusicInfo.php +++ b/app/Models/MusicInfo.php @@ -2,12 +2,14 @@ namespace App\Models; +use App\Support\Database\CacheQueryBuilder; use Laravel\Scout\Searchable; use Illuminate\Database\Eloquent\Model; class MusicInfo extends Model { use Searchable; + use CacheQueryBuilder; /** * @var string */ diff --git a/app/Models/Release.php b/app/Models/Release.php index 0c8d22dd4..274a981ef 100644 --- a/app/Models/Release.php +++ b/app/Models/Release.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Support\Database\CacheQueryBuilder; use Blacklight\NZB; use Blacklight\SphinxSearch; use Illuminate\Support\Carbon; @@ -11,6 +12,8 @@ use Illuminate\Database\Eloquent\Model; class Release extends Model { + use CacheQueryBuilder; + /** * @var bool */ diff --git a/app/Models/Settings.php b/app/Models/Settings.php index 036013ee5..7c02431b3 100644 --- a/app/Models/Settings.php +++ b/app/Models/Settings.php @@ -20,6 +20,7 @@ namespace App\Models; +use App\Support\Database\CacheQueryBuilder; use Blacklight\utility\Utility; use Illuminate\Console\Command; use Illuminate\Support\Facades\DB; @@ -32,6 +33,7 @@ use Illuminate\Database\Eloquent\Model; class Settings extends Model { use InsertOnDuplicateKey; + use CacheQueryBuilder; public const REGISTER_STATUS_OPEN = 0; diff --git a/app/Models/User.php b/app/Models/User.php index 9dd68c27e..15dc7e1c5 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -4,6 +4,7 @@ namespace App\Models; use App\Mail\SendInvite; use App\Mail\AccountChange; +use App\Support\Database\CacheQueryBuilder; use Illuminate\Support\Str; use Illuminate\Support\Carbon; use Blacklight\utility\Utility; @@ -16,6 +17,7 @@ use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Notifiable; + use CacheQueryBuilder; public const ERR_SIGNUP_BADUNAME = -1; public const ERR_SIGNUP_BADPASS = -2; diff --git a/app/Models/Video.php b/app/Models/Video.php index 986f53c19..a5984a9d1 100644 --- a/app/Models/Video.php +++ b/app/Models/Video.php @@ -2,11 +2,13 @@ namespace App\Models; +use App\Support\Database\CacheQueryBuilder; use Illuminate\Support\Carbon; use Illuminate\Database\Eloquent\Model; class Video extends Model { + use CacheQueryBuilder; /** * @var bool */ diff --git a/app/Models/XxxInfo.php b/app/Models/XxxInfo.php index 9cde64076..1f8451fba 100644 --- a/app/Models/XxxInfo.php +++ b/app/Models/XxxInfo.php @@ -2,10 +2,12 @@ namespace App\Models; +use App\Support\Database\CacheQueryBuilder; use Illuminate\Database\Eloquent\Model; class XxxInfo extends Model { + use CacheQueryBuilder; /** * @var string */ diff --git a/app/Support/Database/Builder.php b/app/Support/Database/Builder.php new file mode 100644 index 000000000..10a225ffc --- /dev/null +++ b/app/Support/Database/Builder.php @@ -0,0 +1,35 @@ +remember($this->getCacheKey(), 1, function() { + return parent::runSelect(); + }); + } + + /** + * Returns a Unique String that can identify this Query. + * + * @return string + */ + protected function getCacheKey() + { + return json_encode([ + $this->toSql() => $this->getBindings() + ]); + } +} \ No newline at end of file diff --git a/app/Support/Database/CacheQueryBuilder.php b/app/Support/Database/CacheQueryBuilder.php new file mode 100644 index 000000000..53fe7eed7 --- /dev/null +++ b/app/Support/Database/CacheQueryBuilder.php @@ -0,0 +1,22 @@ +getConnection(); + + $grammar = $conn->getQueryGrammar(); + + return new Builder($conn, $grammar, $conn->getPostProcessor()); + } +} \ No newline at end of file diff --git a/composer.lock b/composer.lock index 6d0a5efba..b55a56ebf 100644 --- a/composer.lock +++ b/composer.lock @@ -312,7 +312,8 @@ "Gemfile.lock", "*.md" ] - } + }, + "time": "2016-06-06T17:37:52+00:00" }, { "name": "bower-asset/autosize", @@ -341,7 +342,8 @@ "form", "textarea", "ui" - ] + ], + "time": "2017-05-19T15:36:30+00:00" }, { "name": "bower-asset/bootstrap", @@ -390,7 +392,8 @@ "mobile-first", "responsive", "web" - ] + ], + "time": "2016-07-25T15:51:55+00:00" }, { "name": "bower-asset/bootstrap-3.x", @@ -439,7 +442,8 @@ "mobile-first", "responsive", "web" - ] + ], + "time": "2016-07-25T15:51:55+00:00" }, { "name": "bower-asset/bootstrap-datepicker", @@ -468,7 +472,8 @@ }, "license": [ "Apache-2.0" - ] + ], + "time": "2016-08-05T09:50:13+00:00" }, { "name": "bower-asset/bootstrap-hover-dropdown", @@ -498,7 +503,8 @@ "dropdowns", "hover", "twitter" - ] + ], + "time": "2015-12-01T23:35:57+00:00" }, { "name": "bower-asset/bootstrap-progressbar", @@ -532,7 +538,8 @@ }, "license": [ "MIT" - ] + ], + "time": "2015-05-15T18:56:17+00:00" }, { "name": "bower-asset/bootswatch", @@ -663,7 +670,8 @@ "modal", "popup", "ui" - ] + ], + "time": "2016-05-10T22:21:33+00:00" }, { "name": "bower-asset/datatables", @@ -711,7 +719,8 @@ "jquery", "library", "table" - ] + ], + "time": "2017-08-31T13:52:17+00:00" }, { "name": "bower-asset/fancybox", @@ -777,7 +786,8 @@ "tests", "examples" ] - } + }, + "time": "2015-01-26T21:19:01+00:00" }, { "name": "bower-asset/flexboxgrid", @@ -813,7 +823,8 @@ "css", "flexbox", "grid" - ] + ], + "time": "2016-08-14T16:43:18+00:00" }, { "name": "bower-asset/font-awesome", @@ -858,7 +869,8 @@ "src", "build.xml" ] - } + }, + "time": "2015-07-20T20:04:00+00:00" }, { "name": "bower-asset/icheck", @@ -908,7 +920,8 @@ "replacement", "skins", "ui" - ] + ], + "time": "2014-03-03T17:36:28+00:00" }, { "name": "bower-asset/jquery", @@ -971,7 +984,8 @@ "javascript", "jquery", "library" - ] + ], + "time": "2016-05-20T17:24:43+00:00" }, { "name": "bower-asset/jquery-3.2.x", @@ -1038,7 +1052,8 @@ "scroll", "scrolltop", "scrolltotop" - ] + ], + "time": "2017-08-31T15:51:29+00:00" }, { "name": "bower-asset/jquery-migrate-1.4.x", @@ -1057,7 +1072,8 @@ "type": "bower-asset-library", "extra": { "bower-asset-main": "jquery-migrate.js" - } + }, + "time": "2016-04-15T06:38:34+00:00" }, { "name": "bower-asset/jquery-migrate-3.0.x", @@ -1076,7 +1092,8 @@ "type": "bower-asset-library", "extra": { "bower-asset-main": "jquery-migrate.js" - } + }, + "time": "2016-06-10T14:28:59+00:00" }, { "name": "bower-asset/jquery.nicescroll", @@ -1106,7 +1123,8 @@ "demo", "package.json" ] - } + }, + "time": "2016-03-01T20:38:24+00:00" }, { "name": "bower-asset/material-design-iconic-font", @@ -1145,7 +1163,8 @@ "font", "icons", "material" - ] + ], + "time": "2015-11-08T04:50:28+00:00" }, { "name": "bower-asset/materialize", @@ -1204,7 +1223,8 @@ "responsive", "sass", "ux" - ] + ], + "time": "2017-04-15T01:39:28+00:00" }, { "name": "bower-asset/pace", @@ -1250,7 +1270,8 @@ "progress", "progress", "spinner" - ] + ], + "time": "2014-11-06T16:31:34+00:00" }, { "name": "bower-asset/pnotify", @@ -1302,7 +1323,8 @@ "license": [ "Apache-2.0" ], - "description": "JavaScript notification plugin." + "description": "JavaScript notification plugin.", + "time": "2017-07-31T21:50:29+00:00" }, { "name": "bower-asset/respond", @@ -1326,7 +1348,8 @@ "test" ] }, - "description": "Fast and lightweight polyfill for min/max-width CSS3 Media Queries (for IE 6-8, and more)" + "description": "Fast and lightweight polyfill for min/max-width CSS3 Media Queries (for IE 6-8, and more)", + "time": "2013-12-19T04:44:31+00:00" }, { "name": "bower-asset/responsive-tables-js", @@ -1356,7 +1379,8 @@ "jquery", "responsive", "table" - ] + ], + "time": "2015-10-08T14:18:04+00:00" }, { "name": "bower-asset/select2", @@ -1424,7 +1448,8 @@ "scrolling", "slimscroll", "ui" - ] + ], + "time": "2016-06-11T09:19:14+00:00" }, { "name": "bower-asset/tinymce-dist", diff --git a/config/cache.php b/config/cache.php index e87f0320f..757469771 100644 --- a/config/cache.php +++ b/config/cache.php @@ -73,6 +73,10 @@ return [ 'connection' => 'default', ], + 'request' => [ + 'driver' => 'array' + ] + ], /*