>  기사  >  데이터 베이스  >  ThinkPHP5에서 Redis를 사용하는 방법

ThinkPHP5에서 Redis를 사용하는 방법

王林
王林앞으로
2023-06-02 18:25:311670검색

    전제: 이 글은 주로 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 캐시는 복합적인 Redis 유형을 사용하려는 경우에만 사용할 수 있음을 알 수 있습니다. 해시나 큐와 같은 데이터 유형은 불가능합니다.

    캐시 클래스/thinkphp/library/think/cache/Driver.php를 보면 핸들러 메소드가 핸들을 반환한다는 것을 알 수 있으므로 Redis를 사용하는 곳에서 이 핸들을 얻으면 모든 데이터를 사용할 수 있습니다. /thinkphp/library/think/Cache.php

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

    ThinkPHP5에서 Redis를 사용하는 방법

    redis는

    string(string)

    기본 유형을 사용하며 하나의 키는 하나의 값에 해당합니다.

    문자열 유형 값은 최대 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(해시)

    hash는 키-값(키=>값) 쌍의 집합입니다. 값의 매핑 테이블인 해시는 객체를 저장하는 데 특히 적합합니다.

    각 해시는 2^32 -1 키-값 쌍(40억 이상)을 저장할 수 있습니다.

    Illustration:

    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');

    List(list)

    list는 삽입 순서로 정렬된 간단한 문자열 목록입니다. . 목록의 머리(왼쪽) 또는 꼬리(오른쪽)에 요소를 추가할 수 있습니다. 목록 유형은 여러 프로그램 간의 메시지 교환을 용이하게 하기 위해 메시징 대기열 서비스에서 일반적으로 사용됩니다. 각 목록은 최대 약 40억 개의 요소, 즉 2^32-1개의 요소를 저장할 수 있습니다.

    그림:

    ThinkPHP5에서 Redis를 사용하는 방법

    // 向队列左侧加入元素
    $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');

    Set(세트)

    Redis의 Set은 순서가 지정되지 않은 문자열 유형의 모음입니다.

    목록과 마찬가지로 삽입 및 삭제를 수행하고 요소 존재 여부를 확인할 때 매우 효율적입니다.

    집합의 가장 큰 장점은 교차, 합집합, 차이 연산을 수행할 수 있다는 것입니다.

    세트에 포함될 수 있는 최대 요소 수는 4294967295(40억 개 이상)입니다.

    세트는 해시 테이블을 통해 구현되므로 추가, 삭제, 검색의 복잡성은 O(1)입니다.

    그림:

    ThinkPHP5에서 Redis를 사용하는 방법

    // 创建集合
    $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');

    zset (ordered set)

    Redis zset도 set과 마찬가지로 문자열 형식 요소의 모음이며 중복 멤버는 허용되지 않습니다.

    차이점은 각 요소가 이중 유형 점수와 연관되어 있다는 것입니다.

    Redis는 점수를 사용하여 세트의 구성원을 작은 것부터 큰 것까지 정렬합니다.

    아아아아

    위 내용은 ThinkPHP5에서 Redis를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제