Laravel入坑指南(6)——Redis缓存
写在前面:
Redis是常用nosql服务之一,在Redis官网上最新的稳定版本是6.0.6。这里不讨论Redis服务如何编译,如何使用。在Redis官网有很健全的文档。
这里要讨论的是无论在centos6还是在centos7下,编译Redis 6+版本都会看到一堆很魔性的报错redisServer has no member ****。原以为是redis的源码有问题,后来发现是默认的gcc版本不够支持这么高的版本。所以我们要先把默认的gcc版本升上去:
#安装开发套件 yum install cpp yum install binutils yum install glibc yum install glibc-kernheaders yum install glibc-common yum install glibc-devel yum install gcc yum install make #或者直接用 yum groupinstall Development tools #升级gcc版本 yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils scl enable devtoolset-9 bash
到这里,gcc的版本被我们升到了9.3.1。这时,gcc版本已经接近颠峰,可以浪起来了。
写在前面2:
PHP连接redis有两种方式,一种是采用pecl提供的redis扩展,我们称为phpredis(传送门);另一种,则是以纯的php实现redis协议的包predis(传送门)。这两种连接方式,各有优缺点:
phpredis:优点:速度飞快,稳定性极强;劣势:安装麻烦一点点。(对于笔者来说,这个劣势根本称不上劣势,玩个吃鸡都要安装,这么牛B的扩展反而想偷懒怎么可能?)
predis:优点:安装极其方便,一名composer require predis/predis就搞定了;劣势:因为是纯php实现的,运行效率上自上敌不过phpredis。
对于Laravel来说,两者都支持,只要正确安装即可。笔者本来想介绍predis,但是在composer安装过程中遇到报错,需要依赖fileinfo扩展。笔者寻思着既然都要安装扩展,为什么我不直接用pecl的redis扩展?
所以以下篇幅,包括配置都是有phpredis为例子进行讨论。
1、配置
PHP连接redis与之前讨论过的连接mysql很类似,需要知道host(地址)、password(密码)和port(端口,默认为6379)。redis的连接配置在项目根目录下/config/database.php中的redis配置节,如下图
这个配置节中,所有的value都用env()函数读出来的(这个函数干啥用?回去看看第4节),所以我们在/.env配置文件中又有如下配置项:
到了这一步配置就完成了。注意REDIS_CLIENT现在用的是phpredis,并非predis,所以大家要确保pecl redis扩展安装成功,划重点敲黑板。不会安装扩展的同学,点击文章最下方的链接,连系笔者。
2、使用
use Illuminate\Support\Facades\Redis; Redis::set("key",["arr_key"=>"arr_value"]);
上面这是一个简单的例子。例子中redis的key对应了一个php的数组。
但是我们进入redis客户端一看,这时写入的是Array这个字符串。因为我没写入时没有对这个数组进行序列化,我们需要在之前调用setOption设置序列化方式。
那问题来了,我们怎么调用setOption,关于redis这一节官网介绍的资料非常少,除了get和set函数几乎没太多内容。所以这时笔者去翻阅了源码,发现RedisManager源码中有这几行代码:
瞬间恍然,phpredis的所有成员函数,我们都可以通过\Illuminate\Support\Facades\Redis进行调用(划重点):
use Illuminate\Support\Facades\Redis; Redis::setOption(\Redis::OPT_SERIALIZER, \Redis::SERIALIZER_PHP); Redis::setex("hello",20,["ok"=>"answer"]);
上面这个示例中,通过\Redis调用了phpredis的两个常量;setex也是phpredis提供的函数。
如果想问phpredis有多少成员函数可供使用,请进入:传送门
到这里,我们在Laravel下如何使用redis已经一切了然。这一节就要结束了,讨论的话题已经过半。这个系列的文章计划有12篇,每篇的阅读和练习假设需要2小时,我们目的就是让大家24小时入坑Laravel。
大家下期再见:)
写在最后:关于Redis集群
redis集群在代码连接与使用上与单机redis并无太大差别,唯一的区别在于实例化连接类的过程中。
--------------------------- 我是可爱的分割线 ----------------------------
最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。