Wetts's blog

Stay Hungry, Stay Foolish.

0%

Redis-使用场景

圈子列表

可以运用Redis的List数据类型来保存最新圈子列表。

  • 在发布新的圈子的时候,我们可以进行如下操作:

    1
    LPUSH moments <圈子的json串>
  • 如果我们需要得到最新的20条圈子:

    1
    LRANGE moments 0 20

    该操作可以获取该List的index为0到index为20的数据。

如果Redis缓存中不够20条圈子,还需要去数据库中读取,和Redis数据结合返回。

  • 如果圈子列表缓存了过多数据:

    1
    LTRIM moments 0 5000

    该操作保留该List的index为0到index为5000的数据,其余数据删除。

  • 如果删除了一条圈子:
    Redis里面没有提供删除List中index为某一个值的方法。

但是我们可以通过如下方式删除:

1
LREM moments 0 <删除圈子的json串>

该操作是在圈子List中,从index为0的位置开始匹配,如果两个值相等,则删除该条。

积分排行榜

可以用Redis的有序set来实现这个功能。

  • 获取积分的时候:

    1
    ZADD rankingList <score> <username>
  • 得到排行榜前100名:

    1
    ZREVRANGE rankingList 0 99
  • 用户在排行榜中的位置:

    1
    ZREVRANK rankingList <username>

统计某日某篇文件的访问用户

  • 添加文章的访问用户:

    1
    SADD page:<date>:<page_id> <user_id>
  • 获取访问用户总数量:

    1
    SCARD page:<date>:<page_id>
  • 查询某用户是否访问该文章:

    1
    SISMEMBER page:<date>:<page_id> <user_id>

    如果成员元素是集合的成员,返回 1 。 如果成员元素不是集合的成员,或 key 不存在,返回 0 。