php-redis扩展编译
到 PECL :: Package :: redis 下载stable版(稳定版)扩展,此处下载的是 redis-2.2.4.tgz,
tar zxvf redis-2.2.4.tgz #解压
/usr/local/php/bin/phpize #为扩展生成相应的编译配置
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
vim /usr/local/php/php.ini 在最后面添加 extension=redis.so,
然后重启PHP服务,在phpinfo() 中可以看到redis的扩展了:
php-redis的使用
<?php
//实例化Redis对象
$redis = new Redis();
//连接到redis服务器
$flag = $redis->open('localhost',6379);
//print_r($flag);
//set方法存入数据
$redis->set('user:userid:2:username','renxing');
$value = $redis->get('user:userid:2:username');
print_r($value); //输出 "renxing"
使用PHP对Redis的常见操作
插入数据
//实例化
$redis = new Redis();
//连接到服务器
$redis->connect("localhost");
//授权
//$redis->auth("renxing");
//设定一个自增的数值,类似于主键
$uid = $redis->incr("userid");
//使用hmset批量添加元素
$add_data = array(
"uid"=>$uid,
"username"=>$username,
"password"=>$password,
"age"=>$age
);
$res = $redis->hmset("user:".$uid,$add_data);
获取数据
require_once "conn.php"; //将连接信息封装到conn.php中
//获取当前自增的数值
$incr_id = $redis->get("userid");
//使用hgetall获取数据
for($i=1;$i<=$incr_id;$i++){
$data[] = $redis->hgetall("user:".$i);
}
print_r($data);
删除操作
$res = $redis->del("user:".$uid);
分页操作
在注册的时候,将所有的uid存在链表结构list中,使用rpush uid 1 存储,使用lrange uid 0 -1 获取全部数据。在删除数据的时候,使用lrem删除对应的id号。PHP中用lsize可以获取list的总数。
假设每页显示3条,那么:
第1页: lrange uid 0 2
第2页: lrange uid 3 5
第3页: lrange uid 6 8
分页实现代码:
//用户总数
$count = $redis->lsize("uid");
//每页显示多少条数据
$page_size = 3;
//当前第几页
$page_num = $_GET['page']?$_GET['page']:1;
//总页数
$page_count = ceil($count/$page_size);
//上一页
$page_up = ($page_num-1)<=1?1:($page_num-1);
//下一页
$page_down = ($page_num+1)>=$page_count?$page_count:($page_num+1);
//分析:2.假设每页显示3条,那么 —— 第1页: lrange uid 0 2 ; 第2页: lrange uid 3 5
$a = ($page_num-1)*$page_size;
$b = $a+$page_size-1;
$ids = $redis->lrange("uid",$a,$b);
//print_r($ids);
/*分页取数据*/
foreach($ids as $v){
$data[] = $redis->hgetall("user:".$v);
}
登录操作
在注册操作的时候要存储一个 username和uid的对应关系
$redis->set("username:".$username,$uid);
那么登录的时候,使用get 就可以知道这个username是否存在
$id = $redis->get("username:".$username);
然后通过这个$id 用hget得到存储在数据库中的password,和用户输入的密码进行判断
$pwd = $redis->hget("user:".$id,"password");
如果正确了,设置SESSION或者cookie。
加关注
用集合存储比较合适,sadd存储数据,smembers获取数据,sdiff获取两个用户关注的差集。
$id = $_GET['id']; //关注谁?的uid
$uid = $_SESSION['uid']; //我的uid
//$uid 关注了哪些人
$redis->sadd("user:".$uid.":guanzhu",$id);
//$id 的粉丝
$redis->sadd("user:".$id.":fensi",$uid);
得到差集,就可以推荐用户了。
显示我的关注
$my_guanzhu = $redis->smembers("user:".$_SESSION['uid'].":guanzhu");
foreach($my_guanzhu as $gz){
$row = $redis->hgetall("user:".$gz);
echo $row['uid'].'----'.$row['username'].'----'.$row['age'];
}
显示我的粉丝(谁关注了我)
$my_fensi = $redis->smembers("user:".$_SESSION['uid'].":fensi");
foreach($my_fensi as $fs){
$row2 = $redis->hgetall("user:".$fs);
echo $row2['uid'].'----'.$row2['username'].'----'.$row2['age'];
}