首頁 > 軟體

寶塔中ThinkPHP框架使用Redis的一系列教學

2023-03-27 06:01:42

Redis是一種常用的非關係型資料庫,主要用作資料快取,資料儲存形式為key-value,鍵值相互對映。它的資料儲存跟MySQL不同,它資料儲存在記憶體之中,所以資料讀取相對而言很快,用來做高並行非常不錯。

關於redis的安裝,在伺服器或者虛擬機器器上安裝寶塔面板安裝redis,這樣很簡單就可以使用redis了,記得安裝redis的時候不僅要安裝redis軟體,還要進入專案使用的php版本中安裝redis擴充套件,然後開啟redis軟體

1.首先在寶塔的安裝面板,找到redis,點選安裝。

2.安裝完redis後,點選設定, 設定個密碼

3.php環境安裝redis擴充套件

一定要在網站使用的php版本中,安裝redis擴充套件。

4.建立類處理檔案

ThinkPHP根目錄的extend資料夾中建立檔案 RedisPackage.php,內容如下:

<?php
 
class RedisPackage
{
    protected static $handler = null;
    protected $options = [
        'host' => '127.0.0.1',
        'port' => 6379,
        'password' => '這是你是之前設定的redis密碼',
        'select' => 0,
        'timeout' => 20,//關閉時間 0:代表不關閉
        'expire' => 0,
        'persistent' => false,
        'prefix' => '',
    ];
 
    public function __construct($options = [])
    {
        if (!extension_loaded('redis')) {   //判斷是否有擴充套件(如果你的apache沒reids擴充套件就會丟擲這個異常)
            throw new BadFunctionCallException('not support: redis');
        }
        if (!empty($options)) {
            $this->options = array_merge($this->options, $options);
        }
        $func = $this->options['persistent'] ? 'pconnect' : 'connect';     //判斷是否長連線
        self::$handler = new Redis;
        self::$handler->$func($this->options['host'], $this->options['port'], $this->options['timeout']);
 
        if ('' != $this->options['password']) {
            self::$handler->auth($this->options['password']);
        }
 
        if (0 != $this->options['select']) {
            self::$handler->select($this->options['select']);
        }
    }
 
    /**
     * 寫入快取
     * @param string $key 鍵名
     * @param string $value 鍵值
     * @param int $exprie 過期時間 0:永不過期
     * @return bool
     */
    public static function set($key, $value, $exprie = 0)
    {
        if ($exprie == 0) {
            $set = self::$handler->set($key, $value);
        } else {
            $set = self::$handler->setex($key, $exprie, $value);
        }
        return $set;
    }
 
    /**
     * 讀取快取
     * @param string $key 鍵值
     * @return mixed
     */
    public static function get($key)
    {
        $fun = is_array($key) ? 'Mget' : 'get';
        return self::$handler->{$fun}($key);
    }
 
    /**
     * 獲取值長度
     * @param string $key
     * @return int
     */
    public static function lLen($key)
    {
        return self::$handler->lLen($key);
    }
 
    /**
     * 將一個或多個值插入到列表頭部
     * @param $key
     * @param $value
     * @return int
     */
    public static function LPush($key, $value, $value2 = null, $valueN = null)
    {
        return self::$handler->lPush($key, $value, $value2, $valueN);
    }
 
    /**
     * 移出並獲取列表的第一個元素
     * @param string $key
     * @return string
     */
    public static function lPop($key)
    {
        return self::$handler->lPop($key);
    }
 
 
}

類RedisPackage中的定義陣列$options,有個健名是password,這裡填入上面設定的redis密碼

5.在要使用Redis的Controller中,引入檔案

import('RedisPackage', EXTEND_PATH);

6.簡單使用Redis

#設定
RedisPackage::set('要設定的key','這是value');
 
#獲取
$key = RedisPackage::get('已設定的key'));

7.Redis擴充套件

連線redis

$redis = new Redis(); 
//建立一個redis物件,下面可以直接使用$redis存取到redis物件

$redis->connect('127.0.0.1', 6379);
//連線redis資料庫,127.0.0.1表示本地(如果線上redis和php目錄在同一個IP,則一樣使用127.0.0.1),6379為redis埠號,若線上沒有修改則預設是這個

驗證連線是否成功(可寫可不寫,僅做驗證)

$redis ->set( "test" , "redis 連線成功");
echo $redis ->get( "test");

exists() 判斷鍵是否存在,引數為鍵名

$redis->exists('active_worker_list')

set()

set() 儲存鍵值,第一個引數為自己定義的鍵名,第二個引數為要儲存的資料,通過該方法可以將資料命名之後存入快取

$result = $redis->set('active_worker_list',$r)

很多時候我們儲存的是陣列型別的資料,但redis不支援讀寫陣列,所以我們需要將陣列轉成json格式

$result = $redis->set('active_worker_list',json_encode($r,true))

get()

get() 獲取鍵值,引數為鍵名,通過該方法可以獲取到對應鍵中儲存的值

$result = $redis->get('active_worker_list')

同set一樣,很多時候我們需要的是陣列型別的資料,所以我們需要將json格式的資料轉成陣列

$result = json_decode($redis->get('active_worker_list'),true);

del()

有時候因為一些原因(有可能只是單純賦值的時候賦錯了......)我們需要刪除鍵值,所以我們要用到del(),引數為鍵名

$redis->del('active_worker_list');

到此這篇關於寶塔中ThinkPHP框架使用Redis的一系列教學的文章就介紹到這了,更多相關寶塔中ThinkPHP使用Redis的教學內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com