今天学到了一个redis的应用场景,就跟大家来分享下。
微博上有个点赞的功能,每一条微博都能看到是哪些人点了赞
用redis来实现这个功能的话,有下面几种方案
只用hash来实现
我先把代码写出来再解释吧:
<?php
$id = 123456;
$userKey = $id%100;
$hashKey = "w:".($id-$id%100)/100;
$redis = new Redis;
$redis->connect('127.0.0.1');
$redis->hset($hashKey, $userKey, "1,2,3,4");
当点赞的用户少于50人时可以这种方式,当大于 50 人时需要用下面的方式
用 hash 加 set 的方式
hash 里存 set 的 key, 代码如下
$id = 123456;
$userKey = $id%100;
$hashKey = "w:".($id-$id%100)/100;
$setKey = "u:".$id;
$redis = new Redis;
$redis->connect('127.0.0.1');
$redis->hset($hashKey, $userKey, $setKey);
$redis->sAdd($setKey, "1");
$redis->sAdd($setKey, "2");
$redis->sAdd($setKey, "3");
当然如果你要求点了赞的用户要按时间排序,这时候就要用到zset了
用zset 实现
代码如下:
$id = 123456;
$zsetKey = "zu:".$id;
$redis = new Redis;
$redis->connect('127.0.0.1');
$redis->zAdd($zsetKey,microtime(true),"1");
$redis->zAdd($zsetKey,microtime(true),"2");
$redis->zAdd($zsetKey,microtime(true),"3");
转载请注明:大后端 » redis 微博点赞的实现