redis 微博点赞的实现

全栈 shanhuhai 5153℃

今天学到了一个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 微博点赞的实现

喜欢 (1058)or分享 (0)