Redis实现用户热词推荐


title: Redis实现用户热词推荐 tags:

  • sortset
  • redis
  • 排序
  • 分页 categories: redis date: 2017-10-31 11:05:23

背景

前一段时间实施反馈来了新的需求 用户不希望太多的品牌选择希望做个性化的推荐

比如品牌需要根据登录用户的点击数排序

小伙伴实现了一个版本 【基于数据库】

但是如果换成使用Redis如何实现呢?

首先要做的是选择合适的数据结构

分析

如上需求需要根据不同的用户来使用不同的推荐不同的品牌

可以确定相同的品牌对于同一个用户应该出现一次【使用redis可以减少许多并发问题】

我们考虑对于系统来说 需要进行排序 因此考虑使用有序集合 即zset

我们需要先来设计对应存储的key

我们设计如下的key:

    f6car:brand:hot:123456789:qixiaobo
复制代码

通常来说redis建议使用:来做为key的切分 我们以f6car:brand:hot作为前缀

123456789为对应的idOwnOrg 祁晓波为用户名

当用户对于carzone品牌进行点击时我们执行一个异步请求为

    ZINCRBY f6car:brand:hot:123456789:qixiaobo 1 carzone
复制代码

这个不需要考虑有否初始值 比如我们连续执行多次后结果如下

    127.0.0.1:6379> ZINCRBY f6car:brand:hot:123456789:qixiaobo 1 carzone
    "1"
    127.0.0.1:6379> ZINCRBY f6car:brand:hot:123456789:qixiaobo 1 carzone
    "2"
    127.0.0.1:6379> ZINCRBY f6car:brand:hot:123456789:qixiaobo 1 carzone
    "3"
    127.0.0.1:6379> ZINCRBY f6car:brand:hot:123456789:qixiaobo 1 carzone
    "4"
    127.0.0.1:6379> ZINCRBY f6car:brand:hot:123456789:qixiaobo 1 carzone
    "5"
    127.0.0.1:6379> ZINCRBY f6car:brand:hot:123456789:qixiaobo 1 carzone
    "6"
    127.0.0.1:6379> ZINCRBY f6car:brand:hot:123456789:qixiaobo 1 carzone
    "7"

    127.0.0.1:6379> ZINCRBY f6car:brand:hot:123456789:qixiaobo 1 f6car
    "1"
    127.0.0.1:6379> ZINCRBY f6car:brand:hot:123456789:qixiaobo 1 f6car
    "2"
    127.0.0.1:6379> ZINCRBY f6car:brand:hot:123456789:qixiaobo 1 f6car
    "3"
    127.0.0.1:6379> ZINCRBY f6car:brand:hot:123456789:qixiaobo 1 f6car
    "4"
    127.0.0.1:6379> ZINCRBY f6car:brand:hot:123456789:qixiaobo 1 f6car
    "5"
复制代码

而对于mysql我们需要先查询再插入很容易造成并发问题 出现两个同样的品牌

当我们需要获取对应用户的点击情况只需要

    127.0.0.1:6379> ZREVRANGE f6car:brand:hot:123456789:qixiaobo 0 -1
    1) "carzone"
    2) "f6car"
复制代码
ZREVRANGE表示按照score从大到小排序
复制代码

其中-1 表示不限制长度【即全部数据】

当我们需要查询个数的限制时我们可以

    127.0.0.1:6379> ZREVRANGE f6car:brand:hot:123456789:qixiaobo 0 0
    1) "carzone"
复制代码

如果需要返回分数我们也可以使用

    127.0.0.1:6379> ZREVRANGE f6car:brand:hot:123456789:qixiaobo 0 0 WITHSCORES
    1) "carzone"
    2) "7"
复制代码

如此就简单快捷的完成了品牌推荐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值