根底命令就跳过了,命令详情能够参照redis.io官网,或者Redis中武官网

Redis概要介绍:

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它能够用作数据库、缓存和消息中间件。 它反对多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 汇合(sets), 有序汇合(sorted sets) 与范畴查问, bitmaps, hyperloglogs 和 天文空间(geospatial) 索引半径查问。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘长久化(persistence), 并通过 Redis哨兵(Sentinel)和主动 分区(Cluster)提供高可用性(high availability)。


投票系统——仅反对票

目标:设计出一个随工夫流逝一直递加的评分零碎。同时实现按组的最热/最新。
分数计算形式:最终评分 = 文章反对票数 × 一个常量 + 文章公布工夫(Unix工夫)
文章存储形式:

键为article:92617,示意为article表中id为92617的文章(`hmset`)

实现:两个zset:一个key为文章id,score为 $\underline{公布工夫}$;(最新)另一个key为文章id,score寄存 $\underline{评分}$。(最热)

避免用户屡次投票:用个set保留已投票用户id。

性能实现

投票: 文章hash中votes的值加一 HINCRBY;记录score的zset中对应的article的score减少ZINCRBY;对应的记录投票人员的set表退出该用户。(遵循一个事务)
公布: 生成articleId,存储文章信息hmset,生成vote汇合,生成score,time有序汇合。

获取: zrevrange/zrange获取最热/最新的article_ids汇合,通过遍历 id来hgetall获取每篇文章的所有属性键值对。

分组: 新建一个名为group的set保留所有article_id。

要使能按组获取最热/最新文章。 zinterstore命令 (比拟耗费工夫,能够设置为60s才过期)

get_group_articles()

当然,在article的hash中退出group_id来限度文章的分组个数。(这里投票时也要对score:programming进行加分)