ホームページ  >  記事  >  データベース  >  ThinkPHP5 で Redis を使用する方法

ThinkPHP5 で Redis を使用する方法

王林
王林転載
2023-06-02 18:25:311668ブラウズ

    前提: この記事は主に thinkPHP5 での redis の使用に焦点を当てているため、redis のインストールについては特別な説明はありませんが、redis をインストールした後、少し注意してください。後で必ず php.ini 拡張機能を有効にしてください。そうしないと、redis を使用できなくなります。

    Configuration

    1. ThinkPHP5 を使用できる学生は、TinkPHP5 がキャッシュ クラスをカプセル化していることを知っているので、/application/congfig.php のキャッシュにキャッシュ設定項目を入力するだけです。すぐに使用できます (以下を参照)。

    ThinkPHP5 で Redis を使用する方法

    2. /thinkphp/library/think/cache/driver/Redis.php ファイルから、ここでカプセル化された Redis キャッシュは文字列基本タイプのみを使用できることがわかります。ハッシュやキューなどの複合データ型を使用する場合、これは機能しません。

    キャッシュ クラス/thinkphp/library/think/cache/Driver.php を見ると、ハンドラー メソッドがハンドルを返すことがわかります。そのため、取得できる限り、Redis のすべてのデータ型を使用できます。このハンドルは redis を使用するため、 gethandle メソッド getHandler

    	/**
         * 返回句柄对象,可执行其它高级方法
         *
         * @access public
         * @return object
         */
        public function handler()
        {
            return $this->handler;
        }
    	/*
        *  获取句柄
        * @param  
        */
        public static function getHandler()
        {
            return self::init();
        }

    ThinkPHP5 で Redis を使用する方法

    redis use

    string(string)# を /thinkphp/library に追加できます。 /think/Cache.php

    ##基本的なタイプで、1 つのキーが 1 つの値に対応します。

    文字列型の値は最大 512MB まで保存できます

    図:

    ThinkPHP5 で Redis を使用する方法

    // 创建数据
    $redis->set('key', 'value');// 获取数据
    $value = $redis->get('key');
    echo $value . PHP_EOL;// 修改数据,与创建数据一致,即覆盖数据
    $redis->set('key', 'value2');
    echo $redis->get('key') . PHP_EOL;// 追加数据
    $redis->append('key', '_value2');
    echo $redis->get('key') . PHP_EOL;// 删除数据
    $redis->del('key');
    // $redis->delete('key');
    var_dump($redis->get('key'));// 创建数据,带有效期
    $redis->set('timeout_key', 'timeout_value', 5);
    $redis->setex('timeout_key', 5, 'timeout_value');
    // 获取数据的有效期
    echo $redis->ttl('timeout_key') . PHP_EOL;// 判断是否已经写入,未写入则写入
    $redis->set('unique_key', 'unique_value');
    if (!$redis->setnx('unique_key', 'unique_value')) {
    	echo $redis->get('unique_key') . PHP_EOL;
    }// 批量创建
    $multi = ['key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3'];
    $redis->mset($multi);// 批量获取
    $result = $redis->mget(array_keys($multi));
    var_dump($result);

    Hash(ハッシュ)

    ハッシュキーと値 (key=>value) のペアのコレクションであり、文字列型のフィールドと値のマッピング テーブルです。ハッシュはオブジェクトの格納に特に適しています。

    各ハッシュには 2^32 -1 のキーと値のペア (40 億以上) を格納できます。

    図:

    ThinkPHP5 で Redis を使用する方法

    // 创建 hash 表
    // 向名字叫 'hash' 的 hash表 中添加元素 ['key1' => 'val1']
    $redis->hSet('hash', 'key1', 'val1');// 获取 hash表 中键名是 key1 的值
    echo $redis->hGet('hash', 'key1') . PHP_EOL;// 获取 hash表的元素个数
    echo $redis->hLen('hash') . PHP_EOL;// 获取 hash表 中所有的键
    $keys = $redis->hKeys('hash');
    var_dump($keys);// 获取 hash表 中所有的值
    $vals = $redis->hVals('hash');
    var_dump($vals);// 获取 hash表 中所有的键值对
    // 不推荐使用这种方法获取全部数据,会导致服务器执行超时,推荐方法后边会详细介绍
    // $all = $redis->hGetAll('hash');
    // var_dump($all);// 判断 hash 表中是否存在键名是 key2 的元素
    $bool = $redis->hExists('hash', 'key2');
    echo $bool ? '存在' : '不存在' . PHP_EOL;// 批量添加元素
    $redis->hMset('hash', ['key2' => 'val2', 'key3' => 'val3']);// 批量获取元素
    $hashes = $redis->hMGet('hash', ['key1', 'key2', 'key3']);
    var_dump($hashes);// 删除 hash表
    $redis->del('hash');

    リスト( リスト)

    #リストは、挿入順に並べ替えられた文字列の単純なリストです。リストの先頭 (左) または末尾 (右) に要素を追加できます。リスト タイプは、複数のプログラム間のメッセージ交換を容易にするためにメッセージング キュー サービスでよく使用されます。各リストには、最大約 40 億個の要素、つまり 2^32-1 個の要素を保存できます。

    図:

    // 向队列左侧加入元素
    $redis->lPush('lists', 'X');
    $redis->lPush('lists', 'X');
    // 向队列右侧加入元素
    $redis->rPush('lists', 'Z');// 将索引为1的数据修改为 Y
    $redis->lSet('lists', 1, 'Y');// 获取 list 长度
    $length = $redis->lLen('lists');
    echo $length;// 遍历 list
    $lists = $redis->lRange('lists', 0, $length - 1);
    dump($lists);// 从左侧出队一个元素(获取并删除)
    $x = $redis->lPop('lists');
    echo $x . PHP_EOL;
    // 从右侧出队一个元素(获取并删除)
    $z = $redis->rPop('lists');
    echo $z . PHP_EOL;// 获取左侧第一个元素
    $y = $redis->lIndex('lists', 0);
    echo $y . PHP_EOL;// 删除队列
    $redis->del('lists');
    ThinkPHP5 で Redis を使用する方法Set (セット)

    Redis の Set は、文字列型の順序なしのコレクションです。

    リストと同様に、挿入と削除を実行し、要素が存在するかどうかを判断する際の効率は非常に高くなります。

    セットの最大の利点は、交差、和集合、および差分の演算を実行できることです。

    Set に含めることができる要素の最大数は 4294967295 (40 億以上) です。

    セットはハッシュ テーブルを通じて実装されるため、追加、削除、検索の複雑さは O(1) です。

    図:

    // 创建集合
    $redis->sAdd('sets', 'value1', 'value2');
    // 以数组形式创建集合
    $redis->sAddArray('sets2', ['value1', 'value2', 'value3']);// 取两个集合的并集
    $union = $redis->sUnion('sets', 'sets2');
    // 取两个集合的差集
    $diff = $redis->sDiff('sets', 'sets2');
    // 取两个集合的交集
    $inter = $redis->sInter('sets', 'sets2');var_dump($union, $diff, $inter);// 获取集合数量
    $card = $redis->sCard('sets');
    echo $card . PHP_EOL;// 获取集合中全部元素
    // 不推荐使用这种方法获取全部数据,会导致服务器执行超时,推荐方法后边会详细介绍
    $sets = $redis->sMembers('sets');
    var_dump($sets);// 判断元素是否是集合中的成员
    $isMember = $redis->sIsMember('sets', 'value2');
    var_dump($isMember);// 删除集合中的元素
    $redis->sRem('sets', 'value2');
    var_dump($redis->sMembers('sets'));// 随机获取一个元素
    echo $redis->sRandMember('sets');// 随机获取一个元素并从集合中删除
    echo $redis->sPop('sets');// 删除集合
    $redis->del('sets', 'sets2');
    ThinkPHP5 で Redis を使用する方法zset (順序付きセット)

    Redis zset も set と同様に文字列型要素のコレクションであり、重複したメンバーは許可されません。

    違いは、各要素が double 型のスコアに関連付けられていることです。

    Redis はスコアを使用して、セットのメンバーを小さいものから大きいものへと並べ替えます。

    rree

    以上がThinkPHP5 で Redis を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。