Rumah > pangkalan data > Redis > teks badan

redis如何解决分页查询

(*-*)浩
Lepaskan: 2019-11-27 10:11:37
asal
6559 orang telah melayarinya

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

redis如何解决分页查询

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

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

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

代码逻辑如下:

range(key,start,limit)按照分页条件获取缓存,命中则直接返回
缓存未命中,查询(没有分页条件)数据库或是调用(没有分页)底层接口
add(key,valueScoreMap<value,score>)写入缓存,expire设置缓存时间
当需要清理缓存时,直接删除key,如果是因为数据新增和删除,可以add(key,value,score)或remove(key,value)
Salin selepas log masuk

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

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

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

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

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

Atas ialah kandungan terperinci redis如何解决分页查询. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan