前言
- 初学redis,在mac下安装过程遇到一些坑,尤其是下文第四点,在mamp下安装phpredis扩展过程中,记录之。
- 本文最终实现的是用tp5框架操作redis,但这之前的几步,应该是较通用的,即不用tp5,甚至不用php,也可参考前几步。
安装redis环境,究竟需要安装什么
因为对redis不了解,我把redis想像成mysql去入门了,mysql有以下内容:
- mysql-server:mysql必不能少的东西。
- mysql-client:即在命令行输入mysql ,进入到操作mysql-server的界面。
- mysql图形界面管理工具:如navicat。
- php-mysql相关模块:必须下载,放置,引入这些模块,才能通过php操作mysql。
- php框架会有其自己的php-mysql类库:那是框架对php操作mysql的封装。
同理,redis也有如上内容,安装redis环境,我认为把以上内容安装好,应该就能使用和管理redis。
一、安装redis-server
- 单独安装 菜鸟教程
## 安装
brew install redis
## 管理
brew services start|stop redis
## 测试安装结果
redis-cli
集成安装 ,即安装mamp,里面有apache,nginx,mysql,redis各种服务。
想安装**版的去 爱情守望者 搜。
有一点要注意的是:要勾选Allow network access to Redis
,否则连不上去。如图
二、安装redis-client
这个貌似不用专门安装,单独安装redis成功就有了。进入redis命令行界面:
redis-cli
三、安装redis图形界面管理工具
笔者安装的是Medis,也是在爱情守望者里下载的。目前用起来没问题。
四、安装php-redis相关模块
这里坑最多!
注意到这里说的是在mamp下安装php-redis相关模块,不是单独搭环境了。
先说流程,再说坑。
流程
- 下载phpredis包。
- 用某个版本的phpize编译,得到redis.so模块
- 将redis.so模块放到php.ini指定的目录下
- 在php.ini引入redis.so模块
- 通过phpinfo()搜索redis,查看是否安装成功
我遇到的坑
首先,笔者搜了很多文章,都是上来就说这个流程,也许是mamp版本不同,但我看了php.ini,到其指定的引入目录,发现已经有redis.so模块了。
- 打开期望版本的php.ini
ctrl+f搜索extension_dir
,到其指定引入模块目录,发现有redis.so,那意味着流程的前3步都不用干了。
然后到第四步,当时没看懂MAMP_Redis_MAMP
是什么意思,一直纠缠在引入语句是否正确上,消耗了很多时间,最后发现是模块有问题,于是重新走流程。
正确的具体步骤
- 到phpredis的github仓库下载包。
- 使用mamp的指定版本的php编译该包
## 进入刚下载的包目录下
cd 你的下载目录/phpredis
## 用mamp指定版本的php的phpize编译
/Applications/MAMP/bin/php/php7.0.31/bin/phpize
## 返回如下,说明成功
Configuring for:
PHP Api Version: 20151012
Zend Module Api No: 20151012
Zend Extension Api No: 320151012
## 继续输入
./configure --with-php-config=/Applications/MAMP/bin/php/php7.0.31/bin/php-config
## 继续
make
## 成功后,进入modules,有redis.so
cd modules
ls
注意,本文所有涉及php版本的操作,笔者统一使用的是mamp下的php7.0.31版本。
- 将redis.so模块放到php.ini指定的目录下。上面说过了,笔者的是
extension_dir = "/Applications/MAMP/bin/php/php7.0.31/lib/php/extensions/no-debug-non-zts-20151012/"
- 在php.ini引入redis.so模块。在php.ini添加
extension=redis.so
即可。但上面说过,extension=redis.so
前有MAMP_Redis_MAMP
。我的理解是,这是一个常量,是用来控制开关的,而在哪里设置呢?如图。这个大家通过debug模块试一试就知道了。
最终,把MAMP_Redis_MAMP
删掉,留下extension=redis.so
即可。
- 最后,打开phpinfo,搜索redis,找到,就恭喜。
小结
- mamp下修改保存后,要点一下servers关闭,再点开启。
- 也许是报错模式设置问题,指定目录没有模块或模块有问题,而php.ini引入了该模块,仍能正常开启服务,但在phpinfo里看不到该模块
- 这里说的php版本有点乱,至少保证,以下版本是用的同一个,且建议都是用mamp下的php,而不是单独下载的。
- 最终执行php文件的php版本
- 修改的php.ini的版本
- 用来编译phpredis包的php版本
五、安装框架的php-redis类库
不具体说了,如果是tp5,自带了,不用任何安装指令。
其它框架,看其手册,大概就是通过composer操作一下。