前提:因为本文主要围绕着在thinkPHP5中使用redis的,所以关于redis的安装就不特意说明了,不过在这稍微提醒一下,安装完redis后务必要开启php.ini扩展,否则还是无法使用redis的。
配置
1.会用ThinkPHP5的同学们都知道,TinkPHP5中封装了缓存类,我们只需要在/application/congfig.php中的cache中填入缓存配置项就可以使用了(如下所示)。

2.从/thinkphp/library/think/cache/driver/Redis.php文件可知这里封装的redis缓存只能使用redis的string基本类型,如果要使用哈希或队列等复合数据类型的话是不行的。
看缓存类/thinkphp/library/think/cache/Driver.php会发现handler方法会返回句柄,所以我们只要在我们使用redis的地方获得这个句柄就可以使用redis的所有数据类型了,因此可以在/thinkphp/library/think/Cache.php中添加获取句柄方法getHandler
1 2 3 4 5 6 7 8 9 10 |
public function handler()
{
return $this ->handler;
}
|
登录后复制
1 2 3 4 5 6 7 8 | public static function getHandler()
{
return self::init();
}
|
登录后复制

redis使用
string(字符串)
基本的类型,一个 key 对应一个 value。
一个string 类型的值最大能存储 512MB
图解:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $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');
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 是一个键值(key=>value)对集合;是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
每个 hash 可以存储 2^32 -1 键值对(40多亿)
图解 :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $redis ->hSet('hash', 'key1', 'val1');
echo $redis ->hGet('hash', 'key1') . PHP_EOL;
echo $redis ->hLen('hash') . PHP_EOL;
$keys = $redis ->hKeys('hash');
var_dump( $keys );
$vals = $redis ->hVals('hash');
var_dump( $vals );
$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 );
$redis ->del('hash');
|
登录后复制
List(列表)
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。List types are commonly used in messaging queue services to facilitate message exchange between multiple programs.。每个列表最大可以存储约40亿个元素,即2^32-1个元素。
图解 :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $redis ->lPush('lists', 'X');
$redis ->lPush('lists', 'X');
$redis ->rPush('lists', 'Z');
$redis ->lSet('lists', 1, 'Y');
$length = $redis ->lLen('lists');
echo $length ;
$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是string类型的无序集合。
和列表一样,在执行插入和删除和判断是否存在某元素时,效率是很高的。
集合最大的优势在于可以进行交集并集差集操作。
Set可包含的最大元素数量是4294967295(40多亿)。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
图解 :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $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(有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $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);
$revRange = $redis -> zRevRange('zset', 0, 9, true);
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 );
|
登录后复制
以上是ThinkPHP5中怎么使用redis的详细内容。更多信息请关注PHP中文网其他相关文章!