Infinispan putIfAbsent(关键,价值,寿命,时间单位)

时间:2018-02-27 05:31:18

标签: infinispan

我们在内存缓存中使用Infinispan Server 9.0.3。

使用以下putifabsent方法将对象存储在缓存中。  myRemoteCache.putIfAbsent(Key,request,objectLifespan,TimeUnit.MINUTES);

但是,如果objectLifespan值大于一个月,则上面的putIfAbsent不会在缓存中存储对象。我想在缓存中保持对象的寿命长达1年。

服务器配置

<expiration lifespan="-1" max-idle="-1" interval="-1" />
                     <locking acquire-timeout="30000" concurrency-level="200" striping="false" />                
                     <file-store shared="false" preload="true" fetch-state="true" read-only="false" passivation="false" path="${infinispan.cache.persistence.file.path}" />

<indexing index="LOCAL" >                  
    <!-- Enabled fastest writer: NRT backend  Non-shared indexes :directory-based or near-real-time -->
    <!--The drawback with near-real-time is that unflushed index changes can be lost in case of a non-clean shutdown -->
    <property name="default.indexmanager">near-real-time</property>
    <!-- Write indexes in Infinispan filesystem - Filesystem based index, infinispan - Distributed Cache-->
    <property name="default.directory_provider">filesystem</property>
    <property name="default.reader.strategy">shared</property>
    <!-- This index is dedicated to the current node -->
    <property name="default.exclusive_index_use">true</property>

    <property name="default.chunk_size">128000</property>
    <property name="default.metadata_cachename">LuceneIndexesMetadataOWR_xxx</property>
    <property name="default.data_cachename">LuceneIndexesDataOWR_xxx</property>
                    <property name="default.indexBase">/apps/infinispanserver/infinispan-server-9.0.3.Final/bin/index</property> 

    <!-- The default is 10, but we don't want to waste many cycles in merging 
            (tune for writes at cost of reader fragmentation) -->
    <property name="default.indexwriter.merge_factor">90</property>

    <!-- Never create segments larger than 128 mb -->
    <property name="default.indexwriter.merge_max_size">128</property>

    <!-- IndexWriter flush buffer size in MB -->
    <property name="default.indexwriter.ram_buffer_size">16</property>

    <!-- Make sure to use native locking -->
    <property name="default.locking_strategy">native</property>

    <!-- Enable sharding on writers -->
    <property name="default.sharding_strategy.nbr_of_shards">24</property>

    <!-- No need to be backwards compatible regarding Lucene version -->
    <property name="lucene_version">LUCENE_CURRENT</property>        

    <indexed-entities>
      <indexed-entity>xxxxxxx</indexed-entity>
    </indexed-entities> 
</indexing>

使用HotRod客户端协议与服务器通信并使用Protobuf数据结构。

请问为什么当寿命设置超过1个月时,为什么putIfAbsent()调用失败?

1 个答案:

答案 0 :(得分:0)

在10.0之前的Infinispan版本中,超过30天的寿命被解释为UNIX时代(可能是因为Memcached协议做了同样的事情)。

此行为已在10.0(ISPN-10032)中删除。