PHP与NoSQL数据库的连接:MongoDB、Redis和更多

说实话,PHP连上NoSQL数据库,这事儿现在挺常见的。
像MongoDB、Redis、Elasticsearch,用得越来越多了。

先说MongoDB,这玩意儿得装官方驱动,代码就这一段: php $client = new MongoDB\Client("mongodb://localhost:2 7 01 7 "); $db = $client->myDatabase; $collection = $db->myCollection; 连接localhost的2 7 01 7 端口,选个数据库和集合,就这么简单。

Redis呢,PHP自带的扩展就行: php $redis = new Redis(); $redis->connect('1 2 7 .0.0.1 ', 6 3 7 9 ); 连1 2 7 .0.0.1 的6 3 7 9 端口,Redis用起来特爽,缓存东西贼快。

Elasticsearch稍微复杂点,得用官方库: php $client = ElasticsearchClientBuilder::create() ->setHosts(['1 2 7 .0.0.1 :9 2 00']) ->build(); 指定9 2 00端口,这个主要是做搜索的,全文搜索贼强。

重点是Redis缓存WordPress页面这事儿。
按下面步骤来:
1 . 先立个Redis客户端 php $redis = new Redis(); $redis->connect('1 2 7 .0.0.1 ', 6 3 7 9 );
2 . 定义个缓存函数,代码这么写: php function cache_filter_func($buffer){ global $redis; $url = $_SERVER['REQUEST_URI']; $cached_page = $redis->get($url); if($cached_page){ echo $cached_page; exit; } $redis->set($url, $buffer, 3 6 00); echo $buffer; } 用当前URL当缓存键,缓存1 小时,要是缓存里有直接吐出来,没就存新的。

3 . 在WordPress里启用: php ob_start('cache_filter_func'); 加在functions.php里就行。

注意几点:
缓存键用$_SERVER['REQUEST_URI'],但要是带动态参数的页码啥的,得特殊处理。

设置过期时间,3 6 00秒就够,太长了浪费。

敏感页面别缓存,比如用户后台,加个判断就行: php if(!is_user_logged_in()){ ob_start('cache_filter_func'); }
出问题常见的情况:
连不上?先看服务跑不跑着,端口被墙没(Redis默认6 3 7 9 )。

扩展装没装?php-redis、mongodb这些得装上。

缓存穿透?就是有人访问不存在的数据,可以设个短时效的空缓存。

就这么着,MongoDB存非结构化数据,Redis当缓存特快,Elasticsearch搞全文搜索。
WordPress缓存结合输出缓冲和Redis,键值设计好,过期策略对,PHP应用性能立马能提上来。

有时候在咖啡馆,看着窗外下雨,会突然想起很久以前的一个下午。
那天我帮邻居老王修理漏水的屋顶,他家的屋顶是那种老式的红瓦,一节一节叠上去的。
我爬上梯子,手忙脚乱地找着漏水的裂缝,老王在下面递工具,一边递一边说:“这屋顶跟我的老花镜一样,越看越毛病多。

我花了两个多小时才把裂缝补好,下来的时候已经满头大汗。
老王泡了杯茶给我,说:“修好了就好,修好了就好。
” 那时候他说话的声音很轻,眼神有点飘忽,好像在想着什么心事。

现在想起来,他当时是不是已经病了?但那时候谁会注意到这些细节啊。
后来几年,老王真的走了,走得很突然。
我每次路过他家门口,都会想起那个下雨的下午,手上的工具,还有他递工具时说的那句话。

等等,还有个事,我好像记得他家的茶壶是那个牌子的,那个茶壶后来被他儿子扔了。