Redis 实战 巧妙的方案(1)

  • 时间:2018-12-24 22:40 作者:Cocoonshu粽子 来源:Cocoonshu粽子 阅读:471
  • 扫一扫,手机访问
摘要:情景形容对文章进行投票一篇文章取得至少200张支持票认为是一篇有趣的文章网站每天发布1000篇文章,其中50篇符合有趣的文章网站要把这50篇文章放到文章列表的前100位一天网站暂时不支持投反对票文章评分等于得到支持票数量*一个常量(432,一天的秒数/文章展现一天所需的支持票数量(200)得出)+文

情景形容

对文章进行投票

  1. 一篇文章取得至少200张支持票认为是一篇有趣的文章
  2. 网站每天发布1000篇文章,其中50篇符合有趣的文章
  3. 网站要把这50篇文章放到文章列表的前100位一天
  4. 网站暂时不支持投反对票
  5. 文章评分等于得到支持票数量*一个常量(432,一天的秒数/文章展现一天所需的支持票数量(200)得出)+文章发布时间(时间使用1970年1月1日到现在为止的秒数)
  6. 除了需要计算文章评分之外,还需要使用Redis结构存储网站上的各种信息。

方案:

  1. 两个有序集合(zset)存储文章,一个有序集合的成员是文章ID,分值为文章的发布时间;一个有序集合的成员也是文章ID,分值为文章的评分。我们既可以根据文章的评分高低展现文章,也可以根据文章发布的时间展现文章。
  2. 为防止客户对同一篇文章进行屡次投票,每篇文章记录一个已投票客户名单,为每一篇文章创立一个集合,存储每一篇文章的所有已投票客户ID;文章发布期满一周之后,客户将不能进行投票,记录文章存储投票的客户名单的集合删除。
  3. 投票流程:zscore 检查文章发布时间集合,判断文章的发布时间能否操作一周,若可投票,sadd 尝试客户增加文章投票客户集合,若增加成功,zincrby 给文章的评分添加432分,同时使用hincrby给文章投票数量进行升级。
  4. 发布并获取文章:创立文章ID,使用计数器执行incr完成,使用sadd 将文章发布者的ID增加到记录文章已投票客户集合,并使用expire 设置集合的过期时间,用hmset存储文章的相关内容,并执行两个zadd 将文章的初始评分和发布时间增加到相应的有序集合中。使用zrevrange 取评分最高和最新发布的文章,再用hgetall 取文章的详细信息,(Zset 默认从小到大排,所以用zrevrang 反转取从大到小排)
  5. 文章分组,(比方和XX标签有关的文章):群组分为两部分组成:一部分负责记录文章属于哪个群组,另一部分负责取出群组里面的文章;我们需要为每一个群组创立一个集合,同属于一个群组的文章ID放在一个集合中,为了能够根据评分对群组文章进行排序和分页,我们需要将一个群组里面所有的文章按照评分有序的存储到一个有序集合里面,zinterstore支持多集合取交集合并。就能处理评分对群组文章进行排序和分页的逻辑。
  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|软件环境】梦幻仙域游戏攻略(2023-12-19 10:02)
【系统环境|软件环境】梦幻仙域游戏攻略(2023-12-19 10:02)
【系统环境|】卡帕部落揭秘潮玩新宠,探究玩法(2023-12-14 09:45)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】如何开发搭建卡帕部落模式源码(2023-12-12 10:44)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
手机二维码手机访问领取大礼包
返回顶部