日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php高效下载文件,LinkCache

發布時間:2023/12/15 php 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php高效下载文件,LinkCache 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LinkCache - 一個靈活高效的PHP緩存工具庫

LinkCache 是一個PHP編寫的靈活高效的緩存工具庫,提供多種緩存驅動支持,包括Memcache、Memcached、Redis、SSDB、文件緩存、APC、YAC等。通過LinkCache可以使不同緩存驅動實現操作統一,同時又可發揮不同緩存驅動各自的優勢。LinkCache支持緩存 object 和 array,同時為防止產生驚群現象做了優化。

環境要求

PHP >= 5.4

使用 Memcache 緩存需要安裝Memcache擴展

使用 Memcached 緩存需要安裝Memcached擴展

使用 Redis 緩存需要安裝Redis擴展

使用 APC 緩存需要安裝APC擴展

使用 YAC 緩存需要安裝YAC擴展

安裝

composer 安裝

LinkCache 可以通過 composer 安裝,使用以下命令從 composer 下載安裝 LinkCache

$composer require dongnan/linkcache

手動下載安裝

下載地址

安裝方法

在你的入口文件中引入

//引入 LinkCache 的自動加載文件

include("path_to_linkcache/autoload.php");

如何使用

config - 配置信息

getDriver - 獲取緩存驅動實例

set - 將參數中的 value設置為 key 的值

setnx - 當緩存中不存在 key 時,將參數中的 value 設置為 key 的值

get - 獲取 key 對應的值

del - 刪除 key

has - 判斷 key 是否存在

ttl - 獲取 key 的生存時間(單位:s)

expire - 設置一個 key 的生存時間(單位:s)

expireAt - 用UNIX時間戳設置一個 key 的過期時間

persist - 刪除一個 key 的生存時間,使其永不過期

lock - 對 key 設置鎖標記(此鎖并不對 key 做修改限制,僅為 key 的鎖標記)

isLock - 判斷 key 是否有鎖標記

unLock - 移除 key 的鎖標記

incr - 設置 key 的值按整數遞增

incrByFloat - 設置 key 的值按浮點數遞增

decr - 設置 key 的值按整數遞減

mSet - 批量設置多個 key 對應的值

mSetNX - 當緩存中不存在 key 時,批量設置多個 key 對應的值

mGet - 獲取所有給定 key 的值

mHas - 批量判斷 key 是否存在

mDel - 批量刪除 key

config

配置信息

//設置緩存配置, 使用 array_merge 的方式合并到默認配置中

\linkcache\Cache::setConfig($config);

//獲取配置信息

$congig = \linkcache\Cache::getConfig();

//獲取指定緩存驅動的配置信息

$congig = \linkcache\Cache::getConfig('redis');

//默認配置信息

[

//默認使用的緩存驅動

'default' => 'files',

//當前緩存驅動失效時,使用的備份驅動

'fallback' => 'files',

'memcache' => [

'servers' => [

['host' => '127.0.0.1', 'port' => 11211, 'weight' => 1, 'persistent' => true, 'timeout' => 1, 'retry_interval' => 15, 'status' => true],

],

'compress' => ['threshold' => 2000, 'min_saving' => 0.2],

],

'memcached' => [

'servers' => [

['host' => '127.0.0.1', 'port' => 11211, 'weight' => 1],

],

//參考 Memcached::setOptions

'options' => [],

],

'redis' => [

'host' => '127.0.0.1',

'port' => 6379,

'password' => '',

'database' => '',

'timeout' => ''

],

'ssdb' => [

'host' => '127.0.0.1',

'port' => 8888,

'password' => '',

'timeoutms' => ''

],

]

instance

實例化緩存對象

//直接new一個

$cache = new \linkcache\Cache();

//通過getInstance獲取

$cache = \linkcache\Cache::getInstance();

//根據驅動類型實例化,支持的驅動:redis,memcache,memcached,ssdb,files,apc,yac

$cache = new \linkcache\Cache('files');

//或者

$cache = \linkcache\Cache::getInstance('files');

//傳入配置參數實例化

$cache = new \linkcache\Cache('redis', ['host' => '127.0.0.1', 'port' => 6379]);

getDriver

獲取緩存驅動實例

所有緩存驅動都必須實現 linkcache\interfaces\driver\Base 接口的方法,獲取到緩存驅動實例后,可直接使用緩存驅動的方法,包括緩存驅動中沒有定義但緩存驅動擴展對象中已定義的方法。

set

將參數中的 value 設置為 key 的值

參數

key - 字符串

value- 除了 resource 類型的所有的值

time - (可選參數) key的生存時間,單位是秒(s)

返回值

Boolean 如果設置成功,返回 true; 如果設置失敗,返回 false

例子

