V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
revotu
V2EX  ›  程序员

一道 redis 面试题,被鄙视了

  •  
  •   revotu · 2017-07-17 19:48:07 +08:00 · 4912 次点击
    这是一个创建于 2684 天前的主题,其中的信息可能已经有所发展或是发生改变。
    问题:MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中都是热点数据?
    ps.平常用 redis 作为 MySQL 的缓存,写写应用的 redis 读写接口,被问时一脸懵逼
    5 条回复    2017-07-19 09:01:57 +08:00
    lolizeppelin
        1
    lolizeppelin  
       2017-07-17 21:01:01 +08:00 via Android
    数据设置过期时间
    每次访问都会延长生存时间
    yidinghe
        2
    yidinghe  
       2017-07-17 21:30:27 +08:00 via Android   ❤️ 1
    get 的时候重设 expire 时间,另外从 3.2.1 版本开始新增了 touch 命令。
    nameldk
        3
    nameldk  
       2017-07-17 22:50:43 +08:00   ❤️ 1
    感觉这个应该先设置 Redis 的 maxmemory ,然后再 设置 maxmemory-policy 为 allkeys-lru。让 Redis 自动移除数据,保留的数据为热点数据。
    Takahashi
        4
    Takahashi  
       2017-07-18 12:40:41 +08:00
    wencan
        5
    wencan  
       2017-07-19 09:01:57 +08:00
    两种策略:
    策略一:
    假如 Mysql 数据库有 100 张表,其中 10 张表的数据是经常要访问的
    写一个计划任务,隔段时间将 10 张表的数据同步到 redis

    策略二:
    依据查询条件生成 key
    用 key 在 redis 找 value
    如果 value 找不到,则使用查询条件向 mysql 查询,结果缓存 redis,并设置过期时间

    不过这两种策略都不好控制 redis 数据为 20w
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2792 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:01 · PVG 23:01 · LAX 07:01 · JFK 10:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.