[关闭]
@a5635268 2016-02-08T20:47:42.000000Z 字数 2578 阅读 1874

YII框架之缓存

源码分析与使用笔记


数据缓存

使用缓存

  1. <?php
  2. //开启两个memcached服务器
  3. [
  4. 'components' => [
  5. 'cache' => [
  6. 'class' => 'yii\caching\MemCache',
  7. 'keyPrefix' => 'myapp', // 唯一键前缀
  8. 'servers' => [
  9. [
  10. 'host' => 'server1',
  11. 'port' => 11211,
  12. 'weight' => 100,
  13. ],
  14. [
  15. 'host' => 'server2',
  16. 'port' => 11211,
  17. 'weight' => 50,
  18. ],
  19. ],
  20. ],
  21. ]
  22. ];
  23. /*
  24. * 支持的常用缓存
  25. yii\caching\FileCache:使用标准文件存储缓存数据。这个特别适用于缓存大块数据,例如一个整页的内容。
  26. yii\caching\MemCache:使用 PHP memcache 和 memcached 扩展。这个选项被看作分布式应用环境中(例如:多台服务器,有负载均衡等)最快的缓存方案。
  27. yii\redis\Cache:实现了一个基于 Redis 键值对存储器的缓存组件(需要 redis 2.6.12 及以上版本的支持 )。
  28. */
  29. /**
  30. * 缓存API
  31. yii\caching\Cache::get():通过一个指定的键(key)从缓存中取回一项数据。如果该项数据不存在于缓存中或者已经过期/失效,则返回值 false。
  32. yii\caching\Cache::set():将一项数据指定一个键,存放到缓存中。
  33. yii\caching\Cache::add():如果缓存中未找到该键,则将指定数据存放到缓存中。
  34. yii\caching\Cache::mget():通过指定的多个键从缓存中取回多项数据。 //如果不支持批量的YII也会模拟实现
  35. yii\caching\Cache::mset():将多项数据存储到缓存中,每项数据对应一个键。
  36. yii\caching\Cache::madd():将多项数据存储到缓存中,每项数据对应一个键。如果某个键已经存在于缓存中,则该项数据会被跳过。
  37. yii\caching\Cache::exists():返回一个值,指明某个键是否存在于缓存中。
  38. yii\caching\Cache::delete():通过一个键,删除缓存中对应的值。
  39. yii\caching\Cache::flush():删除缓存中的所有数据。
  40. */
  41. // 实现了ArrayAccess接口
  42. $cache['var1'] = $value1; // 等价于: $cache->set('var1', $value1);
  43. $value2 = $cache['var2']; // 等价于: $value2 = $cache->get('var2');
  44. //查询缓存,可以用于 ActiveRecord 和 DAO
  45. $duration = 60; // 缓存查询结果60秒
  46. $dependency = '缓存依赖'; // 可选的缓存依赖
  47. //$db 是一个 yii\db\Connection 实例
  48. $db->beginCache($duration, $dependency);
  49. // ...这儿执行数据库查询都会缓存起来
  50. // yii\db\Connection::queryCacheDuration: 查询结果在缓存中的有效期,以秒表示。如果在调用 yii\db\Connection::beginCache() 时传递了一个显式的时值参数,则配置中的有效期时值会被覆盖。
  51. // yii\db\Connection::queryCache: 缓存应用组件的 ID。默认为 'cache'。只有在设置了一个有效的缓存应用组件时,查询缓存才会有效。
  52. $db->endCache();
  53. ?>

缓存过期

  1. <?php
  2. #1. 超时设置 略
  3. #2. 缓存依赖:缓存依赖用 yii\caching\Dependency 的派生类所表示。当调用 yii\caching\Cache::set() 在缓存中存储一项数据时,可以同时传递一个关联的缓存依赖对象。
  4. // 创建一个对 example.txt 文件修改时间的缓存依赖
  5. $dependency = new \yii\caching\FileDependency(['fileName' => 'example.txt']);
  6. // 缓存数据将在30秒后超时
  7. // 如果 example.txt 被修改,它也可能被更早地置为失效状态。
  8. $cache->set($key, $data, 30, $dependency);
  9. // 缓存会检查数据是否已超时。
  10. // 它还会检查关联的依赖是否已变化。
  11. // 符合任何一个条件时都会返回 false。
  12. $data = $cache->get($key);
  13. /**
  14. * 缓存依赖:
  15. yii\caching\ChainedDependency:如果依赖链上任何一个依赖产生变化,则依赖改变。
  16. yii\caching\DbDependency:如果指定 SQL 语句的查询结果发生了变化,则依赖改变。
  17. yii\caching\ExpressionDependency:如果指定的 PHP 表达式执行结果发生变化,则依赖改变。
  18. yii\caching\FileDependency:如果文件的最后修改时间发生变化,则依赖改变。
  19. yii\caching\GroupDependency:将一项缓存数据标记到一个组名,你可以通过调用 yii\caching\GroupDependency::invalidate() 一次性将相同组名的缓存全部置为失效状态。
  20. */
  21. ?>

片段缓存

片段缓存指的是缓存中的某个片段。例如,一个页面显示了逐年销售额的摘要表格,可以把表格缓存下来,以消除每次请求都要重新生成表格的耗时。片段缓存是基于数据缓存实现的。

http://www.yiichina.com/doc/guide/2.0/caching-fragment

页面缓存(静态)

页面缓存指的是在服务器端缓存整个页面的内容。随后当同一个页面被请求时,内容将从缓存中取出,而不是重新生成。

http://www.yiichina.com/doc/guide/2.0/caching-page

HTTP缓存

http://www.yiichina.com/doc/guide/2.0/caching-http

Web 应用还可以利用客户端缓存去节省相同页面内容的生成和传输时间,其他缓存是缓存在服务器端,但HTTP缓存是缓存在客户端里面的;

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注