Yii2-Redis使用小记 - Cache
前些天简单学习了下 Redis,现在准备在项目上使用它了。我们目前用的是 Yii2 框架,在官网搜索了下 Redis,就发现了yii2-redis这扩展。
安装后使用超简单,打开 common/config/main.php 文件,修改如下。
1 2 3 4 5 6 7 8 9 10 | 'cache' => [ // 'class' => 'yii\caching\FileCache', 'class' => 'yii\redis\Cache' , ], 'redis' => [ 'class' => 'yii\redis\Connection' , 'hostname' => 'localhost' , 'port' => 6379, 'database' => 0, ], |
OK,现在已经用 redis 接管了yii的缓存,缓存的使用和以前一样,以前怎么用现在还是怎么用,但是有个不算bug的bug,所以算小坑,等会会说。
来测试下 cache 先,
1 2 3 4 5 6 7 | Yii:: $app ->cache->set( 'test' , 'hehe..' ); echo Yii:: $app ->cache->get( 'test' ), "\n" ; Yii:: $app ->cache->set( 'test1' , 'haha..' , 5); echo '1 ' , Yii:: $app ->cache->get( 'test1' ), "\n" ; sleep(6); echo '2 ' , Yii:: $app ->cache->get( 'test1' ), "\n" ; |
来看下测试结果。
和原来一样的用法,没问题。。
但是刚才我说过了有个不算bug的bug,所以算小坑,到底是什么东西呢?
如果你直接用 redis 接管了 cache,如果正常使用是完全没问题的,但是当 过期时间 的值超过 int 范围的时候,redis就会报错。
我使用了 yii2-admin,凑巧让我踩到坑了,因为他缓存了30天,也就是2592000秒,并且 redis 缓存时间精度默认用毫秒,所以时间就是 2592000000 毫秒。
而 redis 的过期时间只能是int类型,Cache.php 里的 php 强制转为int,而没有做其他处理,所以就会变成 -1702967296 然后就报错了。
但是直接在 redis 命令行下不会负数,如图。
不过没关系,修复起来也很简单,我们修改为秒即可。
打开 vendor/yiisoft/yii2-redis/Cache.php 第 133 行,修改为如下代码。
1 2 3 4 5 6 7 8 9 10 11 12 | protected function setValue( $key , $value , $expire ) { if ( $expire == 0) { return (bool) $this ->redis->executeCommand( 'SET' , [ $key , $value ]); } else { // $expire = (int) ($expire * 1000); // 单位默认为毫秒 // return (bool) $this->redis->executeCommand('SET', [$key, $value, 'PX', $expire]); $expire = + $expire > 0 ? $expire : 0; // 防止负数 return (bool) $this ->redis->executeCommand( 'SET' , [ $key , $value , 'EX' , $expire ]); // 按秒缓存 } } |
这样就OK了。
好了,今天分享这些。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探