文章投票分组排序——《Redis实战》

图片.png
基础命令就跳过了,命令详情可以参照redis.io官网,或者Redis中文官网

Redis概要介绍:

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

图片.png

投票系统——仅支持票

目的:设计出一个随时间流逝不断递减的评分系统。同时实现按组的最热/最新。
分数计算方式:最终评分 = 文章支持票数 × 一个常量 + 文章发布时间(Unix时间)
文章存储方式:图片.png

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

实现:两个zset:一个key为文章id,score为 $\underline{发布时间}$;(最新)另一个key为文章id,score存放 $\underline{评分}$。(最热)
图片.png

功能实现

投票: 文章hash中votes的值加一 HINCRBY;记录score的zset中对应的article的score增加ZINCRBY;对应的记录投票人员的set表加入该用户。(遵循一个事务)
发布: 生成articleId,存储文章信息hmset,生成vote集合,生成score,time有序集合。
图片.png
当然,在article的hash中加入group_id来限制文章的分组个数。(这里投票时也要对score:programming进行加分)

你可能感兴趣的:(redis,缓存)