写在前面:

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

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

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

Laravel入坑指南(6)——Redis缓存的更多相关文章

  1. electron入坑指南

    electron入坑指南 简介 electron 实际集成chrome浏览器和node环境, 运行你写的网页 app 基本目录结构 index.html 名称可以不是index, 这个文件与普通网页的 ...

  2. C语言入坑指南-被遗忘的初始化

    前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...

  3. Elasticsearch入坑指南之RESTful API

    Elasticsearch入坑指南之RESTful API Tags:Elasticsearch ES为开发者提供了非常丰富的基于Http协议的Rest API,通过简单的Rest请求,就可以实现非常 ...

  4. ElasticSearch入坑指南之概述及安装

    ---恢复内容开始--- ElasticSearch入坑指南之概述及安装 了解ElasticSearch ElasticSearch(简称ES)基于Lucene的分布式全文检索引擎.使用ES可以实现近 ...

  5. eclipse中导入外部包却无法查看对应源码或Javadoc的入坑指南

    eclipse中导入外部包却无法查看对应源码或Javadoc的 入坑指南 出现这个错误的原因是,你虽然导入了.jar包,但没有配置对应的Javadoc或源码路径,所以在编辑器中无法查看源 码和对应AP ...

  6. Rust入坑指南:核心概念

    如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部 ...

  7. Rust入坑指南:鳞次栉比

    很久没有挖Rust的坑啦,今天来挖一些排列整齐的坑.没错,就是要介绍一些集合类型的数据类型."鳞次栉比"这个标题是不是显得很有文化? 在Rust入坑指南:常规套路一文中我们已经介绍 ...

  8. Rust入坑指南:亡羊补牢

    如果你已经开始学习Rust,相信你已经体会过Rust编译器的强大.它可以帮助你避免程序中的大部分错误,但是编译器也不是万能的,如果程序写的不恰当,还是会发生错误,让程序崩溃.所以今天我们就来聊一聊Ru ...

  9. Rust入坑指南:朝生暮死

    今天想和大家一起把我们之前挖的坑再刨深一些.在Java中,一个对象能存活多久全靠JVM来决定,程序员并不需要去关心对象的生命周期,但是在Rust中就大不相同,一个对象从生到死我们都需要掌握的很清楚. ...

  10. Rust入坑指南:齐头并进(上)

    我们知道,如今CPU的计算能力已经非常强大,其速度比内存要高出许多个数量级.为了充分利用CPU资源,多数编程语言都提供了并发编程的能力,Rust也不例外. 聊到并发,就离不开多进程和多线程这两个概念. ...

随机推荐

  1. [转帖]Shell编程规范与变量

    目录 一.Shell的概念 Shell脚本的概念 Shell脚本应用场景 二.Shell的作用 Shell脚本种类 shell脚本的作用 Shell脚本的构成 Shell脚本的构成 二.编写Shell ...

  2. 各种数据库shell一键登录的方法

    各种数据库shell一键登录的方法 一个小场景 想通过shell 直接执行一些内容. 然后发现通过shell就可以. 所以这里总结一下 1. Oracle export ORACLE_HOME=/u0 ...

  3. [转帖]ORACLE等待事件:enq: TX - row lock contention

    https://www.cnblogs.com/kerrycode/p/5887150.html enq: TX - row lock contention等待事件,这个是数据库里面一个比较常见的等待 ...

  4. [转帖]TiDB 热点问题处理

    TiDB 热点问题处理 本文介绍如何定位和解决读写热点问题. TiDB 作为分布式数据库,内建负载均衡机制,尽可能将业务负载均匀地分布到不同计算或存储节点上,更好地利用上整体系统资源.然而,机制不是万 ...

  5. WorkStation的网络损耗

    WorkStation的网络损耗 背景 对周六遇到的问题进行了一下深入思考. 发现虽然可以通过WorkStation的方式来进行Clients以及新命令的扩容. 但是Workstation的桥接网络模 ...

  6. 准备学习 make

    make -h用法:make [选项] [目标] ...选项: -b, -m 为兼容性而忽略. -B, --always-make 无条件制作 (make) 所有目标. -C 目录, --direct ...

  7. Unity2020或Unity2019安装后无法启动

    无法启动Unity 下载国际版的Unity2020,双击Unity.exe无法启动,通过Unity Hub也无法启动 ​ 原因 通过查看unity hub的日志发现Unity 启动的时候会检查 lie ...

  8. druid和druid-spring-boot-starter区别,以及springboot项目中提示报错Cannot resolve configuration property 'spring.datasource.xxxx' 和hikari配置属性

    一.druid和druid-spring-boot-starter区别分析 作用是一样的,都是连接池提供连接,里边的配置参数都是一样的: druid-spring-boot-starter只是在dru ...

  9. word论文常用格式设定技巧【公式对齐、制表符公式编号等】

    1.公式对齐 改动前: 改动后结果: 2.段落行距要求 对于文字可以设定为1.5倍行距 对于公式 5号字体对应1.5倍行距大概在23.4磅,因此可以根据需求适当调整大小. 3.公式标号---使用制表符 ...

  10. 2.5 Windows驱动开发:DRIVER_OBJECT对象结构

    在Windows内核中,每个设备驱动程序都需要一个DRIVER_OBJECT对象,该对象由系统创建并传递给驱动程序的DriverEntry函数.驱动程序使用此对象来注册与设备对象和其他系统对象的交互, ...