当前位置:网站首页>Redis cache update strategy, cache penetration, avalanche, breakdown problems
Redis cache update strategy, cache penetration, avalanche, breakdown problems
2022-07-06 12:12:00 【A pole】
Catalog
Preface
This article is learned by me from dark horse programmer B Stop video tutorial (https://www.bilibili.com/video/BV1cr4y1671t) Notes made in the process of , Mainly records Redis Some ideas about caching , No code involved .
Redis cache
effect
- Reduce back-end load
- Improve reading and writing efficiency , Reduce response time
cost
- Data consistency costs
- Code maintenance costs
- O & M costs
Cache update strategy
Memory obsolescence
Automatically eliminate when the content is insufficient
Default on
You don't have to maintain it yourself
Poor consistency
Low maintenance cost
Time out culling
add to TTL Automatically delete when due
General consistency
Low maintenance cost
Active update
Write business logic , When modifying the database , Update cache
Good consistency
Maintenance costs are high
Select according to business scenario :
Low consistency requirements : Use Redis Built in memory elimination mechanism .
High consistency requirements : Active update , And enable timeout culling ,
Read operations
Cache hits return directly
If not, query the database , And write to the cache
Write operations
Write the database first , Then delete the cache
To ensure the atomicity of database and cache operations ( Monomer applications can use @Transactional Open transaction )
Cache penetration
Cache penetration means that the data requested by the client does not exist in the cache or in the database , This cache will never take effect , These requests will all go to the database .
There are two common solutions :
- Caching empty objects
- advantage : Implement a simple , Convenient maintenance
- shortcoming : Extra memory consumption 、 May cause short-term inconsistencies
- Bloon filtration ( be based on bitmap Realization )
- advantage : Less memory , There is no excess key
- shortcoming : The implementation is complex 、 There is a possibility of misjudgment
( On the left is the schematic diagram of caching empty objects , On the right is the schematic diagram of bulon filtration )
Cache avalanche
Cache avalanche refers to a large number of caches at the same time key Simultaneous failure or Redis The service outage , Cause a large number of requests to reach the database , It brings a lot of pressure .
( On the left is a large number of cache invalidation diagram , The right side is redis Downtime diagram )
Solution :
- To different Key Of TTL add to Random value
- utilize Redis colony Improve service availability
- Add Degraded current limiting Strategy
- Add to business Multi level cache ( Browser cache 、Nginx cache 、Redis cache 、JVM Local cache 、 Databases, etc )
Cache breakdown
Cache breakdown is also called hot spot Key problem , It is a highly concurrent access and complex cache reconstruction business key All of a sudden it failed , Countless requests for access will have a huge impact on the database in an instant .
There are two common solutions :
Logical expiration
Not set up TTL, Instead, add a expire Field , When the field time reaches , Update data .
- advantage
- Threads do not need to wait , Good performance
- shortcoming
- There is no guarantee of consistency
- There is additional memory consumption
- The implementation is complex
- advantage
The mutex
- advantage
- No additional memory consumption
- Guarantee consistency
- Implement a simple
- shortcoming
- Thread needs to wait , Performance is affected
- There may be a deadlock risk
( On the left is the schematic diagram of mutual exclusion , Schematic diagram of logical expiration of the right side wall )
- advantage
Solve the cache breakdown problem based on mutual exclusion
Solve the cache breakdown problem based on logical expiration
Postscript
u1s1, This tutorial is really good , And it's 2022 New version of video , It is highly recommended that you have a look .
边栏推荐
- Missing value filling in data analysis (focus on multiple interpolation method, miseforest)
- MySQL realizes read-write separation
- RuntimeError: cuDNN error: CUDNN_ STATUS_ NOT_ INITIALIZED
- RT-Thread的main线程“卡死”的一种可能原因及解决方案
- vim命令行笔记
- JS变量类型以及常用类型转换
- Several declarations about pointers [C language]
- [template] KMP string matching
- Machine learning -- decision tree (sklearn)
- Reading notes of difficult career creation
猜你喜欢
电商数据分析--薪资预测(线性回归)
JS variable types and common type conversions
Mp3mini playback module Arduino < dfrobotdfplayermini H> function explanation
共用体(union)详解【C语言】
Programmers can make mistakes. Basic pointers and arrays of C language
Machine learning -- linear regression (sklearn)
Basic use of pytest
Comparison of solutions of Qualcomm & MTK & Kirin mobile platform USB3.0
高通&MTK&麒麟 手机平台USB3.0方案对比
Correspondence between STM32 model and contex M
随机推荐
JS数组常用方法的分类、理解和运用
Symbolic representation of functions in deep learning papers
ESP8266使用arduino连接阿里云物联网
C语言回调函数【C语言】
关键字 inline (内联函数)用法解析【C语言】
PyTorch四种常用优化器测试
R & D thinking 01 ----- classic of embedded intelligent product development process
Mysql database interview questions
IOT system framework learning
level16
Programmers can make mistakes. Basic pointers and arrays of C language
RuntimeError: cuDNN error: CUDNN_ STATUS_ NOT_ INITIALIZED
gcc 编译选项
Implementation scheme of distributed transaction
Basic operations of databases and tables ----- view data tables
JS正则表达式基础知识学习
MP3mini播放模块arduino<DFRobotDFPlayerMini.h>函数详解
Pat 1097 duplication on a linked list (25 points)
JS object and event learning notes
电商数据分析--用户行为分析