전제: 이 글은 주로 thinkPHP5에서 redis를 사용하는 것에 초점을 맞추고 있기 때문에 redis 설치에 대한 특별한 설명은 없습니다. 다만, redis를 설치한 후에는 반드시 php.ini 확장을 활성화해야 한다는 점을 알려드립니다. , 그렇지 않으면 여전히 Redis를 사용할 수 없습니다.
1. ThinkPHP5를 사용할 수 있는 학생들은 모두 TinkPHP5가 캐시 클래스를 캡슐화한다는 것을 알고 있습니다. 이를 사용하려면 /application/congfig.php의 캐시에 있는 캐시 구성 항목만 입력하면 됩니다(아래 참조).
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(); }
기본 유형을 사용하며 하나의 키는 하나의 값에 해당합니다.
문자열 유형 값은 최대 512MB까지 저장할 수 있습니다.
그림:
// 创建数据 $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는 키-값(키=>값) 쌍의 집합입니다. 값의 매핑 테이블인 해시는 객체를 저장하는 데 특히 적합합니다.
각 해시는 2^32 -1 키-값 쌍(40억 이상)을 저장할 수 있습니다.
Illustration:
// 创建 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는 삽입 순서로 정렬된 간단한 문자열 목록입니다. . 목록의 머리(왼쪽) 또는 꼬리(오른쪽)에 요소를 추가할 수 있습니다. 목록 유형은 여러 프로그램 간의 메시지 교환을 용이하게 하기 위해 메시징 대기열 서비스에서 일반적으로 사용됩니다. 각 목록은 최대 약 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');
Redis의 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');
Redis zset도 set과 마찬가지로 문자열 형식 요소의 모음이며 중복 멤버는 허용되지 않습니다.
차이점은 각 요소가 이중 유형 점수와 연관되어 있다는 것입니다.
Redis는 점수를 사용하여 세트의 구성원을 작은 것부터 큰 것까지 정렬합니다.
아아아아위 내용은 ThinkPHP5에서 Redis를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!