From 42b618bcac01f9239b132448cab0f0dcdc53573c Mon Sep 17 00:00:00 2001 From: caoyuan Date: Fri, 1 Dec 2023 17:57:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:JbootCaredisCache=20=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=8F=82=E6=95=B0isUseFirstLevelOnly=20=E4=B8=BAtrue=E4=B8=8D?= =?UTF-8?q?=E4=BD=BF=E7=94=A8redis=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cache/caredis/JbootCaredisCacheImpl.java | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/main/java/io/jboot/components/cache/caredis/JbootCaredisCacheImpl.java b/src/main/java/io/jboot/components/cache/caredis/JbootCaredisCacheImpl.java index 3f2e41c9..c02bf1bd 100644 --- a/src/main/java/io/jboot/components/cache/caredis/JbootCaredisCacheImpl.java +++ b/src/main/java/io/jboot/components/cache/caredis/JbootCaredisCacheImpl.java @@ -49,30 +49,32 @@ public class JbootCaredisCacheImpl extends JbootCacheBase { private String clientId; private Cache keysCache = Caffeine.newBuilder() - .expireAfterAccess(10, TimeUnit.MINUTES) - .expireAfterWrite(10, TimeUnit.MINUTES) - .build(); + .expireAfterAccess(10, TimeUnit.MINUTES) + .expireAfterWrite(10, TimeUnit.MINUTES) + .build(); public JbootCaredisCacheImpl(JbootCacheConfig config) { super(config); this.caffeineCacheImpl = new CaffeineCacheImpl(config); - this.redisCacheImpl = new JbootRedisCacheImpl(config); + this.clientId = StrUtil.uuid(); this.serializer = Jboot.getSerializer(); - //在某些场景下,多个应用使用同一个 redis 实例,此时可以通过配置 cacheSyncMqChannel 来解决缓存冲突的问题 - if (StrUtil.isNotBlank(config.getCacheSyncMqChannel())){ - this.channel = config.getCacheSyncMqChannel(); - } - - this.redis = redisCacheImpl.getRedis(); - this.redis.subscribe(new BinaryJedisPubSub() { - @Override - public void onMessage(byte[] channel, byte[] message) { - JbootCaredisCacheImpl.this.onMessage((String) serializer.deserialize(channel), serializer.deserialize(message)); + if(!config.isUseFirstLevelOnly()) { + //在某些场景下,多个应用使用同一个 redis 实例,此时可以通过配置 cacheSyncMqChannel 来解决缓存冲突的问题 + if (StrUtil.isNotBlank(config.getCacheSyncMqChannel())) { + this.channel = config.getCacheSyncMqChannel(); } - }, serializer.serialize(channel)); + this.redisCacheImpl = new JbootRedisCacheImpl(config); + this.redis = redisCacheImpl.getRedis(); + this.redis.subscribe(new BinaryJedisPubSub() { + @Override + public void onMessage(byte[] channel, byte[] message) { + JbootCaredisCacheImpl.this.onMessage((String) serializer.deserialize(channel), serializer.deserialize(message)); + } + }, serializer.serialize(channel)); + } } @@ -241,8 +243,11 @@ public class JbootCaredisCacheImpl extends JbootCacheBase { private void publishMessage(int action, String cacheName, Object key) { clearKeysCache(cacheName); - JbootCaredisMessage message = new JbootCaredisMessage(clientId, action, cacheName, key); - redis.publish(serializer.serialize(channel), serializer.serialize(message)); + if(!config.isUseFirstLevelOnly()){ + JbootCaredisMessage message = new JbootCaredisMessage(clientId, action, cacheName, key); + redis.publish(serializer.serialize(channel), serializer.serialize(message)); + } + } private void clearKeysCache(String cacheName) { -- Gitee