• redis应用场景之文章投票设计思路


    公司需要做一个文章投票功能,需求为用户发布的文章可以有一周的投票时间,每个用户只可以给一篇文章投一次票,文章发布超过7天则无法投票。需要对文章进行发布时间排序和投票分值排序以及文章分组。  一开始使用关系型数据库来完成,但后来发现有大量的刷票软件,所以为了用户体验感和数据库安全起见,使用redis来优化
     
    解决思路: 可以使用redis的Set Zset Hash 三个数据类型来解决。 
    首先,需要一个Hash来存放文章的具体信息,key为文章的Id ,hashKey为文章的各个字段,value为文章的字段值
    其次,通过set无法重复的特性,来创建一个set来存放文章已经投票过的人数,set的name为文章Id,menber为投票用户的Id。 这个set发布一周之后删除。
    再者,排序可以通过两个Zset来解决, TimeZset member存放文章id,分值存放文章发布时间。  ScoreZset member存放文章id,分值存放文章投票分值
    最后: 文章分组可以创建多个分组set。  可以通过set和上面的Zset进行交集操作,找到Zset里和set member值一样的member。
     
    发布思路:  用户发布一篇文章之后,在TimeZset和ScoreZset里分别插入数据  member为文章id(通过自增得到) value为 文章发布时间或者分值,并且为该文章创建一个Set,Set的name为文章Id,并且在里面插入作者id 。同时根据文章类型 在分组set里插入文章id
     
    投票思路:当用户为一篇文章投票后,先去TimeZset里找到该文章对应的分值 看看是否超过7天。 如果没有超过7天 则再查看是否可以在文章投票Set里插入,如果无法插入说明投过票了 如果可以插入则在插入时候,更新ScoreZset
     
    分组筛选思路:  通过对应的分组Set 来和TimeZset和ScoreZset交集找出对应的文章id ,再通过文章id找到对应的hash。  可以传入参数页数进行分页
    不和别人一样,不复制只真正理解
  • 相关阅读:
    AJAX 跨域请求与 JSONP详解
    深入理解PHP的mvc框架
    读文文件md5值
    快速排序
    编写简单GUI程序
    简单的加减法
    rallway.py
    用列表构建栈结构
    模拟用户登陆注册
    密码生成
  • 原文地址:https://www.cnblogs.com/Vinlen/p/14085769.html
Copyright © 2020-2023  润新知