点赞功能程序设计

不太推荐LS用HASH来存储点赞的数据. 因为没办法进行排序(如果需要的话. 我想一定需要)

目前 我们是这样处理的.

可以使用ZSET有序集合进行存储. 理论上说一个ZSET中, 10W以内的数量并无任何鸭梨. 也就是说一条微博点赞的人数再10W以内(这是不可能的).

$redis->ZADD("t:$tid:liked", time(), $uid); //$tid 为你的微博ID, $uid 为你的点赞人的UID

//取出点赞的人(支持按照点赞时间来排序的哦:)).. 按照LSD的说的 HASH取出来的值没有任何顺序的.
$uids = $redis->ZREVRANGE("t:$tid:liked", $offset, $max, TRUE); //倒序取值
$uids = $redis->ZRANGE("t:$tid:liked", $offset, $max, TRUE); //顺序取值

//$offset 和 $max 这样来算
$pagesize = 20;
$offset = ($page > 1) ? ($page - 1) * $pagesize : 0;
$max = ($page * $pagesize) - 1;

//一次性取出所有的这样取.
$total = $redis->ZCARD("t:$tid:liked");
$uids = $redis->ZREVANGE("t:$tid:liked", 0, $total - 1, TRUE);

//拿到的$uids 是一个array 哦..

//判断一个用户是否点赞了这一来哦
$redis->ZSCORE("t:$tid:liked", $uid);
//取消赞这样来
$redis->ZREM("t:$tid:liked", $uid);

//批量取消某短时间内的点赞这样操作
$redis->ZREMRANGEBYSCORE("t:$tid:liked", $start_timestamp, $end_timestamp);

//诸如此类的操作, 要比HASH强很多.

恩再PS一下!!!

如果需要用到NOSQL这样的数据库来存储类似微博的数据的话, 可以这样存储:).

$pipe = $redis->MULTI(Redis::PIPELINE);
$pipe->SET("t:$tid", json_encode($data)) //json这种格式存储貌似有点废物. 如果能想到更好的格式的话,不要用JSON, 因为JSON太大了.. 比如MSGPACK这个个是就比JSON要好很多
     ->ZADD("t:scores", time(), $tid);
$pipe->EXEC();

//PIPE 这样的操作赞爆了. 如果你的REDIS支持事务的话, PIPE就不是一个原子性的操作了

//取出数据的话就很好取出了!!
$tid = $reids->ZREVRANGE("t:scores", 0, 100);
$pipe = $redis->MULTI(Redis::PIPELINE);
foreach($tid as $key=> $value){
    $pipe->GET("t:$value");
}
$list = $pipe->EXEC();

//$list就是你的数据啦

再再PS一下, 微博评论也是类似的存储方法. 只是需要约定$redis KEYS的名称. 比如:

c:<评论ID> 怎么和微博数据关联起来可以这样:

t:$tid:comments:scores (ZSET timestmap 评论ID);

这样取数据的时候就用PIPELINE方便很多了.

最后啰嗦一句, NOSQL这种数据库的 KEY 一定要设置好.

时间: 2024-11-08 05:51:45

点赞功能程序设计的相关文章

点评点赞功能的基本实现------个人观点

对于做这个功能的时候,我认为很简单,结果错误百出,我认为是notifyDataSetChanged()方法调用失败,结果打印日志,发现该方法被调用了. 然后我很费解,既然已经调用,为何不刷新出新的数据呢????最后的最后,当然是问度娘,度娘她告诉我,关于点赞功能的实现,她知道的其实并 不多,而点赞功能的效果动画确很精通.然后我尝试了几种方法: 1:在onResume()方法中重新绑定adapter,并调用notifyDataSetChanged()方法,结果连个鸡肋都不如,真是浪费感情. 2:然

JavaScript实现评论点赞功能

通过分析评论功能的逻辑关系,学会如何使用JavaScript实现评论.回复.点赞等各种功能 1.学会JavaScript处理日期和时间. 2.掌握Dom操作中的添加/删除子节点方法. 3.使用setTimeout设置定时器. 4.使用clearTimeout清除定时器以及事件代理的运用. 效果图: 1)实现删除分享内容功能 利用事件代理实现点击关闭按钮删除分享内容. 删除事件: 利用事件代理功能,在父元素节点上添加事件,以减少代码量和系统运行负荷. 事件代理的时候,使用事件对象中的srcElem