//設置不過期的緩存

$status = $cache->set($key, $value);

//設置有過期時間的緩存

$status = $cache->set($key, $value, $time);

setnx

當緩存中不存在 key 時,將參數中的 value 設置為 key 的值

參數

key - 字符串

value- 除了 resource 類型的所有的值

time - (可選參數) key的生存時間,單位是秒(s)

返回值

Boolean - 如果設置成功,返回 true; 如果設置失敗,返回 false

例子

//設置不過期的緩存

$status = $cache->setnx($key, $value);

//設置有過期時間的緩存

$status = $cache->setnx($key, $value, $time);

get

獲取 key 對應的值

參數

key - 字符串

返回值

Mixed - key 對應的值; 如果獲取失敗或 key 不存在,返回 false

例子

//獲取key對應的值

$value = $cache->get($key);

del

刪除 key

參數

key - 字符串

返回值

Boolean - 如果刪除成功,返回 true; 如果刪除失敗,返回 false。注意: 當 key 不存在時,也會返回 true

例子

//刪除key

$status = $cache->del($key);

has

判斷 key 是否存在

參數

key - 字符串

返回值

Boolean - 如果 key 存在,返回 true;如果 key 不存在,返回 false

例子

//判斷key是否存在

$status = $cache->has($key);

ttl

獲取 key 的生存時間(單位:s)

參數

key - 字符串

返回值

Mixed - 生存剩余時間(單位:秒) -1 表示永不過期,-2 表示 key 不存在,失敗返回 false

例子

//獲取key的生存時間

$ttl = $cache->ttl($key);

expire

設置一個 key 的生存時間(單位:s)

參數

key - 字符串

time - 整數,key的生存時間(單位:s)

返回值

Boolean - 如果設置成功,返回 true; 如果設置失敗或 key 不存在,返回 false

例子

//設置一個key的生存時間

$status = $cache->expire($key, $time);

expireAt

用UNIX時間戳設置一個 key 的過期時間

參數

key - 字符串

time - UNIX時間戳(單位:s)

返回值

Boolean - 如果設置成功,返回 true; 如果設置失敗或 key 不存在,返回 false

例子

//用UNIX時間戳設置一個key的過期時間

$status = $cache->expireAt($key, $time);

persist

刪除一個 key 的生存時間,使其永不過期

參數

key - 字符串

返回值

Boolean - 如果設置成功,返回 true; 如果設置失敗或 key 不存在,返回 false

例子

//刪除一個key的生存時間,使其永不過期

$status = $cache->persist($key);

lock

對 key 設置鎖標記(此鎖并不對 key 做修改限制,僅為 key 的鎖標記)

參數

key - 字符串

time - 整數,key鎖標記 的生存時間(單位:s)

返回值

Boolean - 如果設置成功,返回 true; 如果設置失敗,返回 false

例子

//對key設置鎖標記

$status = $cache->lock($key, $time);

isLock

判斷 key 是否有鎖標記

參數

key - 字符串

返回值

Boolean - 如果有鎖標記,返回 true; 如果沒有鎖標記或判斷失敗,返回 false

例子

//判斷key是否有鎖標記

$status = $cache->isLock($key);

unLock

移除 key 的鎖標記

參數

key - 字符串

返回值

Boolean - 如果移除成功,返回 true; 如果失敗,返回 false

例子

//移除key的鎖標記

$status = $cache->unLock($key);

incr

設置 key 的值按整數遞增

參數

key - 字符串

step - (可選參數) 整數,遞增步長,默認值為 1,可以為負值

返回值

Mixed - 遞增后的值,失敗返回 false,如果 key 不存在,則按 step 設置新值

例子

//設置key的值按整數遞增

$value = $cache->incr($key, $step);

incrByFloat

設置 key 的值按浮點數遞增

參數

key - 字符串

float - 浮點數,遞增步長,可以為負值

返回值

Mixed - 遞增后的值,失敗返回 false,如果 key 不存在,則按 float 設置新值

例子

//設置key的值按浮點數遞增

$value = $cache->incrByFloat($key, $float);

decr

設置 key 的值按整數遞減

參數

key - 字符串

step - (可選參數) 整數,遞減步長,默認值為 1,可以為負值

返回值

Mixed - 遞減后的值,失敗返回 false,如果 key 不存在,則按 -step 設置新值

例子

//設置key的值按整數遞減

$value = $cache->decr($key, $step);

mSet

批量設置多個 key 對應的值

參數

sets - key 和 value 組成的鍵值對數組

返回值

Boolean - 如果設置成功,返回 true; 如果設置失敗,返回 false

例子

$sets = [

'key1' => 'value1',

'key2' => 'value2',

'key3' => 'value3',

];

//批量設置多個key對應的值

