redis如何解决分页查询

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

redis如何解决分页查询

基于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入门教程栏目进行学习!

以上就是redis如何解决分页查询的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2045441.html

(0)
上一篇 2025年2月24日 01:20:10
下一篇 2025年2月22日 18:01:45

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • redis如何更新缓存

    redis更新缓存的的design pattern有四种:cache aside, read through, write through, write behind caching,我们下面一一来看一下这四种pattern。 Cache …

    2025年2月24日 数据库
    200
  • redis如何实现分布式锁

    分布式锁需要解决的问题 互斥性:任意时刻只能有一个客户端拥有锁,不能同时多个客户端获取 安全性:锁只能被持有该锁的用户删除,而不能被其他用户删除       (推荐学习:Redis视频教程) 死锁:获取锁的客户端因为某些原因而宕机,而未能释…

    2025年2月24日
    200
  • redis雪崩和穿透如何解决

    缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存不命中,接着查询数据库也无法查询出结果,因此也不会写入到缓存中,这将会导致每个查询都会去请求数据库,造成缓存穿透;          (推荐学习:Redis视频教程) 解决方案 布隆过…

    2025年2月24日
    200
  • redis事务及相关命令介绍

    一、概述: 和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制。在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石。相信对有关系型数据库开发经验的开发者而言这一概念并不陌生,…

    2025年2月24日
    200
  • redis中list类型及相关命令详解

    一、概述: 在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。(推荐:red…

    2025年2月24日
    200
  • redis中key相关命令详解

    一、概述: 本文将主要讲述与Key相关的Redis命令。学习这些命令对于学习Redis是非常重要的基础,也是能够充分挖掘Redis潜力的利器。(推荐:redis视频教程) 二、相关命令列表: 命令原型时间复杂度命令描述返回值KEYS pat…

    2025年2月24日
    200
  • redis中Sorted-Sets类型的命令详细介绍

    一、概述: Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集…

    2025年2月24日
    200
  • 如何理解redis单线程

    redis是以socket方式通信,socket服务端可同时接受多个客户端请求连接,也就是说,redis服务同时面对多个redis客户端连接请求,而redis服务本身是单线程运行。             (推荐学习:Redis视频教程) …

    2025年2月24日
    200
  • redis是如何持久化的

    redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。 有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。…

    2025年2月24日
    200
  • 如何保证redis中都是热点数据

    当redis使用的内存超过了设置的最大内存时,会触发redis的key淘汰机制,在redis 3.0中有6种淘汰策略: noeviction: 不删除策略。当达到最大内存限制时, 如果需要使用更多内存,则直接返回错误信息。(redis默认淘…

    2025年2月24日
    200

发表回复

登录后才能评论