Macbook安装redis环境与 'redis.so' 丢失问

2024-01-29  本文已影响0人  轻书铭

电脑是13寸17年时候的macbook,系统升级了N个版本,最近尝试在本地安装redis环境供php开发。
安装redis环境,除了安装redis本身还需要安装redis扩展phpredisComposer依赖库predis

一、安装redis

1、通过brew直接安装redis
brew install redis
brew services start redis
2、启动redis服务
// 启动
brew services start redis
// 关闭
brew services stop redis
// 重启
brew services restart redis
3、连接redis
redis-cli

二、安装redis扩展phpredis

1、下载源
git clone https://github.com/phpredis/phpredis.git
// 我这边找对应版本拉的zip
https://github.com/phpredis/phpredis
2、移动进入目录
mv phpredis /usr/local/Cellar
cd /usr/local/Cellar/phpredis
3、执行检测生成相应的configure文件
phpize
4、开始编译
// 由于本机安装了多个版本php,需要 --with-php-config=*
./configure --with-php-config=/usr/local/Cellar/php@7.2/7.2.34_10/bin/php-config
make && make install

// 查看php-config路径
which php-config
5、修改php.ini,开启扩展
// 我本机php.ini路径
vim /usr/local/etc/php/7.2/php.ini
// 添加extension
extension=redis.so
6、重启php环境,使其生效
brew services restart php@7.2
7、检测扩展安装是否正常
// 输出打印能看到redis信息代表安装正确
<?php
  phpinfo();
?>
8、为何windows环境php.ini配置extension=redis即可,但macbook环境就需要extension=redis.so

WindowsMac环境下,PHP扩展的加载方式有所不同。在Windows环境下,PHP使用动态链接库(DLL)文件来加载扩展,因此只需要在php.ini文件中添加extension=redis即可。
而在Mac环境下,PHP使用共享对象(.so)文件来加载扩展。因此,需要在php.ini文件中添加extension=redis.so来加载Redis扩展。

这种差异是由于不同操作系统对动态链接库的命名约定不同。在Windows上,动态链接库的扩展名为.dll,而在类Unix系统(如Mac)上,动态链接库的扩展名为.so
因此,在Mac环境下,需要使用与操作系统匹配的扩展名(即.so)来加载Redis扩展。这样做可以确保PHP正确加载并使用Redis扩展的功能。

三、安装Composer依赖库predis

1、进入项目目录,安装依赖库predis
composer require predis/predis
2、laravel使用redis
// config => app.php配置aliases
'Redis' => Illuminate\Support\Facades\Redis::class

// .env配置redis配置参数
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

// 使用redis
Redis::hSet(CACHE_FOR_DATA, $cacheKey, $stringData);

四、安装过程中遇到的问题

1、遇到报错,php.ini开启扩展失败
PHP Startup: Unable to load dynamic library 'redis' (tried: /usr/local/lib/php/pecl/20170718/redis (dlopen(/usr/local/lib/php/pecl/20170718/redis, 0x0009): tried: '/usr/local/lib/php/pecl/20170718/redis' (no such file)), /usr/local/lib/php/pecl/20170718/redis.so (dlopen(/usr/local/lib/php/pecl/20170718/redis.so, 0x0009): tried: '/usr/local/lib/php/pecl/20170718/redis.so' (no such file))) in Unknown on line 0

// 参考类似错误
PHP Warning: PHP Startup: Unable to load dynamic library 'redis.so' (tried: /usr/lib64/php/modules/redis.so (/usr/lib64/php/modules/redis.so: .....................
2、分析问题

寻找问题过程中很坑,搜出来大多都是不符合场景的,经过多次搜索仔细核对发现以下几个原因:
其中,php.ini存在扩展目录配置extension_dir=/usr/local/lib/php/pecl/20170718

3、处理问题
(1)修改extension_dir
vim /usr/local/etc/php/7.2/php.ini
extension_dir = "/usr/local/lib/php/20170718"
(2)复制redis.so到扩展目录

这边也有一个坑,网上说phpredis编译之后的目录下有redis.so,但实际上是在其下级目录modules下,当时找了好久,还是理解的不够深。

// 复制phpredis编译之后的redis.so到扩展文件夹
cd /usr/local/Cellar/phpredis/modules
cp redis.so /usr/local/lib/php/20170718
4、其他问题:Mac系统which phpphpinfo()输出的php版本信息不一致

我这边也是在核对各个细节信息时发现的,竟然在iTerm输出的php版本信息跟我开发软件使用的不一致。
惊呆了,用了这么久也是没问题,之前安装了好几个版本php,装了又卸载,卸载了又装,估计是当时两个版本正好一致。

(1)修改~/.zshrc,我这边系统使用的是zsh
vim ~/.zshrc

// 追加替换PATH,原先7.2版本的注释
PATH=/usr/local/Cellar/php@7.2/7.2.34/bin
PATH=/usr/local/Cellar/php@7.2/7.2.34/sbin

// 执行生效
source ~/.zshrc

// 检验
which php
参考资料

https://www.cnblogs.com/dragon88/p/11880699.html
https://www.cnblogs.com/benbenhan/articles/13839065.html

上一篇 下一篇

猜你喜欢

热点阅读