当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- Python基础数据类型——tuple浅析
- Filecoin的经济模型与未来价值是如何支撑FIL币价格破千的
- Vue.js Mobile end left slide delete component
- Python3 e-learning case 4: writing web proxy
- Group count - word length
- 零基础打造一款属于自己的网页搜索引擎
- vue任意关系组件通信与跨组件监听状态 vue-communication
- Our best practices for writing react components
- Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】
- Pattern matching: The gestalt approach一种序列的文本相似度方法
猜你喜欢
Python基础数据类型——tuple浅析
Filecoin主网上线以来Filecoin矿机扇区密封到底是什么意思
2019年的一个小目标,成为csdn的博客专家,纪念一下
TRON智能钱包PHP开发包【零TRX归集】
钻石标准--Diamond Standard
教你轻松搞懂vue-codemirror的基本用法:主要实现代码编辑、验证提示、代码格式化
一篇文章带你了解CSS3图片边框
Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】
Filecoin的经济模型与未来价值是如何支撑FIL币价格破千的
一篇文章带你了解HTML表格及其主要属性介绍
随机推荐
TRON智能钱包PHP开发包【零TRX归集】
Synchronous configuration from git to consult with git 2consul
Architecture article collection
Music generation through deep neural network
Keyboard entry lottery random draw
这个项目可以让你在几分钟快速了解某个编程语言
采购供应商系统是什么?采购供应商管理平台解决方案
Let the front-end siege division develop independently from the back-end: Mock.js
Save the file directly to Google drive and download it back ten times faster
What problems can clean architecture solve? - jbogard
零基础打造一款属于自己的网页搜索引擎
Face to face Manual Chapter 16: explanation and implementation of fair lock of code peasant association lock and reentrantlock
5.4 static resource mapping
Free patent download tutorial (HowNet, Espacenet)
use Asponse.Words Working with word templates
Group count - word length
Classical dynamic programming: complete knapsack problem
Mac installation hanlp, and win installation and use
Working principle of gradient descent algorithm in machine learning
小程序入门到精通(二):了解小程序开发4个重要文件