美文网首页
Redis热数据存储问题

Redis热数据存储问题

作者: 婆娑人 | 来源:发表于2017-03-30 23:17 被阅读303次

月初面试,碰到了一个比较实际的问题:

在Mysql数据库中,每天都会生成10w条数据,但是,由于内存限制,导致了Redis中只能存储最多1W条的数据信息,如何确保这1w条数据是最热门的数据?

个人解决方案:

  1. 数据存储方案:

    既然热门数据,那么就需要有排序,使用redis中的zset数据类型是很自然的想法。数据中的某个唯一字段作为zset中的value,而点击次数作为score,记为click_zset。这样就可选出最热门的数据。而数据,则直接用HashMap存储。

  2. 时效的问题:
    既然只能存1w条数据且需要是热门数据,那么,点击次数是一方面,时效性也是一方面,如何保证?可以另起一个zset,数据的字段为value,而每次点击时更新当前时间戳为其score,记为time_zset这样,就可以记录时间。在后台跑一个任务,间隔一定时间段删除两个zset中长时间没有发生点击事件的键,并删除hash数据,为产生的新数据腾出数据空间。

  3. 新数据产生怎么办?
    如果有空间,则保存到自己的hashmap,并将key存到两个zset中。
    而没有空间时,就应该在click_zset中取出点击次数排在最前第1w位后面的键,删除对应的hash数据。然后看这1w个score的值,然后把key放入两个zset中即可。

  4. 点击事件产生了怎么办?
    点击事件发生时,让其在click_zset中的score加1,然后看其在不在前1w个key中,如果在,首先要看该数据是否已经存在redis中,有的话就不用做什么工作,没有的话则需要取出第1W个点击次数最大的key10000,然后删除key10000所对应的数据,把当前key对应的数据取出存入redis中。

逻辑有点混乱,大致意思是这样,请大家指点。

相关文章

  • Redis热数据存储问题

    月初面试,碰到了一个比较实际的问题: 在Mysql数据库中,每天都会生成10w条数据,但是,由于内存限制,导致了R...

  • 项目开发Redis分页,缓存问题解决

    Redis缓存存储问题的解决 1.队列存储问题的解决 对于把从数据库中获取的数据存储存储到redis队列时,在刚开...

  • 【Redis缓存】- Redis数据结构、基本命令操作、持久化

    一、Redis 数据结构 要想使用 Redis 进行数据存储,首先需要了解 Redis 的数据结构,redis存储...

  • PHP 配置使用 Redis 储存 Session 数据

        PHP 默认使用文件存储 Session 数据,Redis 拥有极快的数据读写速度,使用 Redis 存储...

  • Java面试题集三

    一、Redis分布式存储 Redis:非关系型数据库,Key-Value形势存储,结构灵活;是内存中的数据结构存储...

  • Redis Cluster一窥

    什么是Redis Cluster Redis Cluster让多个Redis节点以集群的方式存储数据,数据会自动分...

  • Redis 客户端基本操作

    Redis 是一个内存数据库,通过 Key-Value 键值对的方式存储数据由于 Redis 的数据都存储在内存中...

  • ubuntu使用redis和mysql前的环境配置

    现在我最常用的就是redis和mysql。redis存储单一数据,进行数据的去重。mysql存储结构型数据,进行数...

  • 02-Redis内存划分

    Redis作为内存数据库,在内存中存储的主要内容是数据(键值对) 数据 数据是Redis中存储的主要内容,这部分占...

  • Redis 工具类

    Redis 工具类 实现的功能包括 redis 读取队列数据,存储和读取 hash 数据,Redis 的创建,Re...

网友评论

      本文标题:Redis热数据存储问题

      本文链接:https://www.haomeiwen.com/subject/annemttx.html