$status = $cache->mSet($sets);

mSetNX

當緩存中不存在 key 時,批量設置多個 key 對應的值

參數

sets - key 和 value 組成的鍵值對數組

返回值

Boolean - 如果設置成功,返回 true; 如果設置失敗,返回 false

例子

$sets = [

'key1' => 'value1',

'key2' => 'value2',

'key3' => 'value3',

];

//當緩存中不存在key時,批量設置多個key對應的值

$status = $cache->mSetNX($sets);

mGet

獲取所有給定 key 的值

參數

keys - 多個 key 組成的數組

返回值

array - 參數 keys 中的所有 key 與對應的 value 組成的數組,如果 key 不存在或是獲取失敗,對應的 value 值為 false

例子

$keys = ['key1', 'key2', 'key3'];

//獲取所有給定key的值

$status = $cache->mGet($keys);

mHas

批量判斷 key 是否存在

參數

keys - 多個 key 組成的數組

返回值

array - 返回存在的 key 的數組,如果判斷失敗返回 false

例子

$keys = ['key1', 'key2', 'key3'];

//批量判斷key是否存在

$hasKeys = $cache->mHas($keys);

mDel

批量刪除 key

參數

keys - 多個 key 組成的數組

返回值

Boolean - 如果刪除成功,返回 true; 如果刪除失敗,返回 false

例子

$keys = ['key1', 'key2', 'key3'];

//批量刪除key

$status = $cache->mDel($keys);

默認情況說明

Cache - \linkcache\Cache

drivers

files - \linkcache\drivers\Files

memcache - \linkcache\drivers\Memcache

memcached - \linkcache\drivers\Memcached

redis - \linkcache\drivers\Redis

ssdb - \linkcache\drivers\Ssdb

apc - \linkcache\drivers\Apc

yac - \linkcache\drivers\Yac

cache

默認使用的緩存驅動: files

默認使用的備用驅動: files

memcache、redis、ssdb 等緩存驅動的默認配置均參考官方默認配置

自定義配置支持非驅動類型的key,但配置信息中需要有 driver_type 屬性,否則會拋異常

例如:

use \linkcache\Cache;

$config = [

'redis_m_db_1' => [

'driver_type' => 'redis',

'host' => '127.0.0.1',

'port' => 6380,

'database' => 1

],

'redis_m_db_2' => [

'driver_type' => 'redis',

'host' => '127.0.0.1',

'port' => 6380,

'database' => 2

],

'redis_s_db' => [

'driver_type' => 'redis',

'host' => '127.0.0.1',

'port' => 6381

]

];

Cache::setConfig($config);

//根據自定義配置實例化

$redisM1 = new Cache('redis_m_db_1');

$redisM2 = new Cache('redis_m_db_2');

$redisS0 = new Cache('redis_s_db');

drivers

所有驅動默認使用備用緩存

備用緩存優先使用實例化時構造函數傳入的配置 config 中的 fallback 定義,如果沒有定義,則使用 \linkcache\Cache::$config 中的 fallback 定義

files

默認保存路徑:優先使用上傳文件臨時目錄,未定義則使用系統臨時目錄,并在目錄下創建linkcache目錄,作為 files 驅動的默認保存路徑,代碼如下:

(ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir()) . '/linkcache'

memcache

當 memcache 連接斷開后,最大重連次數為3次,重新建立連接后,連接重試次數清零

memcached

當 memcached 連接斷開后,最大重連次數為3次,重新建立連接后,連接重試次數清零

redis

當 redis 連接斷開后,最大重連次數為3次,重新建立連接后,連接重試次數清零

ssdb

當 ssdb 連接斷開后,最大重連次數為3次,重新建立連接后,連接重試次數清零

apc

yac

可自定義緩存 key 前綴,默認無 key 前綴

開發

如果你覺得LinkCache還不錯,但又不支持你想用的緩存驅動,不妨嘗試在LinkCache新增該緩存驅動的支持。

1.增加新的緩存驅動

目前有兩種方式可以方便的開發新的緩存驅動支持

繼承 linkcache\abstracts\DriverSimple 抽象類

在 src/linkcache/drivers 目錄下創建新的緩存驅動類 Example.php

/**

* linkcache - 一個靈活高效的PHP緩存工具庫

*

* @author Dong Nan

* @copyright (c) Dong Nan http://idongnan.cn All rights reserved.

* @link http://git.oschina.net/dongnan/LinkCache

* @license BSD (http://opensource.org/licenses/BSD-3-Clause)

*/

namespace linkcache\drivers;

use linkcache\abstracts\DriverSimple;