点赞功能

今天琢磨着搞了个点赞功能,因为考虑到个人网站没有根基,所以如果必须要登录才可以点赞的话那绝大部分人肯定转头就走. 如果不登录就可以点赞的话,就要动脑筋去防止刷赞了,我也去看过一些别的网站搞的投票功能,纯粹是以IP来控制,水的不能再水. 表设计如下: 用户ID  IP  浏览器信息  加上cookie  html5缓存  一共5重关卡  任何一关过不去  都点不了赞 流程从点赞的动作开始: 首先js写个变量isLike标志是否点过赞   初始化为否 点击赞图标后: $('body').on("cl

点赞功能实现 $(tag).css(&#39;属性&#39;, &#39;样式&#39;)

1. 创建标签 document.createElement() 2.$(tag).css('属性', 样式) 赋予标签属性样式 3.设置定时器 改变位置 大小 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .container{ padding:

微信点赞功能测试用例

测试用例: ①点赞和取消点赞功能 ②点赞是否按时间顺序显示 ③点赞是否正确显示昵称或备注 ④点赞之后是否还能评论 ⑤弱网络的情况下点赞能否实时更新 ⑥点赞时有短信或电话进来,能否显示点赞情况 ⑦点赞的人是否在可见分组里 ⑧点赞之后共同好友的点赞和评论是否会提醒你 原文地址:https://www.cnblogs.com/shallwebegin/p/11621991.html

全栈项目|小书架|服务器端-NodeJS+Koa2 实现点赞功能

效果图 接口分析 通过上面的效果图可以看出,点赞入口主要是在书籍的详情页面. 而书籍详情页面,有以下几个功能是和点赞有关的: 获取点赞状态 点赞 取消点赞 所以项目中理论上与点赞相关的接口就以上三个. 点赞 model 的设计 既然明确了接口数量,那么下一步就是设计接口对应的model,通过model生成表格like,里面存放点赞数据. 那么需要存在哪些点赞数据呢? 这里简单分析后,记录一条点赞信息只需要保存以下的信息即可: 点赞 id 书籍 id 用户 id created_at delete

Drupal7 实现like(点赞)功能

尝试了好几个模块做下总结: 1. Like Dislike Buttons 好处:代码实现简单,一看就懂,开启后无需任何配置,自动在node底部显示like和unlike的小手.而且模版改起来也容易. 坏处:可配置项太少,就一个Vote denied message的文本框,就是不允许点like的自定义内容. 2. Like & Dislike 好处:可以针对哪个content type和comment生效 坏处:模版图片少,上面说可以对users类型启用该功能,但是没找到配置项. 3. lik

IOS开发-项目实战-点赞功能的实现

实现思路: 1.每一条新闻就是一个cell,在cell上添加点赞按钮. 2.让cell的控制器成为自定义cell的代理,将点击了哪一个cell放在代理方法中传出去. 3.并将这条新闻的ID和当前用户的ID上传服务器. 4.此时要考虑每个用户只能点击一次,且当用户再次点击的时候,取消点赞(定义一个BOOL变量存储用户的点击次数).则将上传的数据取出来,做判断,如果取出来有数据,说明用户点击过,没有数据那就存储到网络.再次点击,将请求下来的数据,即BOOL变量存储为NO,即取消点赞. 5.到这里就要

解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计

ERP系统的单据具备标准的功能,这里的单据可翻译为Bill,Document,Entry,具备相似的工具条操作界面.通过设计可复用的基类,子类只需要继承基类窗体即可完成单据功能的程序设计.先看标准的销售合同单据界面: 本篇通过销售合同单据功能,依次讲解编程要点,供参考. 1 新增 Insert 窗体有二种状态,一种是编辑状态,别一种是数据浏览状态,区别在于编辑状态的窗体数据被修改(dirty),在窗体关闭时需要保存数据.点击工具条的新增(Insert)按钮,窗体进入编辑状态.新增状态需要对窗体所