Arhn - архитектура программирования

Кэш Spring с переменной экземпляра и параметром в качестве ключа

Я использую ehcache для кэширования результатов метода. Ключ должен быть комбинацией объекта-члена и параметра метода. Мой класс выглядит примерно так:

Class A {

private B b;

@Cacheable(value="someCache",key="some key based on B and C")
public Result getResult(C c){
......
}

Мне нужно, чтобы ключ основывался на B и C. Я указал https://code.google.com/p/ehcache-spring-annotations/issues/detail?id=69, но они не указали, как включить параметр метода в генерацию ключа. Может ли кто-нибудь помочь мне с этим?


Ответы:


1

вы можете получить доступ к объекту A с помощью root.target в ключе. например

key="#root.target.b.id+'-'+#c.id"
25.02.2014
  • Извинения. Я думаю, что дал аннотацию весеннего кеша. В аннотации ehcache @Cacheable у нас нет «ключа». @Cacheable(cacheName = homeCache, keyGenerator = .......) 25.02.2014
  • @cfrick Отлично. Я искал этот ответ. Но следует отметить один момент: целевой объект должен быть общедоступным. В противном случае вы получите сообщение об ошибке, например EL1008E: свойство или поле «B» не может быть найдено в объекте типа «com.test.A» — возможно, не является общедоступным или недействительным. ? 28.04.2020

  • 2

    Я реализовал собственный генератор ключей, чтобы решить эту проблему. Тем не менее, я думаю, что это можно решить с помощью ehcache без использования специального генератора ключей. Но нигде не мог получить ответ. Пожалуйста, смотрите мой ответ ниже:

    @Component
    public class Home {
    
        private Parameter param;
    
        @Cacheable(cacheName = "homeCache", 
                        keyGenerator = @KeyGenerator(name = "com.myapp.cache.Home.ParamKeyGenerator"))
    
        public Result getPerson(Person p) {
    
            //Do something with p
            return result;
        }
    
        public Parameter getParam() {
    
            return param;
        }
    
        public void setParam(Parameter param) {
    
            this.param = param;
        }
    
        public static class ParamKeyGenerator implements CacheKeyGenerator<Serializable> {
    
            public Serializable generateKey(MethodInvocation methodInvocation) {
    
                Object[] obj = methodInvocation.getArguments();
                Home h = (Home) methodInvocation.getThis();
    
                return this.generateKey(obj[0], h.getParam());
            }
    
            public Serializable generateKey(Object... data) {
    
                String key = ((Person) data[0]).getName() + ((Parameter) data[1]).getName();
                System.out.println("generating key: " + key);
                return key;
            }
        }
    }
    
    26.02.2014
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..