为什么laravel5 多个数据库不支持数据库缓存

你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
在开发调试阶段,我不希望Laravel缓存我的信息我已经把app中的debug开启但是当我读入数据库的时候数据还是缓存起来了,刷新页面还是从缓存拿的数据,请问该如何配置?
php artisan cache:clear 后 再测试确定是不是服务器端的缓存
把缓存的driver改成array试试呢
请问:你是怎么确定是从缓存读取的数据,你的判断标准是哪些?
你用的什么浏览器?一些浏览器会强制缓存,很傻比
1、如果你有使用缓存,但没有手动把数据写入缓存,laravel 不会自动缓存你的数据!
2、header 头缓存的一般都是静态资源,如 js, css, image,不存在你说的缓存时间字符串的情况
3、你肯定开启了服务器端缓存,如 php opcache 之类的
要回复问题请先或
浏览: 4112
关注: 6 人[ Laravel 5.2 文档 ] 服务 —— 缓存 - 推酷
[ Laravel 5.2 文档 ] 服务 —— 缓存
Laravel 为不同的缓存系统提供了统一的 API。缓存配置位于
config/cache.php
。在该文件中你可以指定在应用中默认使用哪个缓存驱动。Laravel 目前支持主流的缓存后端如&
缓存配置文件还包含其他文档化的选项,确保仔细阅读这些选项。默认情况下,Laravel 被配置成使用文件缓存,这会将序列化数据和缓存对象存储到文件系统。对大型应用,建议使用内存缓存如Memcached 或 APC,你甚至可以为同一驱动配置多个缓存配置。
1.1 缓存预备知识
缓存驱动时,你需要设置一张表包含缓存缓存项。下面是该表的
Schema::create('cache', function($table) {
$table-&string('key')-&unique();
$table-&text('value');
$table-&integer('expiration');
使用 Memcached 缓存要求安装了
,即 PHP Memcached扩展。
默认配置使用 TCP/IP 协议:
'memcached' =& [
'host' =& '127.0.0.1',
'port' =& 11211,
'weight' =& 100
你还可以设置
选项为 UNIX socket 路径,如果你这样做,
选项应该置为
'memcached' =& [
'host' =& '/var/run/memcached/memcached.sock',
'port' =& 0,
'weight' =& 100
使用 Laravel 的 Redis 缓存之前,你需要通过 Composer 安装
predis/predis
包(~1.0)。
想要了解更多关于 Redis 的配置,查看Larave的Redis文档。
2、缓存使用
2.1 获取缓存实例
Illuminate\Contracts\\Factory
Illuminate\Contracts\Cache\Repository
契约提供了访问 Laravel 的缓存服务的方法。
契约提供了所有访问应用定义的缓存驱动的方法。
Repository
契约通常是应用中
配置文件中指定的默认缓存驱动的一个实现。
然而,你还可以使用
门面,这也是我们在整个文档中使用的方式,
门面提供了简单方便的方式对底层 Laravel 缓存契约实现进行访问。
例如,让我们在控制器中导入
namespace App\Http\C
use Illuminate\Routing\C
class UserController extends Controller{
* 显示应用所有用户列表
* @return Response
public function index()
$value = Cache::get('key');
访问多个缓存存储
门面,你可以使用
方法访问不同的缓存存储器,传入
方法的键就是 cache 配置文件中
配置数组里列出的相应的存储器:
$value = Cache::store('file')-&get('foo');
Cache::store('redis')-&put('bar', 'baz', 10);
2.2 从缓存中获取数据
方法用于从缓存中获取缓存项,如果缓存项不存在,返回 null。如果需要的话你可以传递第二个参数到
方法指定缓存项不存在时返回的自定义默认值:
$value = Cache::get('key');
$value = Cache::get('key', 'default');
你甚至可以传递一个闭包作为默认值,如果缓存项不存在的话闭包的结果将会被返回。传递闭包允许你可以从数据库或其它外部服务获取默认值:
$value = Cache::get('key', function() {
return DB::table(...)-&get();
检查缓存项是否存在
方法用于判断缓存项是否存在:
if (Cache::has('key')) {
数值增加/减少
方法可用于调整缓存中的整型数值。这两个方法都可以接收第二个参数来指明缓存项数值增加和减少的数目:
Cache::increment('key');
Cache::increment('key', $amount);
Cache::decrement('key');
Cache::decrement('key', $amount);
获取或更新
有时候你可能想要获取缓存项,但如果请求的缓存项不存在时给它存储一个默认值。例如,你可能想要从缓存中获取所有用户,或者如果它们不存在的话,从数据库获取它们并将其添加到缓存中,你可以通过使用
Cache::remember
方法实现:
$value = Cache::remember('users', $minutes, function() {
return DB::table('users')-&get();
如果缓存项不存在,传递给
方法的闭包被执行并且将结果存放到缓存中。
你还可以联合
$value = Cache::rememberForever('users', function() {
return DB::table('users')-&get();
获取并删除
如果你需要从缓存中获取缓存项然后删除,你可以使用
方法一样,如果缓存项不存在的话返回null:
$value = Cache::pull('key');
2.3 存储缓存项到缓存
你可以使用
方法在缓存中存储缓存项。当你在缓存中存储缓存项的时候,你需要指定数据被缓存的时间(分钟数):
Cache::put('key', 'value', $minutes);
除了传递缓存项失效时间,你还可以传递一个代表缓存项有效时间的PHP
$expiresAt = Carbon::now()-&addMinutes(10);
Cache::put('key', 'value', $expiresAt);
方法只会在缓存项不存在的情况下添加缓存项到缓存,如果缓存项被添加到缓存返回
,否则,返回
Cache::add('key', 'value', $minutes);
方法用于持久化存储缓存项到缓存,这些值必须通过
方法手动从缓存中移除:
Cache::forever('key', 'value');
2.4 从缓存中移除数据
你可以使用
方法从缓存中移除缓存项:
Cache::forget('key');
还可以使用
方法清除所有缓存:
Cache::flush();
清除缓存并不管什么缓存键前缀,而是从缓存系统中移除所有数据,所以在使用这个方法时如果其他应用与本应用有共享缓存时需要格外注意。
3、缓存标签
注意:缓存标签目前不支持
缓存驱动,此外,当使用多标签的缓存被设置为永久存储时,使用
驱动的缓存有着最佳性能表现,因为 Memcached 会自动清除陈旧记录。
3.1 存储被打上标签的缓存项
缓存标签允许你给相关缓存项打上同一个标签以便于后续清除这些缓存值,被打上标签的缓存可以通过传递一个被排序的标签数组来访问。例如,我们可以通过以下方式在添加缓存的时候设置标签:
Cache::tags(['people', 'artists'])-&put('John', $john, $minutes);Cache::tags(['people', 'authors'])-&put('Anne', $anne, $minutes);
你可以给多个缓存项打上相同标签,这是没有数目限制的。
3.2 访问被打上标签的缓存项
要获取被打上标签的缓存项,传递同样的有序标签数组到
$john = Cache::tags(['people', 'artists'])-&get('John');$anne = Cache::tags(['people', 'authors'])-&get('Anne');
你可以同时清除被打上同一标签/标签列表的所有缓存项,例如,以下语句会移除被打上
标签的所有缓存:
Cache::tags(['people', 'authors'])-&flush();
这样,上面设置的
缓存项都会从缓存中移除。
相反,以下语句只移除被打上
标签的语句,所以只有
会被移除而
Cache::tags('authors')-&flush();
4、添加自定义缓存驱动
要使用自定义驱动扩展 Laravel 缓存,可以使用
门面提供的
方法,该方法用于绑定定义驱动解析器到管理器,通常,这可以在服务提供者中完成。
例如,要注册一个新的命名为“mongo”的缓存驱动:
namespace App\P
use App\Extensions\MongoS
use Illuminate\Support\ServiceP
class CacheServiceProvider extends ServiceProvider{
* Perform post-registration booting of services.
* @return void
public function boot()
Cache::extend('mongo', function($app) {
return Cache::repository(new MongoStore);
* Register bindings in the container.
* @return void
public function register()
方法的第一个参数是驱动名称。该值对应配置文件
config/cache.php
选项。第二个参数是返回
Illuminate\Cache\Repository
实例的闭包。该闭包中被传入一个
实例,也就是服务容器的一个实例。
Cache::extend
可以在默认
App\Providers\AppServiceProvider
方法中完成,或者你也可以创建自己的服务提供者来存放该扩展——只是不要忘了在配置文件
config/app.php
中注册该提供者。
要创建自定义的缓存驱动,首先需要实现
Illuminate\Contracts\Cache\Store
契约,所以,我们的
缓存实现看起来像这样子:
namespace App\E
class MongoStore implements \Illuminate\Contracts\Cache\Store{
public function get($key) {}
public function put($key, $value, $minutes) {}
public function increment($key, $value = 1) {}
public function decrement($key, $value = 1) {}
public function forever($key, $value) {}
public function forget($key) {}
public function flush() {}
public function getPrefix() {}
我们只需要使用
连接实现每一个方法,实现完成后,我们可以完成自定义驱动注册:
Cache::extend('mongo', function($app) {
return Cache::repository(new MongoStore);
扩展完成后,只需要更新配置文件
config/cache.php
选项为你的扩展名称。
如果你在担心将自定义缓存驱动代码放到哪,考虑将其放到Packgist!或者,你可以在
目录下创建一个
Extensions
命名空间。然而,记住 Laravel 并没有一个严格的应用目录结构,你可以基于你的需要自由的组织目录结构。
5、缓存事件
要在每次缓存操作时执行代码,你可以监听缓存触发的事件,通常,你可以将这些缓存处理器代码放到
EventServiceProvider
* The event listener mappings for the application.
* @var array
protected $listen = [
'Illuminate\Cache\Events\CacheHit' =& [
'App\Listeners\LogCacheHit',
'Illuminate\Cache\Events\CacheMissed' =& [
'App\Listeners\LogCacheMissed',
'Illuminate\Cache\Events\KeyForgotten' =& [
'App\Listeners\LogKeyForgotten',
'Illuminate\Cache\Events\KeyWritten' =& [
'App\Listeners\LogKeyWritten',
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致Memcached缓存驱动的配置应用实例-Php高级应用-Php教程-壹聚教程网Laravel
Memcached缓存驱动的配置应用实例
Memcached缓存配置在任何php环境下我们都可以配置使用来提升WEB的性能了,下面我们来看一篇Laravel
Memcached缓存驱动的配置应用实例,具体的细节如下所示。
对于大型网站(数据多,访问量大)而言,缓存系统是必备组件,其为减轻负载、提高页面访问速度、提升系统性能立下汗马功劳。Laravel作为一个功能完善且强大的PHP框架,自然为缓存系统提供了支持。目前Laravle支持的缓存驱动包括文件、数组、数据库、APC、Memcached和Redis,并且为这些驱动提供了统一的存取接口,这样做的好处显而易见:我们可以根据业务需求随时切换缓存驱动而不用对业务逻辑代码做任何修改。
Laravel缓存驱动配置位于config/cache.php,该配置数组中第一个配置项default用于指定默认缓存驱动:
'default' =& env('CACHE_DRIVER', 'file'),
这里默认缓存驱动为文件缓存。第二配置项stores是重头戏,用于配置Laravel支持的6种缓存驱动:
'stores' =& [
&&& 'apc' =& [
&&&&&&& 'driver' =& 'apc',
&&& 'array' =& [
&&&&&&& 'driver' =& 'array',
&&& 'database' =& [
&&&&&&& 'driver' =& 'database',
&&&&&&& 'table' =& 'cache',
&&&&&&& 'connection' =& null,
&&& 'file' =& [
&&&&&&& 'driver' =& 'file',
&&&&&&& 'path' =& storage_path('framework/cache'),
&&& 'memcached' =& [
&&&&&&& 'driver' =& 'memcached',
&&&&&&& 'servers' =& [
&&&&&&&&&&& [
&&&&&&&&&&&&&&& 'host' =& '127.0.0.1',
&&&&&&&&&&&&&&& 'port' =& 11211,
&&&&&&&&&&&&&&& 'weight' =& 100,
&&&&&&&&&&& ],
&&&&&&& ],
&&& 'redis' =& [
&&&&&&& 'driver' =& 'redis',
&&&&&&& 'connection' =& 'default',
其中apc表示APC缓存,APC是PHP的一个扩展,其目标是为缓存和优化PHP中间码(opcode)提供一个免费、开源、健壮的框架。更多详情可参考PHP官方文档:http://php.net/manual/zh/book.apc.php,APC缓存和Memcached一样都是基于内存的缓存系统,性能相当,但局限是只能用于单机缓存,不支持分布式,而实际生产环境往往并不止一台web服务器,所以相对而言,大型网站更多选择使用Memcached。
数组缓存驱动(array)往往仅仅用于测试,好处是不会持久化,只会在一次PHP脚本执行的生命周期内有效。
文件缓存驱动(file)往往只用于本地开发测试,因为文件缓存将缓存存储到文件中,读取时从硬盘读取,性能自然不及基于内存的缓存系统如APC或Memcached以及Redis。
数据库缓存驱动(database)将缓存数据存储到数据库中,使用之前需要在数据库中新建一张表用于存放缓存项,该表表结构可定义如下:
Schema::create('cache', function($table) {
&&& $table-&string('key')-&unique();
&&& $table-&text('value');
&&& $table-&integer('expiration');
缓存本来就是将数据库中的数据读取后存放到缓存系统,虽然数据库缓存在一定程度上提升了系统性能,但对于大型系统而言自然不是最佳选择。
memcached缓存驱动基于Memcached,使用之前需要先在系统中安装Memcached,当然如果你使用的是Homestead虚拟机的话,已经为你安装好了,并且开机自动启动,我们可以使用如下指令查看其状态及启动端口:
-ef | grep memcached
正如我们前面提到的,Memcached是基于内存的分布式缓存系统,在实际生产环境中有着广泛使用。
Redis是近几年才出现的缓存系统,相比Memcached的键值对而言支持更多的数据结构,包括字符串、哈希、列表、集合和有序集合等,正因如此,又被称作数据结构服务器,Redis也是基于内存的,但是可以持久化到硬盘。除了作为缓存系统外,还可以用作NoSQL数据库、消息队列等。总而言之,功能很强大。关于Redis我们后续会单独讲,所以缓存实例这一块我们将以Memcached作为缓存驱动为例,系统的讲讲Laravel中如何使用缓存。
从配置文件说起,memcached配置项中的driver指定使用的缓存驱动类型为memcached。servers表示使用的安装Memcached的服务器,host代表主机名,port代表Memcached监听的端口号,默认为11211,weight代表权重,因为很多时候我们配置了多台Memcached服务器,权重表示存取的优先级。
作为测试,这里我们就使用默认配置好了。
开始之前我们要将默认缓存驱动改成memcached:
'default' =& env('CACHE_DRIVER', 'memcached'),
此外,config/cache.文件中还有最后一个配置项prefix,用于配置缓存键的前缀,对于基于内存的缓存系统而言,缓存项可能被同一主机上的多个应用使用,所以加上前缀以示区别还是很有必要的。这里我们使用laravelacademy作为前缀好了:
'prefix' =& 'laravelacademy',
上一页: &&&&&下一页:相关内容

我要回帖

更多关于 laravel5 数据库监听 的文章

 

随机推荐