JVM內存級分佈式緩存Hazelcast

Hazelcast是一個內存分佈式計算平臺,用於管理數據並並行執行執行應用程序。java

1. 它是用Java編寫的。
2. 與其餘一些內存數據庫(如redis)不一樣,Hazelcast是多線程的,這意味着可從全部可用的CPU內核中受益。
3. 與其餘內存數據網格不一樣 - 它設計用於分佈式環境。它支持每一個羣集無限數量的map和緩存。node

根據基準測試,Hazelcast在獲取數據方面比Redis快56%,在設置數據方面比Redis快44%。redis

Hazelcast是一個高度可擴展的數據分發和集羣平臺。特性包括:數據庫

  1. 提供java.util.{Queue, Set, List, Map}分佈式實現。
  2. 提供java.util.concurrency.locks.Lock分佈式實現。
  3. 提供java.util.concurrent.ExecutorService分佈式實現。
  4. 提供用於一對多關係的分佈式MultiMap。
  5. 提供用於發佈/訂閱的分佈式Topic(主題)。
  6. 經過JCA與J2EE容器集成和事務支持。
  7. 提供用於安全集羣的Socket層加密。
  8. 支持同步和異步持久化。
  9. 經過JMX監控和管理集羣。
  10. 支持動態HTTP Session集羣。
  11. 利用備份實現動態分割。
  12. 支持動態故障恢復。

咱們來看一下如何使用Hazelcast緩存

pom安全

<dependency>
   <groupId>com.hazelcast</groupId>
   <artifactId>hazelcast-all</artifactId>
   <version>3.10.1</version>
</dependency>

在SpringBoot主程序開啓緩存@EnableCaching多線程

@EnableCaching
@EnableFeignClients
@EnableDiscoveryClient
@EnableTransactionManagement
@SpringBootApplication
public class ProductproviderApplication {

   public static void main(String[] args) {
      ApplicationContext app = SpringApplication.run(ProductproviderApplication.class, args);
      SpringBootUtil.setApplicationContext(app);
   }

}

配置類app

@Configuration
public class HazelcastConfiguration {
    @Bean
    public Config hazelCastConfig(){
        Config config = new Config();
        config.setInstanceName("hazelcast-instance").addMapConfig(
                new MapConfig().setName("configuration").setMaxSizeConfig(new MaxSizeConfig(200,
                        MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE)).setEvictionPolicy(EvictionPolicy.LFU)
                .setTimeToLiveSeconds(-1));
        return config;
    }
}

仍是以昨天的汽車配件分類實體類來講明,此處注意必定要實現序列化接口Serializable異步

@AllArgsConstructor
@NoArgsConstructor
public class ProviderProductLevel implements Provider,Serializable {
    @Getter
    @Setter
    private Long id;
    @Getter
    @Setter
    private String code;
    @Getter
    @Setter
    private String name;
    @Getter
    @Setter
    private Integer sort;
    @Getter
    @Setter
    private Integer level;
    @Getter
    @Setter
    private ProductType productType;
    @Getter
    @Setter
    private String pictureUrl;
    @Getter
    @Setter
    private List<OtherProperty> otherProperties;
    @Getter
    private List<Provider> productListProviders = new CopyOnWriteArrayList<>();

    public ProviderProductLevel(Long id,String code,String name,Integer sort,ProductType productType) {
        this.id = id;
        this.code = code;
        this.name = name;
        this.sort = sort;
        this.level = 1;
        this.productType = productType;
    }
    public ProviderProductLevel(Long id,String code,String name,Integer sort,String pictureUrl) {
        this.id = id;
        this.code = code;
        this.name = name;
        this.sort = sort;
        this.level = 2;
        this.pictureUrl = pictureUrl;
    }
    @Override
    public boolean addProvider(Provider provider) {
        LevelDao levelDao = SpringBootUtil.getBean(LevelDao.class);
        if (provider instanceof ProviderProductLevel) {
            levelDao.addLevelToLevel(new ParamLevel(this.id,((ProviderProductLevel)provider).getId()));
        }
        return this.productListProviders.add(provider);
    }
}

寫一個Controller,其中創建分佈式緩存Map,不相關的內容不作解釋,只說明分佈式緩存內容socket

