当前位置:网站首页>从查询数据库性能优化谈到redis缓存-谈一谈缓存的穿透、雪崩、击穿
从查询数据库性能优化谈到redis缓存-谈一谈缓存的穿透、雪崩、击穿
2022-06-25 23:04:00 【秃了也弱了。】
写在前面
实现了页面需要的功能,但是考虑到该页面是被用户高频访问的,所以性能必须进行尽可能的优化。
一般一个系统最大的性能瓶颈,就是数据库的io操作。从数据库入手也是调优性价比最高的切入点。
一般分为两个层面,一是提高数据库sql本身的性能,二是尽量避免直接查询数据库。
提高数据库本身的性能首先是优化sql,包括:使用索引,减少不必要的大表关联次数,控制查询字段的行数和列数。另外当数据量巨大是可以考虑分库分表,以减轻单点压力。对于mysql的优化,请自行学习,这里不再赘述。
MySQL高级-索引是个什么东西?explain到底怎么用-MySQL查询优化大全
重点要讲的是另外一个层面:尽量避免直接查询数据库。
解决办法就是:缓存。
缓存可以理解是数据库的一道保护伞,任何请求只要能在缓存中命中,都不会直接访问数据库。而缓存的处理性能是数据库10-100倍。
咱们这里谈的就是用Redis作为缓存系统进行优化。
结构图:
高并发时可能会出现的问题
但在高并发环境下还有如下三个问题。
1、如果redis宕机了,或者链接不上,怎么办?
2、如果redis缓存在高峰期到期失效,在这个时刻请求会向雪崩一样,直接访问数据库如何处理?
3、 如果用户不停地查询一条不存在的数据,缓存没有,数据库也没有,那么会出现什么情况,如何处理?
缓存穿透
缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中,将去查询数据库,但是数据库也无此记录,并且处于容错考虑,我们没有将这次查询的null写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。
解决:
空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。
缓存雪崩
缓存雪崩是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。
解决:
原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。
缓存击穿
对于一些设置了过期时间的key,如果这些key可能会在某些时间点被超高并发地访问,是一种非常“热点”的数据。这个时候,需要考虑一个问题:如果这个key在大量请求同时进来前正好失效,那么所有对这个key的数据查询都落到db,我们称为缓存击穿。和缓存雪崩的区别:
缓存击穿是一个热点key失效
缓存雪崩是很多key集体失效
缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。
解决:
分布式锁——第一个key1 在查询db,获取数据 到放入缓存过程中,都有把锁 先锁住,其他人就必须等待,等待这个人把缓存设置成功,才去释放锁,那其他人就直接从缓存里面取数据;不会造成数据库的读写性能的缺陷。
redisson
Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。
redisson使用
边栏推荐
- [system architecture] - what are MDA architecture, ADL and DSSA
- Preorder and middle order traversal of forest
- CXF
- SVN
- STM32 uses SPI mode to drive TFT-LCD optimization code of hx8347 scheme
- Preordered clue binary tree
- FreeRTOS+STM32L+ESP8266+MQTT协议传输温湿度数据到腾讯云物联网平台
- C#线程池控制Semaphore
- Flex & Bison 开始
- "Method not allowed", 405 problem analysis and solution
猜你喜欢
渗透工具-Burpsuite
Implementation notes of least square fitting conic in stm32
马斯克 VS 乔布斯,谁是21世纪最伟大的创业家
Return value is object type method call equals()
Blob
ciscn_ 2019_ en_ two
Why is it best to use equals for integer comparisons
JS逆向案例:破解登录密码
STM32 uses SPI mode to drive TFT-LCD optimization code of hx8347 scheme
11.1.1 overview of Flink_ Flink overview
随机推荐
论文中英文大小写、数字与标点的正确撰写方式
Endnote IEEE TRANSACTIONS ON INDUSTRIAL ELECTRONICS/TIE/TPEL 参考文献格式模板
jarvisoj_ level2_ x64
Ssl/tls, symmetric and asymmetric encryption, and tlsv1.3
Vscode shortcut
Download and install flume
Compile the telegraph desktop side (tdesktop) using vs2022
Final review [machine learning]
CXF
Permission design = function permission + Data permission
关于HC-12无线射频模块使用
PHP performance optimization
1-9network configuration in VMWare
Summary of push-pull output and open drain output of STM32 and failure of analog IIC driving mlx90615
No executorfactory found to execute the application
1-11solutions to common problems of VMware virtual machine
统一网关Gateway
模板引擎——FreeMarker初体验
FPGA notes -- implementation of FPGA floating point operation
下载安装Flume