继续吐槽在net下没有合适的Disk,ehcache实现快速查

作者: 网络编程  发布:2019-09-25

既是net下未有吗好的技术方案,目光只可以投到java上边看看,十分的快就找到了ehCache,看下官方证实挺牛叉的,参预情势照旧和上一篇同样,使用thrift做C#

mybatis 有自带的缓存,顶尖缓存是session品级,二级缓存是namespace 。

  1. maven的ehcache地址

          <!-- https://mvnrepository.com/artifact/org.ehcache/ehcache -->
          <dependency>
              <groupId>org.ehcache</groupId>
              <artifactId>ehcache</artifactId>
              <version>3.5.2</version>
         </dependency>
    

单身写ehcache类,保存数据。

金沙澳门官网 1 

cache成分的质量:

 

package com.configure;

import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;

@Configuration
//标注启动了缓存
@EnableCaching
public class CacheConfiguration {

 /*
  * ehcache 主要的管理器
  */
 @Bean(name = "appEhCacheCacheManager")
 public EhCacheCacheManager ehCacheCacheManager(EhCacheManagerFactoryBean bean){
     return new EhCacheCacheManager (bean.getObject ());
 }

 /*
  * 据shared与否的设置,Spring分别通过CacheManager.create()或new CacheManager()方式来创建一个ehcache基地.
  */
 @Bean
 public EhCacheManagerFactoryBean ehCacheManagerFactoryBean(){
     EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean ();
     cacheManagerFactoryBean.setConfigLocation (new ClassPathResource ("ehcache.xml"));
     cacheManagerFactoryBean.setShared (true);
     return cacheManagerFactoryBean;
 }
}

金沙澳门官网 2

cache元素解释:

           平衡点找到了,貌似在.net领域中比非常少听新闻说有磁盘缓存这种概念,既然据悉的少,那就在nuget中浪一浪,然后就找到了贰个top1的diskcache,如下图:

2)数据库的数据是配置型的,譬喻客商的个人音信,然后五个地方必要用到。而且采取的功效都十分大。

  1. 使用全代码情势的配备

maven构建。

 

       (3).cache:自定缓存计谋,为自定义的缓存计策。参数解释如下:

金沙澳门官网 ,速度差不离是600多皮秒,时间还勉强可以的,在自家的花色中也是相比符合的。

关于@Cacheable、@CachePut和@CacheEvict介绍,参考:

 

memoryStoreEvictionPolicy:当到达maxElementsInMemory限制时,Ehcache将会依附钦点的战术去清理内存。可选计策有:LRU(近些日子最少使用,默许攻略)、FIFO(先进先出)、LFU(最少访问次数)。

三:Ehcache的配置

有三个坑,便是不可能平昔运用 参数名作为key

 

项目中要求动用一些查询,数据的改动非常少但查询度异常的大。一时依旧按频率查询的。

金沙澳门官网 3

name:缓存名称

 

eternal:true表示对象无须过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默以为false

  

1)业务只询问近来半小时的数量,数据平日更新,不断会有数据插入。便是局地暂且的性质数据。

好了,本篇就说这么多吗,希望对你有赞助。

笔者当下项目中遭遇2种情形,

 

然后选取表明,能够在你想要的地点选拔缓存,注意如果有缓存了,就不会走原本的方法。

金沙澳门官网 4

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
    updateCheck="false">
    <diskStore path="user.dir/sqlEhCache" />

    <defaultCache eternal="false" maxElementsInMemory="1000"
        overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
        timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" />

    <cache name="baseCache" eternal="true" maxElementsInMemory="1000" maxElementsOnDisk="10000"
        overflowToDisk="true" diskPersistent="false" timeToIdleSeconds="0"
        timeToLiveSeconds="300" memoryStoreEvictionPolicy="LRU" />

</ehcache>

  

public interface TransformerDao {
   /**
     *删除该value下的所有缓存,整个都刷新
     * @param stationOid
     * @return
     */
    @Caching(evict={@CacheEvict(value="baseCache",allEntries=true)})
    public int deleteByStationOid(@Param("stationOid") String stationOid);
  /**
     * 查询该充电桩所属变压群(器)信息
     * 
     * @param pileOid
     * @return
     */
    @Cacheable(value="baseCache", key = "#p0")
    public Transformer queryTransformerByPileOid(
            @Param("pileOid") String pileOid);

}

拉下来一测量检验,卧槽,就的多少个CUCRUISERD操作,连TTL和TTI的功力都并没有,还要捐啥比特币,O(∩_∩)O

唯其如此采纳  #p 这种情势

金沙澳门官网 5

 

 

maxElementsOnDisk:硬盘中最大缓存对象数,倘诺0表示无穷大

         谈起缓存,我们莫不悬河泻水,各系列型的缓存都能挨个深入分析,但在net下找到一款适合的Disk Cache貌似照旧有某个难度的。

spring-boot注入,该java代码主借使根据配置生成cache

 

    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
      <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache</artifactId>
    </dependency>        
public class App {
    public static void main(String[] args) throws CachePersistenceException {

        LocalPersistenceService persistenceService = new DefaultLocalPersistenceService(
                new DefaultPersistenceConfiguration(new File("C:\1\cache")));

        PersistentUserManagedCache<String, String> cache = UserManagedCacheBuilder
                .newUserManagedCacheBuilder(String.class, String.class)
                .with(new UserManagedPersistenceContext<String, String>("persistentCache", persistenceService))
                .withResourcePools(ResourcePoolsBuilder.newResourcePoolsBuilder().disk(10L, MemoryUnit.GB, true))
                .withExpiry(Expirations.timeToLiveExpiration(Duration.of(30, TimeUnit.MINUTES))).build(true);

        StringBuilder sBuilder = new StringBuilder();
        for (int i = 1; i < 10000; i  ) {
            sBuilder.append(i);
        }

        long startTime = System.currentTimeMillis(); // 获取开始时间

        for (int i = 1; i < 1000; i  ) {
            String key = "username"   i;
            String value = sBuilder.toString();
            cache.put(key, value);
            System.out.println(String.format("%s:当前key=%s插入到缓存中", i, key));
        }

        long endTime = System.currentTimeMillis(); // 获取结束时间

        System.out.println("程序运行时间: "   (endTime - startTime)   "ms");
    }
}

ehcache.xml配置

 

本文由金沙澳门官网发布于网络编程,转载请注明出处:继续吐槽在net下没有合适的Disk,ehcache实现快速查

关键词: 金沙澳门官网

上一篇:只能访问到主页怎么办
下一篇:没有了