redis实战读书笔记

redis基础知识以及一些应用场景总结

基础

内存数据库

优于memcached,速度上功能上

基础数据结构:

  • String,List,Set,Hash,ZSet

redis命令手册

String

key-value

指令GET,SET,DEL

LIST

key-list

指令

  • LPUSH,RPUSH 推入列表的左端和右端 LPUSH listname item 返回值为列表长度
  • LPOP,RPOP,从左端和右端删除元素
  • LINDEX,获取列表指定位置的元素 LINDEX listname 1
  • LRANGE,获取给定范围内的所有元素 LRANGE listname 0 -1 0为开始索引,-1位结束索引

SET

key-set

SADD, SMEMBERS, SISMEMBER, SREM

HASH

key-hash table

内部也是key-value

HSET, HGET, HGETALL, HDEL

ZSET

key-zset

ZADD, ZRANGE, ZRANGEBYSCORE, ZREM

一个文章投票系统的设计

基础功能设计

根据文章的发布时间和投票数量计算一个评分,根据该评分来排序和展示文章

要求:如果有一篇文章符合有趣文章的要求(支持票至少200张),放在排行榜前100位至少一天

构造分数

$ score = up\ vote\ *C + post\ time $

常量C可以选择432

分析:一天的秒数为86400,文章达到有趣需要200票,可以利用86400/200=432来作为每个投票对得分的贡献

保存评分以及存储文章信息

使用hash结构存储文章的标题,文章的url,发布文章的用户,发布时间,得票数量等信息

关于key的设置,可以使用任意字符作为分隔符,如article:ID

使用两个zset,其中一个成员为文章id,分值为文章的发布时间,另一个成员为文章id,分值为文章的评分,使得网站可以按照发布时间和评分两种方式展示文章

防止用户重复投票,建立已投票用户名单,使用set结构,key为voted:article_id

需要用到的一些指令:

  • ZSCORE 获取文章发布时间的有序集合,判断发布时间是否在一周内
  • SADD 若可投票,将用户添加到已投票的set中,操作成功则说明用户未向该文章投过票
  • ZINCRBY 将文章的评分增加432
  • HINCRBY 对hash结构中的文章投票数量进行更新

发布获取文章

发布文章需要新增id,使用计数器,执行incr指令

1
incr keyname

可以得到计数器++之后的值

使用sadd将发布者id添加到文章投票的用户集合中(避免自己给自己投票)

集合的过期时间为一周,一周后自动释放expire

HMSET存储文章相关信息

执行zadd添加文章初始评分到保存评分的zset

执行zadd添加文章发布时间到保存时间的zset

使用HGETALL获取存储在hash中的文章结构

使用ZREVRANGE取出评分最高的文章和最新发布的文章:

  • 使用ZREVRANGE获取文章的id
  • 使用HGETALL获取详细内容

文章分组

TODO

0%