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并无太大差别,唯一的区别在于实例化连接类的过程中。

phpredis连接集群,请看这里:传送门    需要密码连接

predis连接集群,请看这里:传送门    需要密码连接

 

 

---------------------------  我是可爱的分割线  ----------------------------

最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。

posted on 2020-07-23 16:34  咚..咚  阅读(868)  评论(0编辑  收藏  举报

导航