Yii2-Redis使用小记 - Cache
前些天简单学习了下 Redis,现在准备在项目上使用它了。我们目前用的是 Yii2 框架,在官网搜索了下 Redis,就发现了yii2-redis这扩展。
安装后使用超简单,打开 common/config/main.php 文件,修改如下。
'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 先,
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 第 行,修改为如下代码。
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了。
好了,今天分享这些。
Yii2-Redis使用小记 - Cache的更多相关文章
- Yii2 redis与cache
原文地址:http://www.myexception.cn/php/1974979.html composer require yiisoft/yii2-redis 安装后使用超简单,打开 comm ...
- Yii2-Redis使用小记 - Cache(转)
前些天简单学习了下 Redis,现在准备在项目上使用它了.我们目前用的是 Yii2 框架,在官网搜索了下 Redis,就发现了yii2-redis这扩展. 安装后使用超简单,打开 common/con ...
- Yii2 Redis的使用
Yii2 redis扩展 下载 将下载的解压,改名为redis,放在vendor\yiisoft\yii2\目录下 包含Connection.php,ActiveRecord.php等文件 修改 ...
- spring boot redis 缓存(cache)集成
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- 【Azure Redis 缓存 Azure Cache For Redis】Azure Redis由低级别(C)升级到高级别(P)的步骤和注意事项, 及对用户现有应用的潜在影响,是否需要停机时间窗口,以及这个时间窗口需要多少的预估问题
问题描述 由于Azure Redis的性能在不同级别表现不同,当需要升级/缩放Redis的时候,从使用者的角度,需要知道有那些步骤? 注意事项? 潜在影响?停机事件窗口? 升级预估时间? 解决方案 从 ...
- Lumen框架使用Redis与框架Cache压测比较
使用命令 ab -c 20000 -n 100000 'http://127.0.0.1:9050/v1/api.store.xxx'进行压测,并同时进行了交叉测试,结果如下: 高并发情况下数据目前没 ...
- ssm+redis整合(通过cache方式)
这几天的研究ssm redis 终于进入主题了,今天参考了网上一些文章搭建了一下ssm+redis整合,特别记录下来以便以后可以查询使用,有什么不足请大牛们提点 项目架构 1.pom.xml < ...
- 基于Redis的Spring cache 缓存介绍
目录 Cache API及默认提供的实现 demo 依赖包安装 定义实体类.服务类和相关配置文件 Cache注解 启用Cache注解 @CachePut @CacheEvict @Cacheable ...
- Yii2 redis 使用方法
/** * 基于 yii2.0 redis使用方法 *///项目根目录命令行执行 composer require --prefer-dist yiisoft/yii2-redis; //在配置文件中 ...
随机推荐
- 在SQL2008R2查询分析器出错(在执行批处理时出现错误。错误消息为: 目录名称无效。)
在用SQL2008R2查询分析器时 SELECT * FROM 表名; 出错: 在执行批处理时出现错误.错误消息为: 目录名称无效. 原因: 在打开查询分析器时,用360软件清空了临时文件(只是偶尔1 ...
- cxf构建webservice的两种方式
一.简介 对于基于soap传输协议的webservice有两种开发模式,代码优先和契约优先的模式.代码优先的模式是通过编写服务器端的代码,使用代码生成wsdl:契约优先模式首先编写wsdl,再通过ws ...
- 更改ubuntu下mysql的密码
1.首先,进入环境中去,即 mysql -u root -p ,然后输入原始密码 2.此时会出现 mysql > 3.开始修改密码: mysql > use mysql ; ...
- (四) openwrt单个ipk编译过程
Tags : Makefile 本周是成胖子每周一博的第五周. 更好的阅读体验,请点击这里 [TOC] 前言 前一篇博客中,我们已经知道整个openwrt的编译顺序,本文我们来探讨与开发者息息相关的单 ...
- Climbing Stairs
Climbing Stairs https://leetcode.com/problems/climbing-stairs/ You are climbing a stair case. It tak ...
- UVA 11355 Cool Points(几何)
Cool Points We have a circle of radius R and several line segments situated within the circumference ...
- 非ios系统是否还有出路?
**@SoftwareTeacher** 这位老师提出的问题我很喜欢,所以单拿出一篇文章,认真的回复. PS: 因学校网很差,所以现在才来回复哈,见谅.以下为正文 ...
- Rem实现自适应初体验
第一次做移动端的页面,遇到的第一个问题就是移动端的轮播图.其实轮播图的插件有很多,但是完全满足需求的并不容易找. 需求: 1.实现基本的触屏轮播图效果 2.传入非标准比例的图片,可以自动平铺(有时候图 ...
- UESTC 876 爱管闲事 --DP
题意:即求给定n个数字(a1,a2,……an),不改变序列,分成M份,使每一份和的乘积最大. 思路:dp[i][j]表示把前i个数字,分成j份所能得到的最大乘积. 转移方程:dp[i][j] = ma ...
- java8-1 final
1.final可以修饰类,方法,变量 特点: final可以修饰类,该类不能被继承. final可以修饰方法,该方法不能被重写.(覆盖,复写) final可以修饰变量,该变量不能被重新赋值.因为这个变 ...