class Example extends DriverSimple {

/**

* 構造函數

* @param array $config 配置

*/

public function __construct($config = []) {

$this->init($config);

//TODO 完善這個方法

}

/**

* 檢查驅動是否可用

* @return boolean 是否可用

*/

public function checkDriver() {

//TODO 實現這個方法

}

/**

* 設置鍵值

* @param string $key

* @param string $value

* @return boolean

*/

protected function setOne($key, $value) {

//TODO 實現這個方法

}

/**

* 獲取鍵值

* @param string $key

* @return mixed

*/

protected function getOne($key) {

//TODO 實現這個方法

}

/**

* 刪除鍵值

* @param string $key

* @return boolean

*/

protected function delOne($key) {

//TODO 實現這個方法

}

}

實現 linkcache\abstracts\DriverSimple 抽象類中的抽象方法

實現接口 linkcache\interfaces\driver\Base (Base接口是必須的,你也可以實現更多的接口:Incr,Lock,Multi)

在 src/linkcache/drivers 目錄下創建新的緩存驅動類 Example.php

/**

* linkcache - 一個靈活高效的PHP緩存工具庫

*

* @author Dong Nan

* @copyright (c) Dong Nan http://idongnan.cn All rights reserved.

* @link http://git.oschina.net/dongnan/LinkCache

* @license BSD (http://opensource.org/licenses/BSD-3-Clause)

*/

namespace linkcache\drivers;

use linkcache\interfaces\driver\Base;

class Example implements Base {

use \linkcache\traits\CacheDriver;

/**

* 構造函數

* @param array $config 配置

*/

public function __construct($config = []) {

$this->init($config);

//TODO 完善這個方法

}

/**

* 檢查驅動是否可用

* @return boolean 是否可用

*/

public function checkDriver() {

//TODO 實現這個方法

}

/**

* 設置鍵值

* @param string $key 鍵名

* @param mixed $value 鍵值

* @param int $time 過期時間,默認為-1,不設置過期時間;為0則設置為永不過期

* @return boolean 是否成功

*/

public function set($key, $value, $time = -1) {

//TODO 實現這個方法

}

/**

* 當鍵名不存在時設置鍵值

* @param string $key 鍵名

* @param mixed $value 鍵值

* @param int $time 過期時間,默認為-1,不設置過期時間;為0則設置為永不過期

* @return boolean 是否成功

*/

public function setnx($key, $value, $time = -1) {

//TODO 實現這個方法

}

/**

* 獲取鍵值

* @param string $key 鍵名

* @return mixed|false 鍵值,失敗返回false

*/

public function get($key) {

//TODO 實現這個方法

}

/**

* 刪除鍵值

* @param string $key 鍵名

* @return boolean 是否成功

*/

public function del($key) {

//TODO 實現這個方法

}

/**

* 是否存在鍵值

* @param string $key 鍵名

* @return boolean 是否存在

*/

public function has($key) {

//TODO 實現這個方法

}

/**

* 獲取生存剩余時間

* @param string $key 鍵名

* @return int|false 生存剩余時間(單位:秒) -1表示永不過期,-2表示鍵值不存在,失敗返回false

*/

public function ttl($key) {

//TODO 實現這個方法

}

/**

* 設置過期時間

* @param string $key 鍵名

* @param int $time 過期時間(單位:秒)。不大于0,則設為永不過期

* @return boolean 是否成功

*/

public function expire($key, $time) {

//TODO 實現這個方法

}

/**

* 移除指定鍵值的過期時間

* @param string $key 鍵名

* @return boolean 是否成功

*/

public function persist($key) {

//TODO 實現這個方法

}

}

實現 linkcache\interfaces\driver\Base 接口中的方法

2.測試新增的驅動

為了保證代碼的可靠性,不妨對新增的驅動做個測試吧。

我使用的是PHPUnit做的測試,版本:4.8.15

測試步驟

在 tests 目錄新增測試類 TestDriverExample.php

/**

* linkcache - 一個靈活高效的PHP緩存工具庫

*

* @author Dong Nan

* @copyright (c) Dong Nan http://idongnan.cn All rights reserved.

* @link http://git.oschina.net/dongnan/LinkCache

* @license BSD (http://opensource.org/licenses/BSD-3-Clause)

*/

namespace linkcacheTests;

/**

* TestDriverExample

*/

class TestDriverExample extends TestDriverFiles

{

protected $cacheDriver = 'example';

}

進入LinkCache項目目錄,執行測試命令

phpunit --bootstrap autoload_dev.php tests/TestDriverExample

顯示以下信息測試就通過啦~

PHPUnit 4.8.15 by Sebastian Bergmann and contributors.

....................

Time: 3.24 seconds, Memory: 8.50Mb

OK (20 tests, 74 assertions)

LICENSE

總結

以上是生活随笔為你收集整理的php高效下载文件,LinkCache的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。