zoukankan      html  css  js  c++  java
  • Getting Started With Hazelcast 读书笔记(第二章、第三章)

    第二章 起步

    本章就相当简单粗暴了,用一个个例子说明hazelcast怎么用.

    1.map,set,list这些集合类都是开箱即用的,只要从Hazelcast的实例中获取一份就行.

    2.增加了MultiMap(googleguava也有),允许一个key可以有多个value.

    3.增加了Predicate做数据筛选,可以用默认的sqlpredicates也可自定义,甚至可以自定义分页查询.

     

    client单独出一个jar包了.书里的法子不行.只能自己写.

    首先在pom里面加入依赖

    <dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast-client</artifactId>
    </dependency>

    新建一个client程序来执行:

    import com.hazelcast.client.config.ClientConfig;
    import com.hazelcast.client.HazelcastClient;
    import com.hazelcast.core.HazelcastInstance;
    import com.hazelcast.core.IMap;

    public class SimpleClient {
    public static void main(String[] args) {
    ClientConfig clientConfig = new ClientConfig();
    clientConfig.addAddress("127.0.0.1:5701");
    HazelcastInstance client = HazelcastClient.newHazelcastClient(clientConfig);
    IMap map = client.getMap("manualCities");
    System.out.println("Map Size:" + map.size());
    }
    }

    或者使用ConsoleApp,这个好像更接近原来的例子..

    吐槽一下,才100多页的书还贴代码,印刷体看的很不舒服,建议还是下载到IDE里面看吧..

     

     

    第三章 并发

    除了提供分布式的集合类,Hazelcast也提供了更为底层的并发控制能力,以确保我们的应用程序可以并发执行.

    一.先搞了两个例子,map,queue的多个副本都是公用的,就是说一边改了,到处都变化.这就有可能造成使用上的问题.所以需要引入锁机制

    1.Hazelcast可以调用getLock获取到一个同步锁,在这个基础上就可以避免被多个修改造成问题.

    2.可以对某一个数据项目进行Lock.例如调用map.tryLock()

    二.Hazelcast还支持并发事务回滚

    事务机制为,先锁住相关的数据,在事务中仅仅修改缓存的本地数据,当事务提交时候,一起进行修改.并释放锁.如果事务失败,只要释放锁,并清除本地修改缓存即可.

    三.生成唯一ID

    可以获取getIdGenerator来生成,这个是有缓存的,第二个就从10000开始的,而不是书里面的1百万.

    四.事件分发(MessageListener)--of就是用这个

    Hazelcast也实现了分布式的消息事件(订阅.广播),做消息分发.

    注意:监听Listener是单线程的,这样能确保消息收到的顺序和接收到的顺序是一致的.所以我们必须保证处理消息的进程不能干太多事,否则有可能造成消息堵塞

    例如在TopicListeneronMessage中加上

    Thread.sleep(5000);

    这样就会变成消息处理的时间越来越晚于生成时间,无法及时处理(堵住了)...

    Received message: Tue Dec 01 17:26:16 GMT+08:00 2015 - Member [40.192.191.140]:5701 this says hello:INT: 1548Process Date:Tue Dec 01 17:26:22 GMT+08:00 2015

    Received message: Tue Dec 01 17:26:18 GMT+08:00 2015 - Member [40.192.191.140]:5701 this says hello:INT: 1840Process Date:Tue Dec 01 17:26:27 GMT+08:00 2015

    Received message: Tue Dec 01 17:26:20 GMT+08:00 2015 - Member [40.192.191.140]:5701 this says hello:INT: 225Process Date:Tue Dec 01 17:26:32 GMT+08:00 2015

    Received message: Tue Dec 01 17:26:21 GMT+08:00 2015 - Member [40.192.191.140]:5702 this says hello:INT: 261Process Date:Tue Dec 01 17:26:37 GMT+08:00 2015

    Received message: Tue Dec 01 17:26:22 GMT+08:00 2015 - Member [40.192.191.140]:5701 this says hello:INT: 1876Process Date:Tue Dec 01 17:26:42 GMT+08:00 2015

    Received message: Tue Dec 01 17:26:23 GMT+08:00 2015 - Member [40.192.191.140]:5702 this says hello:INT: 1308Process Date:Tue Dec 01 17:26:47 GMT+08:00 2015

    解决办法也很简单,在listener里面使用ExecutorService对消息另外起一个线程处理.

  • 相关阅读:
    java 备忘
    C++ 命名规范 (转)
    代码格式规范
    using namespace 由来
    结构体数组 初始化(转)
    Java Servlet系列之Servlet生命周期
    进程,内存,管理 ps,pstree,top,free,vmstat,iftop,lsof,查看网速
    网络基础知识-
    进程作业管理2-kill,前后台作业,并行执行
    计划任务cron,date,时间同步ntp,chrony
  • 原文地址:https://www.cnblogs.com/imparser/p/5016662.html
Copyright © 2011-2022 走看看