@Slf4j
@RestController
public class LevelController {
    //建立分佈式緩存節點
    private HazelcastInstance instance = Hazelcast.newHazelcastInstance();
    @Autowired
    private LevelDao levelDao;
    //一級分類緩存
//    private Map<Long,Provider> cachelevelMap1 = new ConcurrentHashMap<>();
    private Map<Long,Provider> cachelevelMap1 = instance.getMap("level1");

    /**
     * 保存一級汽車配件分類
     * @param level
     * @return
     */
    @ProductAnnotation
    @SuppressWarnings("unchecked")
    @Transactional
    @PostMapping("/productprovider-anon/savelevel1")
    public Result<String> saveLevel1(@RequestBody ProviderProductLevel level) {
        ProviderFactory.createProviderProductLevel1(level,true);
        if (!cachelevelMap1.containsKey(level.getId())) {
            cachelevelMap1.put(level.getId(), level);
        }
        return Result.success("保存成功");
    }

    /**
     * 保存二級汽車配件分類,並將二級產品分類添加到一級產品分類的子分類
     * @param id
     * @param level
     * @return
     */
    @SuppressWarnings("unchecked")
    @Transactional
    @PostMapping("/productprovider-anon/savelevel2")
    public Result<String> saveLevel2(@RequestParam("id") Long id, @RequestBody ProviderProductLevel level) {
        ProviderFactory.createProviderProductLevel2(level,true);
        if (cachelevelMap1.containsKey(id)) {
            //此處必須獲取一級分類對象,再添加二級分類,而後從新放入緩存中
            //直接使用cachelevelMap1.get(id).addProvider(level),將沒法將
            //level添加到CopyOnRightArrayList中
            Provider level1 = cachelevelMap1.get(id);
            level1.addProvider(level);
            cachelevelMap1.put(id,level1);
            log.info("緩存獲取" + JSONObject.toJSONString(cachelevelMap1.get(id)));
        }else {
            Provider level1 = levelDao.findLevel1(id);
            log.info(JSONObject.toJSONString(level1));
            level1.addProvider(level);
            cachelevelMap1.put(id,level1);
        }
        return Result.success("保存成功");
    }

    @GetMapping("/productprovider-anon/getprovider")
    public Provider getProvider(@RequestParam("id") Long id) {
        return cachelevelMap1.get(id);
    }
}

咱們將端口號設爲8106,並啓動該端口的項目,咱們能夠看到這樣一些日誌

