当前位置:网站首页>Jetcache buried some of the operation, you can't accept it
Jetcache buried some of the operation, you can't accept it
2020-11-06 01:28:00 【Yin Jihuan】
Explain the background
Caching is an absolute weapon to deal with high concurrency , As many business scenarios allow , You can use caching to provide performance .
Since the cache is used , It's essential to monitor the cache . For example, cache loading takes time , New time and so on .
stay JetCache The embedded point operation is carried out in the , about Redis There's no problem with caching , After that Key Is a full , The whole is Cache Of name+key, Here's the picture :
Except yes Redis Cache as a buried point , And for the local cache Caffeine We also did some embedding operations , And found that Caffeine There's something wrong with the burial point of , The problem lies in Cache Of name lost , Here's the picture :
Then I went to the official nail group and asked the maintenance personnel , Let me upgrade the version . Then I upgraded to the latest 2.6.0 Not yet. , This is not a pit for me !
Find out the reason
Do it yourself , Have ample food and clothing . Just look at the code , First of all to see Redis why Cache name There is no loss , as a result of Redis Of Config There is keyPrefix, Here's the picture :
Then I'm right Redis When operating , Will build the cache Key, structure Key I'll take it with me keyPrefix, therefore Redis Of Key It's normal .
com.alicp.jetcache.external.AbstractExternalCache
public byte[] buildKey(K key) {
try {
Object newKey = key;
if (key instanceof byte[]) {
newKey = key;
} else if (key instanceof String) {
newKey = key;
} else if (this.config.getKeyConvertor() != null) {
newKey = this.config.getKeyConvertor().apply(key);
}
return ExternalKeyUtil.buildKeyAfterConvert(newKey, this.config.getKeyPrefix());
} catch (IOException var3) {
throw new CacheException(var3);
}
}
Then come to see Caffeine Of config There is no Keyprefix Of , Here's the picture :
And then building the cache Key When , No Keyprefix, So the problem is here .
com.alicp.jetcache.embedded.AbstractEmbeddedCache
public Object buildKey(K key) {
if (key == null) {
return null;
} else {
Object newKey = key;
Function<K, Object> keyConvertor = this.config.getKeyConvertor();
if (keyConvertor != null) {
newKey = keyConvertor.apply(key);
}
return newKey;
}
}
RedisCacheConfig Inherited ExternalCacheConfig,ExternalCacheConfig Inherited CacheConfig.
keyPrefix It's defined in ExternalCacheConfig in .
and EmbeddedCacheConfig Only inherited CacheConfig, So naturally it doesn't have keyPrefix Field .
Solution
The reason has been found out , It must be possible to solve it . The problem is that it's an open source framework , It's not your own company's internal code . But you can also clone the source code directly , To transform , Then package and publish it to your own private server .
take EmbeddedCacheConfig Also inherited ExternalCacheConfig It can be keyPrefix Go through it , And then in buildKey Where to splice .
There is also a more opportunistic approach , You don't have to change the configuration class relationship , stay config There is monitors This information , It stores the cache monitoring information , It mainly refers to the operation type corresponding to the record cache ,GET, PUT such , Then there is the execution time of each operation , The number of operations and other statistical information , Eventually, a thread will periodically output this information to the log .
So we can get monitors Medium cacheName Solve the problem in the near future .
private String getCacheName() {
List<CacheMonitor> monitors = config.getMonitors();
if (CollectionUtils.isEmpty(monitors)) {
return "";
}
DefaultCacheMonitor cacheMonitor = (DefaultCacheMonitor) monitors.get(0);
String cacheName = cacheMonitor.getCacheName();
return cacheName;
}
Function code : https://github.com/yinjihuan/kitty
About author : Yin Jihuan , Simple technology enthusiasts ,《Spring Cloud Microservices - Full stack technology and case analysis 》, 《Spring Cloud Microservices introduction Actual combat and advanced 》 author , official account Ape world Originator . Personal wechat jihuan900 , Welcome to hook up with .
I have compiled a complete set of learning materials , Those who are interested can search through wechat 「 Ape world 」, Reply key 「 Learning materials 」 Get what I've sorted out Spring Cloud,Spring Cloud Alibaba,Sharding-JDBC Sub database and sub table , Task scheduling framework XXL-JOB,MongoDB, Reptiles and other related information .
版权声明
本文为[Yin Jihuan]所创,转载请带上原文链接,感谢
边栏推荐
- A course on word embedding
- Summary of common algorithms of linked list
- Pattern matching: The gestalt approach一种序列的文本相似度方法
- 零基础打造一款属于自己的网页搜索引擎
- Natural language processing - wrong word recognition (based on Python) kenlm, pycorrector
- How to become a data scientist? - kdnuggets
- 关于Kubernetes 与 OAM 构建统一、标准化的应用管理平台知识!(附网盘链接)
- [C / C + + 1] clion configuration and running C language
- 前端都应懂的入门基础-github基础
- vue-codemirror基本用法:实现搜索功能、代码折叠功能、获取编辑器值及时验证
猜你喜欢
Do not understand UML class diagram? Take a look at this edition of rural love class diagram, a learn!
采购供应商系统是什么?采购供应商管理平台解决方案
多机器人行情共享解决方案
一篇文章教会你使用Python网络爬虫下载酷狗音乐
Music generation through deep neural network
一篇文章带你了解CSS3 背景知识
Construction of encoder decoder model with keras LSTM
前端都应懂的入门基础-github基础
用一个例子理解JS函数的底层处理机制
Face to face Manual Chapter 16: explanation and implementation of fair lock of code peasant association lock and reentrantlock
随机推荐
Solve the problem of database insert data garbled in PL / SQL developer
Save the file directly to Google drive and download it back ten times faster
教你轻松搞懂vue-codemirror的基本用法:主要实现代码编辑、验证提示、代码格式化
Pattern matching: The gestalt approach一种序列的文本相似度方法
小程序入门到精通(二):了解小程序开发4个重要文件
How to customize sorting for pandas dataframe
PN8162 20W PD快充芯片,PD快充充电器方案
一篇文章带你了解CSS 分页实例
Group count - word length
A course on word embedding
keras model.compile Loss function and optimizer
Summary of common algorithms of binary tree
百万年薪,国内工作6年的前辈想和你分享这四点
一篇文章教会你使用Python网络爬虫下载酷狗音乐
Calculation script for time series data
速看!互联网、电商离线大数据分析最佳实践!(附网盘链接)
Word segmentation, naming subject recognition, part of speech and grammatical analysis in natural language processing
助力金融科技创新发展,ATFX走在行业最前列
Programmer introspection checklist
Vue.js Mobile end left slide delete component