zoukankan      html  css  js  c++  java
  • redis缓存分页思路

    传统分页
    一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点。
    如缓存不能及时更新,一旦数据有变化,所有的之前的分页缓存都失效了。
    比如像微博这样的场景,微博下面现在有一个顶次数的排序。这个用传统的分页方式很难应对。

     
    Redis缓存分页
    1.数据以ID为key缓存到Redis里;
    2.把数据ID和排序打分存到Redis的skip list,即zset里;
    3.当查找数据时,先从Redis里的skip list取出对应的分页数据,得到ID列表。
    4.用multi get从redis上一次性把ID列表里的所有数据都取出来。如果有缺少某些ID的数据,再从数据库里查找,再一块返回给用户,并把查出来的数据按ID缓存到Redis里。


    在最后一步,可以有一些小技巧:

    比如在缺少一些ID数据的情况下,先直接返回给用户,然后前端再用ajax请求缺少的ID的数据,再动态刷新。

    还有一些可能用Lua脚本合并操作的优化,不过考虑到Lua脚本比较慢,可能要仔细测试。
    如果是利用Lua脚本的话,可以在一个请求里完成下面的操作:
    查找某页的所有文章,返回已缓存的文章的ID及内容,还有不在缓存里的文章的ID列表。
    其它的一些东东:
    Lua是支持LRU模式的,即像Memcached一样工作。但是貌似没有见到有人这样用,很是奇怪。
    可能是用redis早就准备好把redis做存储了,也不担心内存的容量问题。

  • 相关阅读:
    记录贝叶斯深度学习
    tensorflow2.0 新特性 + kaggle练习
    Caffe学习记录(十三) OCNet分割网络学习
    Caffe学习记录(十二) ICNet分割网络学习二
    Caffe学习记录(十一) ICNet分割网络学习
    Caffe学习记录(十) SegNet等分割网络学习
    关于完美拖拽的问题三
    关于完美拖拽的问题二
    关于完美拖拽的问题一
    无限下拉实现原理
  • 原文地址:https://www.cnblogs.com/l1pe1/p/7348976.html
Copyright © 2011-2022 走看看