2019-07-10 10:19:38.381  INFO [productprovider,,,] 10216 --- [           main] com.hazelcast.instance.AddressPicker     : [LOCAL] [dev] [3.10.1] Prefer IPv4 stack is true.
2019-07-10 10:19:38.764  INFO [productprovider,,,] 10216 --- [           main] com.hazelcast.instance.AddressPicker     : [LOCAL] [dev] [3.10.1] Picked [192.168.192.15]:5702, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5702], bind any local is true
2019-07-10 10:19:38.765  INFO [productprovider,,,] 10216 --- [           main] com.hazelcast.system                     : [192.168.192.15]:5702 [dev] [3.10.1] Hazelcast 3.10.1 (20180521 - 66f881d) starting at [192.168.192.15]:5702
2019-07-10 10:19:38.765  INFO [productprovider,,,] 10216 --- [           main] com.hazelcast.system                     : [192.168.192.15]:5702 [dev] [3.10.1] Copyright (c) 2008-2018, Hazelcast, Inc. All Rights Reserved.
2019-07-10 10:19:38.766  INFO [productprovider,,,] 10216 --- [           main] com.hazelcast.system                     : [192.168.192.15]:5702 [dev] [3.10.1] Configured Hazelcast Serialization version: 1
2019-07-10 10:19:38.766  INFO [productprovider,,,] 10216 --- [           main] com.hazelcast.instance.Node              : [192.168.192.15]:5702 [dev] [3.10.1] A non-empty group password is configured for the Hazelcast member. Starting with Hazelcast version 3.8.2, members with the same group name, but with different group passwords (that do not use authentication) form a cluster. The group password configuration will be removed completely in a future release.
2019-07-10 10:19:38.770  INFO [productprovider,,,] 10216 --- [           main] c.h.s.i.o.impl.BackpressureRegulator     : [192.168.192.15]:5702 [dev] [3.10.1] Backpressure is disabled
2019-07-10 10:19:38.770  INFO [productprovider,,,] 10216 --- [           main] h.s.i.o.i.InboundResponseHandlerSupplier : [192.168.192.15]:5702 [dev] [3.10.1] Running with 2 response threads
2019-07-10 10:19:39.422  INFO [productprovider,,,] 10216 --- [           main] com.hazelcast.instance.Node              : [192.168.192.15]:5702 [dev] [3.10.1] Creating MulticastJoiner
2019-07-10 10:19:39.428  INFO [productprovider,,,] 10216 --- [           main] c.h.s.i.o.impl.OperationExecutorImpl     : [192.168.192.15]:5702 [dev] [3.10.1] Starting 8 partition threads and 5 generic threads (1 dedicated for priority tasks)
2019-07-10 10:19:39.430  INFO [productprovider,,,] 10216 --- [           main] c.h.internal.diagnostics.Diagnostics     : [192.168.192.15]:5702 [dev] [3.10.1] Diagnostics disabled. To enable add -Dhazelcast.diagnostics.enabled=true to the JVM arguments.
2019-07-10 10:19:39.430  INFO [productprovider,,,] 10216 --- [           main] com.hazelcast.core.LifecycleService      : [192.168.192.15]:5702 [dev] [3.10.1] [192.168.192.15]:5702 is STARTING
2019-07-10 10:19:39.538  INFO [productprovider,,,] 10216 --- [           main] c.h.i.cluster.impl.MulticastJoiner       : [192.168.192.15]:5702 [dev] [3.10.1] Trying to join to discovered node: [192.168.192.15]:5701
2019-07-10 10:19:39.549  INFO [productprovider,,,] 10216 --- [cached.thread-3] com.hazelcast.nio.tcp.TcpIpConnector     : [192.168.192.15]:5702 [dev] [3.10.1] Connecting to /192.168.192.15:5701, timeout: 0, bind-any: true
2019-07-10 10:19:39.558  INFO [productprovider,,,] 10216 --- [thread-Acceptor] com.hazelcast.nio.tcp.TcpIpAcceptor      : [192.168.192.15]:5701 [dev] [3.10.1] Accepting socket connection from /192.168.192.15:4508
2019-07-10 10:19:39.561  INFO [productprovider,,,] 10216 --- [thread-Acceptor] c.h.nio.tcp.TcpIpConnectionManager       : [192.168.192.15]:5701 [dev] [3.10.1] Established socket connection between /192.168.192.15:5701 and /192.168.192.15:4508
2019-07-10 10:19:39.561  INFO [productprovider,,,] 10216 --- [cached.thread-3] c.h.nio.tcp.TcpIpConnectionManager       : [192.168.192.15]:5702 [dev] [3.10.1] Established socket connection between /192.168.192.15:4508 and /192.168.192.15:5701
2019-07-10 10:19:46.571  INFO [productprovider,,,] 10216 --- [ration.thread-0] c.h.internal.cluster.ClusterService      : [192.168.192.15]:5701 [dev] [3.10.1]

Members {size:2, ver:2} [
    Member [192.168.192.15]:5701 - 34da2d53-d8d6-4959-aaf2-bd6cda24f0fa this
    Member [192.168.192.15]:5702 - 70b959c7-ebb5-4226-b343-76e7354cbd94
]

2019-07-10 10:19:46.584  INFO [productprovider,,,] 10216 --- [ration.thread-0] com.hazelcast.system                     : [192.168.192.15]:5702 [dev] [3.10.1] Cluster version set to 3.10
2019-07-10 10:19:46.589  INFO [productprovider,,,] 10216 --- [ration.thread-0] c.h.internal.cluster.ClusterService      : [192.168.192.15]:5702 [dev] [3.10.1]

Members {size:2, ver:2} [
    Member [192.168.192.15]:5701 - 34da2d53-d8d6-4959-aaf2-bd6cda24f0fa
    Member [192.168.192.15]:5702 - 70b959c7-ebb5-4226-b343-76e7354cbd94 this
]

2019-07-10 10:19:47.568  INFO [productprovider,,,] 10216 --- [           main] com.hazelcast.core.LifecycleService      : [192.168.192.15]:5702 [dev] [3.10.1] [192.168.192.15]:5702 is STARTED

說明它打開了一個5702端口的分佈式緩存系統

咱們將Springboot的端口改爲8006,並啓動該端口的相同項目,咱們能夠在啓動日誌中看到

