当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- vue任意关系组件通信与跨组件监听状态 vue-communication
- Windows 10 tensorflow (2) regression analysis of principles, deep learning framework (gradient descent method to solve regression parameters)
- How long does it take you to work out an object-oriented programming interview question from Ali school?
- 一篇文章带你了解CSS 渐变知识
- ES6学习笔记(五):轻松了解ES6的内置扩展对象
- Wechat applet: prevent multiple click jump (function throttling)
- 至联云分享:IPFS/Filecoin值不值得投资?
- ES6学习笔记(二):教你玩转类的继承和类的对象
- Face to face Manual Chapter 16: explanation and implementation of fair lock of code peasant association lock and reentrantlock
- IPFS/Filecoin合法性:保护个人隐私不被泄露
猜你喜欢

TensorFlow中的Tensor是什么?

Pattern matching: The gestalt approach一种序列的文本相似度方法

From zero learning artificial intelligence, open the road of career planning!

Python基础数据类型——tuple浅析

I'm afraid that the spread sequence calculation of arbitrage strategy is not as simple as you think
![[C / C + + 1] clion configuration and running C language](/img/5b/ba96ff4447b150f50560e5d47cb8d1.jpg)
[C / C + + 1] clion configuration and running C language

Mongodb (from 0 to 1), 11 days mongodb primary to intermediate advanced secret

Word segmentation, naming subject recognition, part of speech and grammatical analysis in natural language processing

Filecoin主网上线以来Filecoin矿机扇区密封到底是什么意思

PHPSHE 短信插件说明
随机推荐
前端基础牢记的一些操作-Github仓库管理
OPTIMIZER_ Trace details
中小微企业选择共享办公室怎么样?
带你学习ES5中新增的方法
Electron application uses electronic builder and electronic updater to realize automatic update
Pattern matching: The gestalt approach一种序列的文本相似度方法
NLP model Bert: from introduction to mastery (2)
零基础打造一款属于自己的网页搜索引擎
MeterSphere开发者手册
6.5 request to view name translator (in-depth analysis of SSM and project practice)
JVM memory area and garbage collection
2019年的一个小目标,成为csdn的博客专家,纪念一下
加速「全民直播」洪流,如何攻克延时、卡顿、高并发难题?
How to become a data scientist? - kdnuggets
Nodejs crawler captures ancient books and records, a total of 16000 pages, experience summary and project sharing
一篇文章教会你使用HTML5 SVG 标签
Not long after graduation, he earned 20000 yuan from private work!
钻石标准--Diamond Standard
每个前端工程师都应该懂的前端性能优化总结:
比特币一度突破14000美元,即将面临美国大选考验