当前位置:首页 > 问答 > 正文

WNMP环境里怎么整合Redis,开发用起来方便点的那些事儿

行,那咱们就直接聊在WNMP(Windows + Nginx + MySQL/MariaDB + PHP)这个环境里,怎么把Redis弄进来,让开发过程顺手一点,这事儿说白了,就是在你本地电脑的Windows系统上,让PHP能和Redis“搭上话”,写代码的时候用起来方便,调试也简单。

先把Redis“请”到你的电脑上

你总得把Redis软件安装到Windows上吧,虽然Redis官方没有直接提供Windows的稳定版,但现在有挺多方法可以搞定。

最简单的方法,就是去微软那边找找,来源:微软开源团队曾经维护过一个Windows版本的Redis,虽然现在不继续更新了,但对于本地开发测试来说,完全够用,你可以去GitHub上搜一下“MicrosoftArchive/redis”,找到 releases 页面,下载那个最新的MSI安装包,双击安装,就跟装普通软件一样,一路“下一步”就行,安装过程中,它会问你要不要把Redis的安装路径加到系统的环境变量里,这个一定要勾选上,这样以后在命令行窗口里直接打redis-server就能启动,省事很多。

安装完之后,你可以在开始菜单里找到“Redis”文件夹,里面通常有“Redis Server”和“Redis CLI”(命令行客户端),你可以直接点击“Redis Server”来启动Redis服务,它会打开一个黑色的命令行窗口,显示Redis的logo和端口号(默认是6379),这就说明服务跑起来了,更酷一点的做法是,打开一个新的命令行窗口(cmd或者PowerShell都行),输入redis-cli,如果顺利进入,出现0.0.1:6379>这样的提示符,那就说明Redis服务和客户端都工作正常,你已经可以和它互动了。

WNMP环境里怎么整合Redis,开发用起来方便点的那些事儿

让PHP“认识”Redis

光有Redis服务还不行,你的PHP得有一个扩展(可以理解成一个翻译官),才能去操作Redis,这个扩展的名字通常叫php_redis.dll

来源:这个扩展最权威的地方是PECL网站(PHP扩展库),但自己去编译下载挺麻烦的,对于用WNMP环境的你来说,最省心的办法是去看你用的PHP集成环境有没有自带,如果你用的是WNMP套件(像WPN-XM这类),或者类似PHPStudy这样的集成环境,它们的管理工具里往往自带了一个“扩展管理”的功能,你就在里面找有没有“redis”或者“php_redis”,有的话,直接勾选启用,然后重启一下Nginx和PHP服务就行了。

如果集成环境里没有,那你就得手动下载,关键是要下载跟你PHP版本完全匹配的DLL文件,你需要知道你PHP的三个信息:版本号(比如7.4.33)、是线程安全(Thread Safe,简称TS)还是非线程安全(NTS)、以及是x86还是x64架构,这些信息在你PHP环境里的phpinfo()页面里都能看到,然后去PECL的Redis扩展页面,找到对应版本的DLL下载下来,下载后,把这个php_redis.dll文件放到你PHP安装目录下的ext文件夹里,打开PHP的配置文件php.ini,在文件最后加上一行:extension=redis,保存,再次重启Nginx和PHP服务。

WNMP环境里怎么整合Redis,开发用起来方便点的那些事儿

怎么确认成功了呢?再打开phpinfo()页面,用浏览器的页面搜索功能找一下有没有“redis”这个模块,如果有,并且显示版本信息,那就大功告成了。

开发时怎么用着方便

环境搭好了,重点是怎么在写代码的时候让它帮上忙,而不是添乱。

  1. 把它当成一个超级快的“变量寄存处”:这是Redis最常用的地方,你的网站首页有一些从数据库里查出来的热点文章列表,每次访问都去查数据库,数据库压力大,页面打开也慢,你可以这样做:用户第一次访问时,照常查数据库,但拿到数据后,立刻用PHP的Redis扩展,把这些数据以某个键名(比如hot_articles)存到Redis里,并设置一个过期时间,比如5分钟,接下来的5分钟内,再有用户访问首页,PHP代码就先去Redis里找hot_articles这个键,如果有,直接拿出来用,省去了查询数据库的步骤,速度会快非常多,等5分钟过期后,再重复第一次的过程,这叫“缓存”,是Redis的看家本领。

    WNMP环境里怎么整合Redis,开发用起来方便点的那些事儿

  2. session存到Redis里:默认情况下,PHP会把用户的登录信息(session)存在电脑的临时文件里,但如果你的项目同时用了好几个服务,或者想更好地管理登录状态,可以把session存到Redis里,还是在php.ini里配置,找到session相关的设置,修改这么几行:

    session.save_handler = redis
    session.save_path = "tcp://127.0.0.1:6379"

    这样配置后,所有用户的session就都存到Redis里了,管理起来清晰,而且读写速度也快。

  3. 用Redis CLI当你的“调试小助手”:这是开发时特别方便的一点,你PHP代码里不是往Redis里存了东西吗?你怎么知道存没存对?值是什么?这时候就别老想着用var_dump了,直接打开之前说的那个redis-cli命令行窗口,你想看看刚才存的hot_articles是啥,就在命令行里打GET hot_articles,想看看Redis里现在都有哪些键,打KEYS *(生产环境慎用这个命令,键多的时候会卡),想删掉某个键做测试,打DEL key_name,这种即时查看和操作的能力,对排查问题非常有帮助。

  4. 注意内存和持久化:Redis的数据主要在内存里,所以你本地开发时,如果乱存一大堆测试数据,可能会把内存占满,记得时不时用redis-cli进去,打一个FLUSHALL命令清空所有数据(注意:这个命令会删光所有数据,只在开发环境做),Redis默认是会定期把内存数据保存到硬盘上的(持久化),所以不用担心关电脑后数据全丢,下次启动它自己会读回来。

在WNMP里整合Redis,步骤就是“安装Redis服务” -> “给PHP装上Redis扩展” -> “在php.ini里做点小配置”,用起来的核心思路就是把它当成一个速度超快的“全局变量存储器”,并且善用redis-cli这个命令行工具来辅助调试,一旦用顺手了,你会发现开发效率能提升不少,尤其是处理一些需要频繁读取的数据时,感觉会非常爽。