Maison > Article > base de données > Comment utiliser Redis dans ThinkPHP5
Prémisse : Comme cet article se concentre principalement sur l'utilisation de redis dans thinkPHP5, il n'y a pas d'explication particulière sur l'installation de redis. Cependant, voici un petit rappel. Après avoir installé redis, assurez-vous d'activer l'extension php.ini. , sinon je ne peux toujours pas utiliser Redis.
1. Les étudiants qui peuvent utiliser ThinkPHP5 savent tous que TinkPHP5 encapsule la classe de cache. Il nous suffit de remplir les éléments de configuration du cache dans le cache /application/congfig.php pour l'utiliser (comme indiqué ci-dessous).
2. À partir du fichier /thinkphp/library/think/cache/driver/Redis.php, nous pouvons voir que le cache redis encapsulé ici ne peut utiliser que le type de base de chaîne de redis si vous souhaitez utiliser composite. les types de données tels que le hachage ou la file d'attente, ce n'est pas possible.
En regardant la classe de cache/thinkphp/library/think/cache/Driver.php, vous constaterez que la méthode du gestionnaire renverra le handle, donc tant que nous obtenons ce handle là où nous utilisons redis, nous pouvons utiliser toutes les données types de Redis, afin que nous puissions ajouter la méthode getHandler getHandler au /thinkphp/library/think/Cache.php
/** * 返回句柄对象,可执行其它高级方法 * * @access public * @return object */ public function handler() { return $this->handler; }
/* * 获取句柄 * @param */ public static function getHandler() { return self::init(); }
type de base, une clé correspond à une valeur.
Une valeur de type chaîne peut stocker jusqu'à 512 Mo
Illustration :
// 创建数据 $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 est un ensemble de paires clé-valeur (key=>value) c'est un champ de type chaîne ; et Une table de mappage de valeur, de hachage est particulièrement adaptée au stockage d'objets.
Chaque hachage peut stocker 2^32 -1 paires clé-valeur (plus de 4 milliards)
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');
Une liste est une simple liste de chaînes, triées par ordre d'insertion . Vous pouvez ajouter un élément en tête (à gauche) ou en queue (à droite) de la liste. Les types de liste sont couramment utilisés dans les services de file d'attente de messagerie pour faciliter l'échange de messages entre plusieurs programmes. Chaque liste peut stocker jusqu'à environ 4 milliards d'éléments, soit 2 ^ 32-1 éléments.
Illustration :
// 向队列左侧加入元素 $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 est une collection non ordonnée de type chaîne.
Comme les listes, il est très efficace pour effectuer des insertions et des suppressions et déterminer si un élément existe.
Le plus grand avantage des ensembles est qu'ils peuvent effectuer des opérations d'intersection, d'union et de différence.
Le nombre maximum d'éléments qu'un ensemble peut contenir est de 4294967295 (plus de 4 milliards).
Les ensembles sont implémentés via des tables de hachage, donc la complexité de l'ajout, de la suppression et de la recherche est O(1).
Illustration :
// 创建集合 $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, comme set, est également une collection d'éléments de type chaîne, et les membres en double ne sont pas autorisés.
La différence est que chaque élément est associé à une partition de type double.
Redis utilise des scores pour trier les membres de l'ensemble du plus petit au plus grand.
// 添加成员 $redis->zAdd('zset', 95, '小明'); $redis->zAdd('zset', 99, '小刚'); $redis->zAdd('zset', 100, '小红');// 统计成员个数 echo $redis->zCard('zset') . PHP_EOL;// 获取某个成员的分数 $score = $redis->zScore('zset', '小明'); echo $score . PHP_EOL;// 获取某个成员的排名 $rank = $redis->zRank('zset', '小明'); // 从低到高排序的名次 $revRank = $redis->zRevRank('zset', '小明'); // 从高到低排序的名次 echo $rank . PHP_EOL; echo $revRank . PHP_EOL;// 给指定成员增加分数 $redis->zIncrBy('zset', 1, '小明'); // 给小明加一分// 返回指定排名范围的成员 $range = $redis->zRange('zset', 0, 9, true); // 返回分数从低到高排序的前10名及分数 $revRange = $redis-> zRevRange('zset', 0, 9, true); // 返回分数从高到低排序的前10名及分数 var_dump($range); var_dump($revRange);// 删除成员 $redis->zRem('zet', '小明');// 返回指定分数范围的成员 $rangeByScore = $redis->zRangeByScore('zet', 98, 100); // 返回指定分数范围内从低到高排序的成员 $revRangeByScore = $redis->zRevRangeByScore('zet', 98, 100); // 返回指定分数范围内从高到低排序的成员 var_dump($rangeByScore); var_dump($revRangeByScore);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!