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并无太大差别,唯一的区别在于实例化连接类的过程中。
--------------------------- 我是可爱的分割线 ----------------------------
最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。
Laravel入坑指南(6)——Redis缓存的更多相关文章
- electron入坑指南
electron入坑指南 简介 electron 实际集成chrome浏览器和node环境, 运行你写的网页 app 基本目录结构 index.html 名称可以不是index, 这个文件与普通网页的 ...
- C语言入坑指南-被遗忘的初始化
前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...
- Elasticsearch入坑指南之RESTful API
Elasticsearch入坑指南之RESTful API Tags:Elasticsearch ES为开发者提供了非常丰富的基于Http协议的Rest API,通过简单的Rest请求,就可以实现非常 ...
- ElasticSearch入坑指南之概述及安装
---恢复内容开始--- ElasticSearch入坑指南之概述及安装 了解ElasticSearch ElasticSearch(简称ES)基于Lucene的分布式全文检索引擎.使用ES可以实现近 ...
- eclipse中导入外部包却无法查看对应源码或Javadoc的入坑指南
eclipse中导入外部包却无法查看对应源码或Javadoc的 入坑指南 出现这个错误的原因是,你虽然导入了.jar包,但没有配置对应的Javadoc或源码路径,所以在编辑器中无法查看源 码和对应AP ...
- Rust入坑指南:核心概念
如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部 ...
- Rust入坑指南:鳞次栉比
很久没有挖Rust的坑啦,今天来挖一些排列整齐的坑.没错,就是要介绍一些集合类型的数据类型."鳞次栉比"这个标题是不是显得很有文化? 在Rust入坑指南:常规套路一文中我们已经介绍 ...
- Rust入坑指南:亡羊补牢
如果你已经开始学习Rust,相信你已经体会过Rust编译器的强大.它可以帮助你避免程序中的大部分错误,但是编译器也不是万能的,如果程序写的不恰当,还是会发生错误,让程序崩溃.所以今天我们就来聊一聊Ru ...
- Rust入坑指南:朝生暮死
今天想和大家一起把我们之前挖的坑再刨深一些.在Java中,一个对象能存活多久全靠JVM来决定,程序员并不需要去关心对象的生命周期,但是在Rust中就大不相同,一个对象从生到死我们都需要掌握的很清楚. ...
- Rust入坑指南:齐头并进(上)
我们知道,如今CPU的计算能力已经非常强大,其速度比内存要高出许多个数量级.为了充分利用CPU资源,多数编程语言都提供了并发编程的能力,Rust也不例外. 聊到并发,就离不开多进程和多线程这两个概念. ...
随机推荐
- 【C++】在搞touchgfx时遇见了一个初始化列表顺序与类中定义不一致的问题,error:when initialized here [-Werror=reorder]
在搞touchgfx时遇见了一个初始化列表顺序与类中定义不一致的问题,error:when initialized here [-Werror=reorder] 初始化列表顺序与类中定义顺序不一致错误 ...
- 【面试题精讲】JavaOptional用法
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 文章更新计划 系列文章地址 Java 8 引入了 Option ...
- [转帖]tcp、http和socket的区别
https://www.jianshu.com/p/88d69454bdde 一:tcp协议 tcp协议属于传输层协议(UDP也属于传输层协议,但是UDP协议是无状态的).建立一个TCP连接需要三次握 ...
- [转帖]大模型训练,英伟达Turing、Ampere和Hopper算力分析
https://www.eet-china.com/mp/a219195.html 大 GPU 优势在于通过并行计算实现大量重复性计算.GPGPU即通用GPU,能够帮助 CPU 进行非图形相关程序的运 ...
- [转帖]VLAN与三层交换机
目录 一.VLAN概述与优势 二.Trunk的作用 三.IEEE 802.1q 四.VLAN转发 五.Trunk的配置 六.单臂路由概述 七.三层交换机实现VLAN之间通信的原理 八.实验一 九.实验 ...
- java -D的一些学习和使用
背景 java开发的程序有很多进行配置的方式 可以通过 yaml文件或者是xml文件 也可以通过环境变量的方式. 1. 容器的话可以使用 -e 或者是env进行注入 2. K8S的话可以通过 conf ...
- 【转载】Linux常用命令大全(非常全!!!)
[转载]Linux常用命令大全(非常全!!!) https://www.cnblogs.com/purple5252/p/11870584.html Linux常用命令大全(非常全!!!) 最近都在和 ...
- Linux下PG数据库计划任务定期备份恢复的方法
注意事项 PG数据库需要注意的一点是需要安装OSSP-UUID的组件才能使用. 本次使用最除了冷备之外 最简单的 pg_dump和pg_restore的操作 的方式来进行处理 务必定期演练保证数据备份 ...
- vite引入图片
vite引入图片出现的问题 -不能够页面 <template> <div> <div> <img class="imgsize" sr=& ...
- 【VictoriaMetrics源码阅读】vm中仿照RoaringBitmap的实现:uint64set
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu 公众号:一本正经的瞎扯 正文 VictoriaMetrics中使用uint64类型来表示一个Me ...