2019-07-10 10:23:16.328  INFO [productprovider,,,] 11764 --- [           main] com.hazelcast.instance.AddressPicker     : [LOCAL] [dev] [3.10.1] Prefer IPv4 stack is true.
2019-07-10 10:23:16.687  INFO [productprovider,,,] 11764 --- [           main] com.hazelcast.instance.AddressPicker     : [LOCAL] [dev] [3.10.1] Picked [192.168.192.15]:5704, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5704], bind any local is true
2019-07-10 10:23:16.688  INFO [productprovider,,,] 11764 --- [           main] com.hazelcast.system                     : [192.168.192.15]:5704 [dev] [3.10.1] Hazelcast 3.10.1 (20180521 - 66f881d) starting at [192.168.192.15]:5704
2019-07-10 10:23:16.689  INFO [productprovider,,,] 11764 --- [           main] com.hazelcast.system                     : [192.168.192.15]:5704 [dev] [3.10.1] Copyright (c) 2008-2018, Hazelcast, Inc. All Rights Reserved.
2019-07-10 10:23:16.689  INFO [productprovider,,,] 11764 --- [           main] com.hazelcast.system                     : [192.168.192.15]:5704 [dev] [3.10.1] Configured Hazelcast Serialization version: 1
2019-07-10 10:23:16.689  INFO [productprovider,,,] 11764 --- [           main] com.hazelcast.instance.Node              : [192.168.192.15]:5704 [dev] [3.10.1] A non-empty group password is configured for the Hazelcast member. Starting with Hazelcast version 3.8.2, members with the same group name, but with different group passwords (that do not use authentication) form a cluster. The group password configuration will be removed completely in a future release.
2019-07-10 10:23:16.692  INFO [productprovider,,,] 11764 --- [           main] c.h.s.i.o.impl.BackpressureRegulator     : [192.168.192.15]:5704 [dev] [3.10.1] Backpressure is disabled
2019-07-10 10:23:16.692  INFO [productprovider,,,] 11764 --- [           main] h.s.i.o.i.InboundResponseHandlerSupplier : [192.168.192.15]:5704 [dev] [3.10.1] Running with 2 response threads
2019-07-10 10:23:17.310  INFO [productprovider,,,] 11764 --- [           main] com.hazelcast.instance.Node              : [192.168.192.15]:5704 [dev] [3.10.1] Creating MulticastJoiner
2019-07-10 10:23:17.315  INFO [productprovider,,,] 11764 --- [           main] c.h.s.i.o.impl.OperationExecutorImpl     : [192.168.192.15]:5704 [dev] [3.10.1] Starting 8 partition threads and 5 generic threads (1 dedicated for priority tasks)
2019-07-10 10:23:17.317  INFO [productprovider,,,] 11764 --- [           main] c.h.internal.diagnostics.Diagnostics     : [192.168.192.15]:5704 [dev] [3.10.1] Diagnostics disabled. To enable add -Dhazelcast.diagnostics.enabled=true to the JVM arguments.
2019-07-10 10:23:17.317  INFO [productprovider,,,] 11764 --- [           main] com.hazelcast.core.LifecycleService      : [192.168.192.15]:5704 [dev] [3.10.1] [192.168.192.15]:5704 is STARTING
2019-07-10 10:23:17.419  INFO [productprovider,,,] 11764 --- [           main] c.h.i.cluster.impl.MulticastJoiner       : [192.168.192.15]:5704 [dev] [3.10.1] Trying to join to discovered node: [192.168.192.15]:5701
2019-07-10 10:23:17.420  INFO [productprovider,,,] 11764 --- [cached.thread-3] com.hazelcast.nio.tcp.TcpIpConnector     : [192.168.192.15]:5704 [dev] [3.10.1] Connecting to /192.168.192.15:5701, timeout: 0, bind-any: true
2019-07-10 10:23:17.420  INFO [productprovider,,,] 11764 --- [cached.thread-3] c.h.nio.tcp.TcpIpConnectionManager       : [192.168.192.15]:5704 [dev] [3.10.1] Established socket connection between /192.168.192.15:4670 and /192.168.192.15:5701
2019-07-10 10:23:23.427  INFO [productprovider,,,] 11764 --- [ration.thread-2] com.hazelcast.system                     : [192.168.192.15]:5704 [dev] [3.10.1] Cluster version set to 3.10
2019-07-10 10:23:23.429  INFO [productprovider,,,] 11764 --- [ration.thread-2] c.h.internal.cluster.ClusterService      : [192.168.192.15]:5704 [dev] [3.10.1]

