Laravel - Redis 缓存菜单数据
Redis缓存菜单数据-start
- 配置:
- 确保 .env 文件中 CACHE_DRIVER=redis ,更改缓存驱动为Redis
- 默认的缓存前缀为 laravel ,如果想要修改前缀可以在 config/cache.php 配置文件中 'prefix' => 'laravel' ,修改此项即可。
- Laravel默认使用的Redis数据库为 db0 ,你也可以指定其他数据库,在 config/database.php 配置文件中。
- 缓存菜单数据:
-
我们是通过仓库模式来获取数据的,因此我们要是想缓存菜单数据,就要在Repository仓库中编写代码。
- 打开 app\Repositories\MenuRepository.php 文件,首先我们需要 use Cache; 一下,然后我们要在获取菜单数据的方法中判断是否有缓存这个菜单数组,如果有,则 return 缓存中的菜单数组;如果没有,怎调用获取菜单数据的方法,获取数据,并添加缓存到redis中。
具体代码如下:
-
<?php
namespace App\Repositories\Eloquent;
use App\Repositories\Eloquent\Repository;
use App\Models\Menu;
use Cache;
/**
* 菜单仓库
*/
class MenuRepository extends Repository
{
public function model()
{
return Menu::class;
}
/*
* 递归调用菜单数据
*/
public function sortMenu($menus,$pid=0)
{
$arr = [];
if (empty($menus)) {
return '';
}
foreach ($menus as $key => $value) {
if ($value['parent_id'] == $pid) {
$arr[$key] = $value;
$arr[$key]['child'] = self::sortMenu($menus,$value['id']);
}
}
return $arr;
}
/*
* 排序子菜单并缓存
* ---------------------------------
* array_column($array,$name)
* $array => 要查询的数组
* $name => 在数组中要返回的字段值
*----------------------------------
* array_multisort($array1,$rule,$array2)
* $array1 => 规定数组(规定以这个数组来排序)
* $rule => 规定排列顺序。
* 可能的值:
* SORT_ASC - 默认。按升序排列 (A-Z)。
* SORT_DESC - 按降序排列 (Z-A)。
* $array2 => 要规定的数组。(要排序的数组)
*/
public function sortMenuSetCache()
{
$menus = $this->model->orderBy('sort','desc')->get()->toArray();
if ($menus) {
$menuList = $this->sortMenu($menus);
foreach ($menuList as $key => $value) {
if ($value['child']) {
$sort = array_column($value['child'], 'sort');
array_multisort($sort,SORT_DESC,$value['child']);
}
}
//缓存菜单数据
Cache::forever(config('admin.globals.cache.menuList'), $menuList);
return $menuList;
}
return '';
}
/*
* 获取菜单数据
*/
public function getMenuList()
{
/*
* 判断缓存是否存在
*/
if (Cache::has(config('admin.globals.cache.menuList'))) {
return Cache::get(config('admin.globals.cache.menuList'));
}
return $this->sortMenuSetCache();
}
该页面方法中的config('admin.globals.cache.menuList') 是调用的一个配置文件中的一个键值,larave推荐把一些重复使用的名称统一定义到一个配置文件中,然后用config(参数1) 方法来调用该键值对的值。
参数1:键值对中值的路径。
Config方法默认的路径为 config 文件夹下面,我们在config文件夹下面新建一个admin的文件夹,再从admin文件夹下面新建一个 globals.php 的文件,在这个文件里写要重复调用的键值。整个方法是return一个数组,然后从这个数组中写参数。具体代码如下:
<?php
return [
// 自定义登录字段
'username' => 'username',
'cache' => [
'menuList' => 'menuList',
],
];
Redis缓存菜单数据-end
本作品采用《CC 协议》,转载必须注明作者和本文链接
老郭博客:laughing:
个人博客地址:www.phpsix.com
嗯,写的漂亮! 如何调用这些数据到视图呢!关键的部位没有讲!呵呵