/** * 设置键值 * @param string $key 键名 * @param mixed $value 键值 * @param int $time 过期时间,默认为-1,不设置过期时间;为0则设置为永不过期 * @return boolean 是否成功 */ public function set($key, $value, $time = -1) { try { if ($time > 0) { return $this->handler->setex($key, $time, self::setValue($value)); } return $this->handler->set($key, self::setValue($value)); } catch (RedisException $ex) { self::exception($ex); //连接状态置为false $this->isConnected = false; } return false; }
/** * 设置键值,将自动延迟过期;<br> * 此方法用于缓存对过期要求宽松的数据;<br> * 使用此方法设置缓存配合getDE方法可以有效防止惊群现象发生 * @param string $key 键名 * @param mixed $value 键值 * @param int $time 过期时间,<=0则设置为永不过期 * @param int $delayTime 延迟过期时间,如果未设置,则使用配置中的设置 * @return boolean 是否成功 */ public function setDE($key, $value, $time, $delayTime = null) { try { if ($time > 0) { $delayTime = $this->getDelayTime($delayTime); $ret = $this->handler->multi()->setex($key, $time + $delayTime, self::setValue($value))->setex(self::timeKey($key), $time + $delayTime, self::setValue(['expire_time' => time() + $time + $delayTime, 'delay_time' => $delayTime]))->exec(); return $ret !== false ? true : false; } $timeValue = self::getValue($this->handler->get(self::timeKey($key))); //已过期或 time<=0 时 if ($timeValue !== false && (self::isExpiredDE($timeValue) || $time <= 0)) { $this->handler->del($key, self::timeKey($key)); } return $this->handler->set($key, self::setValue($value)); } catch (RedisException $ex) { self::exception($ex); //连接状态置为false $this->isConnected = false; } return false; }