मैं समाप्ति के निकट कैश रीफ्रेश करना चाहता हूं। तो मैं स्प्रिंगकैश के हिस्से को ओवरराइड करता हूं, और कैश को अपने रेडिस कैश मैनेजर में प्रबंधित करता हूं।

सब कुछ ठीक काम करता है, लेकिन "प्राप्त करें" विधि चलाते समय, अप्रत्याशित मान मेरे अपने CustomizedRedisCache में वापस आ जाते हैं। उस समय, रेडिस में कैश कुंजी वास्तव में "कैशकी" संपत्ति के समान थी।

    @Override
    public ValueWrapper get(final Object key) {
        ValueWrapper valueWrapper = super.get(key);
        if (null != valueWrapper) {
            String cacheKey = this.createCacheKey(key);
            log.info("cache name in redis = {}", cacheKey);
            Long ttl = this.redisTemplate.getExpire(cacheKey, TimeUnit.SECONDS);
            log.info("{}s before expire ", ttl);
        }
        return valueWrapper;
    }

फील्ड टीटीएल हमेशा -2 लौटाता है। और मुझे समझ में नहीं आता कि इसका क्या अर्थ है।

0
Zorazora 11 मार्च 2020, 06:54

1 उत्तर

सबसे बढ़िया उत्तर

रेडिस दस्तावेज से:

रेडिस 2.8 से शुरू होने पर त्रुटि के मामले में वापसी मूल्य बदल गया:

  • यदि कुंजी मौजूद नहीं है तो कमांड -2 लौटाता है।
  • यदि कुंजी मौजूद है, लेकिन कोई संबद्ध समाप्ति नहीं है, तो कमांड -1 लौटाता है।

मैं आपको यह सुनिश्चित करने की सलाह दूंगा कि कुंजी सही है और getExpire निष्पादित होने पर वास्तव में रेडिस्ट में मौजूद है

1
Maxim Popov 11 मार्च 2020, 08:16