Members {size:4, ver:4} [
    Member [192.168.192.15]:5701 - 34da2d53-d8d6-4959-aaf2-bd6cda24f0fa
    Member [192.168.192.15]:5702 - 70b959c7-ebb5-4226-b343-76e7354cbd94
    Member [192.168.192.15]:5703 - 02829ed9-0ddf-4675-ba9e-15c1c03b4a50
    Member [192.168.192.15]:5704 - 6ecd17c1-425c-4be0-8914-827f51fdbf3e this
]

2019-07-10 10:23:23.431  INFO [productprovider,,,] 11764 --- [thread-Acceptor] com.hazelcast.nio.tcp.TcpIpAcceptor      : [192.168.192.15]:5704 [dev] [3.10.1] Accepting socket connection from /192.168.192.15:4674
2019-07-10 10:23:23.432  INFO [productprovider,,,] 11764 --- [thread-Acceptor] c.h.nio.tcp.TcpIpConnectionManager       : [192.168.192.15]:5704 [dev] [3.10.1] Established socket connection between /192.168.192.15:5704 and /192.168.192.15:4674
2019-07-10 10:23:23.436  INFO [productprovider,,,] 11764 --- [ration.thread-0] c.h.internal.cluster.ClusterService      : [192.168.192.15]:5703 [dev] [3.10.1]

Members {size:4, ver:4} [
    Member [192.168.192.15]:5701 - 34da2d53-d8d6-4959-aaf2-bd6cda24f0fa
    Member [192.168.192.15]:5702 - 70b959c7-ebb5-4226-b343-76e7354cbd94
    Member [192.168.192.15]:5703 - 02829ed9-0ddf-4675-ba9e-15c1c03b4a50 this
    Member [192.168.192.15]:5704 - 6ecd17c1-425c-4be0-8914-827f51fdbf3e
]

2019-07-10 10:23:23.437  INFO [productprovider,,,] 11764 --- [cached.thread-1] com.hazelcast.nio.tcp.TcpIpConnector     : [192.168.192.15]:5703 [dev] [3.10.1] Connecting to /192.168.192.15:5704, timeout: 0, bind-any: true
2019-07-10 10:23:23.438  INFO [productprovider,,,] 11764 --- [cached.thread-1] c.h.nio.tcp.TcpIpConnectionManager       : [192.168.192.15]:5703 [dev] [3.10.1] Established socket connection between /192.168.192.15:4675 and /192.168.192.15:5704
2019-07-10 10:23:23.438  INFO [productprovider,,,] 11764 --- [thread-Acceptor] com.hazelcast.nio.tcp.TcpIpAcceptor      : [192.168.192.15]:5704 [dev] [3.10.1] Accepting socket connection from /192.168.192.15:4675
2019-07-10 10:23:23.439  INFO [productprovider,,,] 11764 --- [thread-Acceptor] c.h.nio.tcp.TcpIpConnectionManager       : [192.168.192.15]:5704 [dev] [3.10.1] Established socket connection between /192.168.192.15:5704 and /192.168.192.15:4675
2019-07-10 10:23:23.440  INFO [productprovider,,,] 11764 --- [cached.thread-5] com.hazelcast.nio.tcp.TcpIpConnector     : [192.168.192.15]:5704 [dev] [3.10.1] Connecting to /192.168.192.15:5702, timeout: 0, bind-any: true
2019-07-10 10:23:23.444  INFO [productprovider,,,] 11764 --- [cached.thread-5] c.h.nio.tcp.TcpIpConnectionManager       : [192.168.192.15]:5704 [dev] [3.10.1] Established socket connection between /192.168.192.15:4676 and /192.168.192.15:5702
2019-07-10 10:23:23.444  INFO [productprovider,,,] 11764 --- [cached.thread-2] com.hazelcast.nio.tcp.TcpIpConnector     : [192.168.192.15]:5704 [dev] [3.10.1] Connecting to /192.168.192.15:5703, timeout: 0, bind-any: true
2019-07-10 10:23:23.447  INFO [productprovider,,,] 11764 --- [thread-Acceptor] com.hazelcast.nio.tcp.TcpIpAcceptor      : [192.168.192.15]:5703 [dev] [3.10.1] Accepting socket connection from /192.168.192.15:4677
2019-07-10 10:23:23.447  INFO [productprovider,,,] 11764 --- [cached.thread-2] c.h.nio.tcp.TcpIpConnectionManager       : [192.168.192.15]:5704 [dev] [3.10.1] Established socket connection between /192.168.192.15:4677 and /192.168.192.15:5703
2019-07-10 10:23:23.447  INFO [productprovider,,,] 11764 --- [thread-Acceptor] c.h.nio.tcp.TcpIpConnectionManager       : [192.168.192.15]:5703 [dev] [3.10.1] Established socket connection between /192.168.192.15:5703 and /192.168.192.15:4677
2019-07-10 10:23:24.422  INFO [productprovider,,,] 11764 --- [           main] com.hazelcast.core.LifecycleService      : [192.168.192.15]:5704 [dev] [3.10.1] [192.168.192.15]:5704 is STARTED

