我们都知道,通过缓存查询的结果,可以极大的提升系统的服务能力,以及降低底层服务或者是数据库的压力。对于有分页条件的缓存,我们也可以按照不同的分页条件来缓存多个key。

基于SortedSet的分页查询缓存方案

首先想到的解决方法是使用@see ListOperations不再根据分页条件使用多个key,而是使用一个key,也不分页将全部的数据缓存到redis中,然后按照分页条件使用range(key,start,limit)获取分页的结果。 (推荐学习:Redis视频教程)

这个会导致一个问题,当缓存失效时,并发的写缓存会导致出现重复数据,所以想到通过使用set来处理并发时的重复数据,@see ZSetOperations

代码逻辑如下:range(key,start,limit)按照分页条件获取缓存,命中则直接返回

缓存未命中,查询(没有分页条件)数据库或是调用(没有分页)底层接口

add(key,valueScoreMap)写入缓存,expire设置缓存时间

当需要清理缓存时,直接删除key,如果是因为数据新增和删除,可以add(key,value,score)或remove(key,value)

redis中会按照score分值升序排列map中的数据,一般的,score分值是sql语句的order by filedA的filedA的值,这样能保证数据一致性

但是这种方式也存在一定问题:

这个key缓存的value确实是热数据,但可能只有少数数据被频繁使用其余的可能根本就未被使用,比如数据有100页,实际可能只会用到前10页,这也会导致缓存空间的浪费,如果使用了redis虚拟内存,也会有一定影响

sql查询由原来的分页查询变成了不分页查询,缓存失效后,系统的处理能力较之前会有下降,尤其是对于大表

更多Redis相关技术文章,请访问Redis入门教程栏目进行学习!

php redis 分页查询,redis如何解决分页查询相关推荐

  1. selectprovider 分页_修改EFOracleProvider——解决分页排序问题

    其实前面说的这些,支持9i啊,支持数据类型啊,支持自增长啊,或者是上网搜索就能解决,或者并不需要很高的技术含量. 但是支持分页排序的问题,可是花了我不少时间(净时间2天以上). 我们知道,在oracl ...

  2. oracle锁表查询_专业解决 MySQL 查询速度慢与性能差

    Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注 什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSe ...

  3. 加锁查询 FOR UPDATE 解决表格查询极慢的问题

    Select...for update 语句是我们经常使用手工加锁语句.通常情况下,select语句是不会对数据加锁,妨碍影响其他的DML和DDL操作.同时,在多版本一致读机制的支持下,select语 ...

  4. mybatis collection 子查询,嵌套查询,解决分页问题

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...

  5. springboot controller 分页查询_Spring Boot实战分页查询附近的人: Redis+GeoHash+Lua

    您的支持是我不断创作巨大动力 CSDN博客地址(关注,点赞) 人工智能推荐 GitHub(Star,Fork,Watch) 前言 最近在做社交的业务,用户进入首页后需要查询附近的人: 项目状况:前期尝 ...

  6. 数据库分库分表和带来的唯一ID、分页查询问题的解决

    数据库分库分表和带来的唯一ID.分页查询问题的解决 参考文章: (1)数据库分库分表和带来的唯一ID.分页查询问题的解决 (2)https://www.cnblogs.com/hanzhong/p/1 ...

  7. mysql的分页怎么不对_mysql一对多关联查询分页错误问题的解决方法

    xml问价中查询数据中包含list,需要使用collection .... .... 这样的查询系统封装的通用分页查询是不对的,所以需要自己sql中加入分页解决 SELECT you.nick_nam ...

  8. mysql一对多关联查询分页_mysql一对多关联查询分页错误问题的解决方法

    xml问价中查询数据中包含list,需要使用collection .... .... 这样的查询系统封装的通用分页查询是不对的,所以需要自己sql中加入分页解决 SELECT you.nick_nam ...

  9. redis 用scan 代替keys 解决百万数据模糊查询超时问题

    redis 用scan 代替keys 解决百万数据模糊查询超时问题 参考文章: (1)redis 用scan 代替keys 解决百万数据模糊查询超时问题 (2)https://www.cnblogs. ...

最新文章

  1. (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT
  2. HLR、VLR及AUC三网元概述
  3. history linux 日志服务器_Linux日志分析
  4. http接口和webservice接口的区别
  5. multi-byte wide-char
  6. pytorch 查看中间变量的梯度
  7. CF1043E Train Hard, Win Easy
  8. SharePoint 2013开发入门探索(一)- 自定义列表
  9. 通过八叉树进行空间分割和搜索
  10. php环境模拟stphp_用php模拟做服务端侦听端口
  11. Yaf框架视频教程之入门篇【已完成】
  12. LoadRunner11录制APP脚本(2)
  13. Oracle函数--合并,替换,拼接,截取,查找
  14. mysql 30入门_mysql入门(三)
  15. 基于Java毕业设计/疫情展示平台源码+系统+mysql+lw文档+部署软件
  16. 硕士论文——页眉页脚设置
  17. 双非年薪40W,从字节裸辞了
  18. android studio 添加图片进入mipmap文件包
  19. 眼底病php 是什么病,眼底病_眼底病有哪些_眼底病怎么治疗_快速问医生
  20. TensorFlow2.0损失函数基本原理、调用及自定义

热门文章

  1. python语句分号_【判断题】Python程序中每条语句以分号结尾。 A. 正确 B. 错误
  2. 【转】微信小游戏开发总结
  3. Will的将来时态_40
  4. 计算机信息安全攻防大赛,2018年度信息安全攻防大赛圆满收官
  5. No module named ensurepip
  6. STM32掌机教程2,掌机的原理
  7. Codeforces765F. Souvenirs
  8. 华为 MA567x, 如何从电信系统切回华为系统
  9. M5A78L-M LX3 PLUS 触发不显
  10. ubuntu20下Cuckoo SandBox安装教程--大踩坑版(一)