redis笔记09-PHP操作Redis

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'];
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮尘笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值