咱們先在8006端口的進程中添加一個一級配件

2019-07-10 10:23:43.408 DEBUG [productprovider,7c69f637b05303a0,7c69f637b05303a0,false] 11764 --- [nio-8006-exec-1] c.c.p.d.L.saveProviderProductLevel1      : ==>  Preparing: insert into product_level (id,code,name,sort,level,product_type) values (?,?,?,?,?,?)
2019-07-10 10:23:43.431 DEBUG [productprovider,7c69f637b05303a0,7c69f637b05303a0,false] 11764 --- [nio-8006-exec-1] c.c.p.d.L.saveProviderProductLevel1      : ==> Parameters: 2459048597577007931(Long), 10003(String), 汽車項鍊(String), 3(Integer), 1(Integer), 車品(String)
2019-07-10 10:23:43.454 DEBUG [productprovider,7c69f637b05303a0,7c69f637b05303a0,false] 11764 --- [nio-8006-exec-1] c.c.p.d.L.saveProviderProductLevel1      : <==    Updates: 1

而後咱們在8106端口進程中添加一個二級汽車配件分類,咱們來看一看是否能夠獲取一級配件分類的緩存

根據日誌打印

2019-07-10 10:26:02.587 DEBUG [productprovider,deca9b0c23fc065f,deca9b0c23fc065f,false] 10216 --- [nio-8106-exec-1] c.c.p.d.L.saveProviderProductLevel2      : ==>  Preparing: insert into product_level (id,code,name,sort,level,picture_url) values (?,?,?,?,?,?)
2019-07-10 10:26:02.613 DEBUG [productprovider,deca9b0c23fc065f,deca9b0c23fc065f,false] 10216 --- [nio-8106-exec-1] c.c.p.d.L.saveProviderProductLevel2      : ==> Parameters: 2459048746827121467(Long), 100201(String), 高級項鍊(String), 1(Integer), 2(Integer), sdfasgfd23dg(String)
2019-07-10 10:26:02.635 DEBUG [productprovider,deca9b0c23fc065f,deca9b0c23fc065f,false] 10216 --- [nio-8106-exec-1] c.c.p.d.L.saveProviderProductLevel2      : <==    Updates: 1
2019-07-10 10:26:02.664  INFO [productprovider,deca9b0c23fc065f,deca9b0c23fc065f,false] 10216 --- [nio-8106-exec-1] c.c.p.controller.LevelController         : 緩存獲取{"code":"10003","id":2459069885582410555,"level":1,"name":"汽車項鍊","productListProviders":[{"code":"100201","id":2459069910278472507,"level":2,"name":"高級項鍊","pictureUrl":"sdfasgfd23dg","productListProviders":[],"sort":1}],"productType":"TYPE2","sort":3}
2019-07-10 10:26:02.666 DEBUG [productprovider,deca9b0c23fc065f,deca9b0c23fc065f,false] 10216 --- [nio-8106-exec-1] c.c.p.dao.LevelDao.addLevelToLevel       : ==>  Preparing: update product_level set parent_id=? where id=?
2019-07-10 10:26:02.666 DEBUG [productprovider,deca9b0c23fc065f,deca9b0c23fc065f,false] 10216 --- [nio-8106-exec-1] c.c.p.dao.LevelDao.addLevelToLevel       : ==> Parameters: 2459048597577007931(Long), 2459048746827121467(Long)
2019-07-10 10:26:02.689 DEBUG [productprovider,deca9b0c23fc065f,deca9b0c23fc065f,false] 10216 --- [nio-8106-exec-1] c.c.p.dao.LevelDao.addLevelToLevel       : <==    Updates: 1

若是此處一級配件是從數據庫中查出來的,那麼此處的日誌將不會有緩存獲取4個字,說明該緩存已經同步到了不一樣進程中。

相關文章
相關標籤/搜索