• 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 IlluminateSupportFacadesRedis;
    
    Redis::set("key",["arr_key"=>"arr_value"]);

    上面这是一个简单的例子。例子中redis的key对应了一个php的数组。

    但是我们进入redis客户端一看,这时写入的是Array这个字符串。因为我没写入时没有对这个数组进行序列化,我们需要在之前调用setOption设置序列化方式。

    那问题来了,我们怎么调用setOption,关于redis这一节官网介绍的资料非常少,除了get和set函数几乎没太多内容。所以这时笔者去翻阅了源码,发现RedisManager源码中有这几行代码:

     瞬间恍然,phpredis的所有成员函数,我们都可以通过IlluminateSupportFacadesRedis进行调用(划重点)

    use IlluminateSupportFacadesRedis;
    
    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连接集群,请看这里:传送门    需要密码连接

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

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

  • 相关阅读:
    Web API 跨域问题
    找不到System.Web.Optimization命名空间
    IIS7配置rewriter
    Windows server 2008 R2实现多用户远程连接 (转)
    DatabaseGenerated(转)
    SQL、LINQ、Lambda 三种用法(转)
    Mvcpager以下各节已定义,但尚未为布局页“~/Views/Shared/_Layout.cshtml”呈现:“Scripts”。
    15-07-16 数据库--增删改查
    看名字测缘分
    String类
  • 原文地址:https://www.cnblogs.com/ddcoder/p/13365280.html
Copyright © 2020-2023  润新知