Срок действия распределенного кеша Coherence для Namedcache

Как мы можем установить политику вытеснения/срок действия для каждой записи в кеше для любого конкретного кеша (NamedCache). Например, у меня может быть настроено два кеша, однако я хочу установить политику вытеснения на основе времени только для одного из кешей.

В соответствии с приведенным ниже конфигурационным файлом мне требуется установить удаление только для кеша «TEST2CACHE», например, истечение срока действия через 1 день. Как это сделать?

Любые указатели будут полезны. Спасибо.

Вот пример моего XML-файла конфигурации когерентности:

    <cache-mapping>
        <cache-name>TEST1CACHE</cache-name>
        <scheme-name>MyDistributedCache</scheme-name>
    </cache-mapping>

    <!-- Application Configuration Cache -->
    <cache-mapping>
        <cache-name>TEST2CACHE</cache-name>
        <scheme-name>MyDistributedCache</scheme-name>
    </cache-mapping>

</caching-scheme-mapping>

<caching-schemes>
    <distributed-scheme>
        <scheme-name>MyDistributedCache</scheme-name>
        <service-name>MyDistributedCache</service-name>
        <lease-granularity>member</lease-granularity>
        <backing-map-scheme>
            <read-write-backing-map-scheme>
                <internal-cache-scheme>
                    <local-scheme>
                        <unit-calculator>BINARY</unit-calculator>
                    </local-scheme>
                </internal-cache-scheme>
                <cachestore-scheme>
                    <class-scheme>
                        <class-name>spring-bean:myCacheStore</class-name>
                        <init-params>
                            <init-param>
                                <param-name>setEntityName</param-name>
                                <param-value>{cache-name}</param-value>
                            </init-param>
                        </init-params>
                    </class-scheme>
                </cachestore-scheme>
            </read-write-backing-map-scheme>
        </backing-map-scheme>
        <autostart>true</autostart>
    </distributed-scheme>
</caching-schemes>

person scd_7    schedule 23.12.2015    source источник


Ответы (1)


Вы используете одну и ту же схему «MyDistributedCache» для обоих кешей, поэтому, если вы добавите политику выселения, это повлияет на них обоих:

пример:

<local-scheme>
  <unit-calculator>BINARY</unit-calculator>
  <expiry-delay>10d</expiry-delay>
  <flush-delay>1d</flush-delay>
</local-scheme>

Бьюсь об заклад, вы не хотите создавать две почти идентичные схемы, поэтому решением может быть использование Scheme Inheritance Ссылка на документацию по Coherence

по крайней мере, вы сможете повторно использовать части кеша.

Еще один вариант, который стоит проверить, — использовать истечение срока действия в API, но я не уверен, действительно ли Coherence очистит кеш.

NamedCache.put(Object oKey,
           Object oValue,
           long cMillis)

см. JavaDoc

Я предлагаю использовать разные схемы кэширования.

person Arkadiy Verman    schedule 27.12.2015
comment
Спасибо @Arkadiy .. ваши указатели были полезны. Я использовал наследование схемы и определил другую схему для кеша, который я хотел вытеснить. И по двум основным причинам. 1) Я использовал entryProcessor для добавления/обновления записей в этот конкретный кеш, поэтому cdn не использовал метод put(). 2) Как вы предложили, это более чисто, и нам не нужно менять файлы классов java, если требуется изменить время истечения срока действия. Кроме того, стоит отметить, что ‹flush-delay›x‹/flush-delay› теперь устарела, начиная с согласованности 3.5. Когерентность немного повзрослела на этом. В любом случае, спасибо! - person scd_7; 30.12.2015