接着上一篇,上次在mac本地安装了redis,其实还没完成,接下来是安装redis 的php扩展:
1.1 安装phpize
yum install php-devel
1.2 下载扩展源码包,直接用wget
#wget下载github上的文件
wget https://github.com/nicolasff/phpredis/archive/master.zip
1.3 如果没装unzip,需要先安装unzip
yum install unzip
1.4 解压master.zip
unzip master.zip
1.5 解压目录为phpredis-master,进入该文件夹,开始编译php扩展
phpize
1.6 配置环境
./configure
1.7 编译
make && make install
编译完成后显示:
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/lib64/php/modules/
进入/usr/lib64/php/modules/文件夹,发现redis.so的扩展
1.8 修改/etc/php.ini,添加下面的扩展
extension=redis.so
1.9 重启服务器
service httpd restart
最后查看phpinfo,显示有redis,代表安装成功;
接下来是在tp5项目中->测试redis:
tp5已经给我封装好了redis类,位置在think/cache/driver下,我们只需要在配置文件修改:
'cache' => [
// 驱动方式
'type' => 'redis',
'host' => '127.0.0.1', // 指定redis的地址
],
然后在需要的地方就可以用啦:
<?php
namespace app\mobile\controller;
use think\Db;
use think\Page;
use app\common\logic\ActivityLogic;
use think\cache\driver\Redis;
class Activity extends MobileBase {
public function test(){
$redis = new Redis();
$redis->set('adamlu','joy');
echo ($redis->get('adamlu'));exit;
}
}
访问该地址,页面出现:joy,就代表成功了,可以通过下图判断是否真的写入成功,好了,到这里redis就入门了,接着就是如何在需要的时候使用它啦!
下面是redis的基本操作,我简单的整理在一个方法里:
//测试redis-成功
public function redis()
{
// $redis = new Redis();//这里是使用的是tp自带的Redis
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('password'); // Redis 没设置密码则不需要这行代码
// ----------------------string使用------------------
$redis->set('myname', 'joy');
echo ($redis->get('adamlu'));exit;
$redis->del('myname');# 返回 TRUE(1),删除
var_dump($redis->get('myname')); # 返回 bool(false)
// ------------------列表使用-------------------------
$redis->lPush('lists', 'X'); // 向队列左侧加入元素
$redis->lPush('lists', 'X');
$redis->rPush('lists', 'Z');// 向队列右侧加入元素
$redis->lSet('lists', 1, 'Y'); // 将索引为1的数据修改为 Y
$length = $redis->lLen('lists'); // 获取 list 长度
echo $length;exit;
$lists = $redis->lRange('lists', 0, $length - 1);//遍历 list
dump($lists);exit;
$x = $redis->lPop('lists');//从左侧出队一个元素(获取并删除)
echo $x . PHP_EOL;
$z = $redis->rPop('lists');//从右侧出队一个元素(获取并删除)
echo $z . PHP_EOL;
$y = $redis->lGet('lists', 0);//获取左侧第一个元素
echo $y . PHP_EOL;
$redis->del('lists');// 删除队列
// ------------------集合使用-------------------------
$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);exit;
$card = $redis->sCard('sets');//获取集合数量
echo $card . PHP_EOL;exit;
$sets = $redis->sMembers('sets');//获取集合中全部元素--不推荐使用,推荐方法后边会详细介绍
var_dump($sets);exit;
$isMember = $redis->sIsMember('sets', 'value2');//判断元素是否是集合中的成员
var_dump($isMember);exit;
$redis->sRem('sets', 'value2');//删除集合中的元素
var_dump($redis->sMembers('sets'));exit;
echo $redis->sRandMember('sets2');exit;//随机获取一个元素
echo $redis->sPop('sets2');exit;//随机获取一个元素并从集合中删除
$redis->del('sets', 'sets2');exit;//删除集合
// ------------------有序集合使用-------------------------
$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;exit;
$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);exit;
$redis->zRem('zet', '小明');// 删除成员
// 返回指定分数范围的成员
$rangeByScore = $redis->zRangeByScore('zet', 98, 100); // 返回指定分数范围内从低到高排序的成员
$revRangeByScore = $redis->zRevRangeByScore('zet', 98, 100); // 返回指定分数范围内从高到低排序的成员
var_dump($rangeByScore);
var_dump($revRangeByScore);
// ------------------hash使用-------------------------
// 向名字叫 'hash' 的 hash表 中添加元素 ['key1' => 'val1']
$redis->hSet('hash', 'key1', 'val1'); // 创建 hash 表
echo $redis->hGet('hash', 'key1') . PHP_EOL; // 获取 hash表 中键名是 key1 的值
echo $redis->hLen('hash') . PHP_EOL; // 获取 hash表的元素个数
$keys = $redis->hKeys('hash'); // 获取 hash表 中所有的键
var_dump($keys);
// 获取 hash表 中所有的值
$vals = $redis->hVals('hash');
var_dump($vals);exit;
$all = $redis->hGetAll('hash');// 获取 hash表 中所有的键值对 不推荐使用,推荐方法后边会详细介绍
var_dump($all);exit;
$bool = $redis->hExists('hash', 'key2');// 判断 hash 表中是否存在键名是 key2 的元素
echo $bool ? '存在' : '不存在' . PHP_EOL;exit;
$redis->hMset('hash', ['key2' => 'val2', 'key3' => 'val3']);// 批量添加元素
$hashes = $redis->hMGet('hash', ['key1', 'key2', 'key3']);// 批量获取元素
var_dump($hashes);exit;
$redis->delete('hash');// 删除 hash表
}