spring-boot整合hazelcast实现高频交易撮合引擎缓存部分入门级

简介: 领先的内存数据网格 Hazelcast IMDG 业界速度最快,可扩展性最高的内存数据网格,其中速度,可扩展性和连续处理是部署的核心要求。

简介:
官网:https://hazelcast.com/
一.可用性
Hazelcast的分布式架构为连续群集正常运行时间提供冗余,并始终提供可用数据,以满足最苛刻的应用需求。容量随着需求弹性增长,而不会影响性能或可用性。
二.速度
Hazelcast In-Memory解决方案可以更快地补充数据库和数量级。时间就是金钱; 为您的新应用提供推动业务发展所需的微秒响应时间。将数据保留保留在数据库中,并利用Hazelcast以数字速度进行数据处理。
三.用户体验
在数字时代,用户不会等待。无论是复杂的电子商务交易还是机器学习驱动的客户自助服务门户,速度都是一切。Hazelcast客户实际上利用我们的速度在其微小的处理窗口中创造更多时间,以便在更多更深层次的服务中分层,创造卓越的商业价值,同时提供业界最佳的用户体验。
四.风险缓解
有足够的速度和规模,有更多的时间来更彻底地过滤风险。运行更严格的欺诈检测,实时审查策略风险,运行机器学习算法,而不会影响用户体验。Hazelcast实现了无法想象的应用程序。
五.安全
可以说是您业务中最重要的一部分。获得安全错误,其他一切都受到影响。Hazelcast内存解决方案为安全支持带来了全新的功能,正如世界上一些最苛刻的客户环境所证明的那样。
1.导入依赖

<dependency>
            <groupId>com.hazelcast</groupId>
            <artifactId>hazelcast-all</artifactId>
            <version>3.9.4</version>
        </dependency>
<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.3</version>
        </dependency>

2.创建Employee

public class Employee implements Serializable {
    private String name;
    private int age;
    private boolean active;
    private double salary;

    public Employee(String name, int age, boolean active, double salary) {
        this.name = name;
        this.age = age;
        this.active = active;
        this.salary = salary;
    }

    public Employee() {
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public double getSalary() {
        return salary;
    }

    public boolean isActive() {
        return active;
    }

}

3.服务端Demo
3.1 不包含事物

public static void demo() {
        Config cfg = new Config();
        HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
        IMap<String, Employee> mapCustomers = instance.getMap("employee");
        mapCustomers.put("active3", new Employee("zhang",20,true,1.0));
        mapCustomers.put("active4", new Employee("zhang4",20,true,1.0));
        mapCustomers.put("active1", new Employee("zhang1",30,true,1.0));
        mapCustomers.put("active2",  new Employee("zhang3",38,true,1.0));
    }

3.2 包含事物

public static void demo() {
        Config cfg = new Config();
        HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(cfg);
        TransactionOptions options = new TransactionOptions()
                .setTransactionType( TransactionOptions.TransactionType.ONE_PHASE );
        TransactionContext context = hazelcastInstance.newTransactionContext( options );
        context.beginTransaction();
        TransactionalMap<String, Employee> map = context.getMap( "employee" );
        try {
            map.put("active3", new Employee("zhang",20,true,1.0));
            map.put("active4", new Employee("zhang4",20,true,1.0));
            map.put("active1", new Employee("zhang1",30,true,1.0));
            map.put("active2",  new Employee("zhang3",38,true,1.0));
            context.commitTransaction();
        } catch ( Throwable t ) {
            context.rollbackTransaction();
        }
    }

4.客户端Demo

@Test
    public void demo() {
        ClientConfig clientConfig = new ClientConfig();
        //clientConfig.addAddress("127.0.0.1:5701");
        HazelcastInstance client = HazelcastClient.newHazelcastClient(clientConfig);
        IMap<String, Employee> map = client.getMap( "employee" );
        BidiMap<String, String> bidiMap=new DualTreeBidiMap<>();
        map.forEach((k,v)->bidiMap.put(k, JSON.toJSONString(v)));
        //对value的操作 value为对象
        //第一种方式
        Predicate namePredicate = Predicates.equal( "age", 20 );
        Collection<Employee> employees = map.values( namePredicate );
        for (Employee employee : employees) {
            System.out.println(employee.getName());
        }
        //第二种方式
        //active == 代表对象中的active是否启用
        Collection<Employee> employeess =  map.values( new SqlPredicate( "active AND age <= 30" ) );
        for (Employee employee : employeess) {
            String key=bidiMap.getKey(JSON.toJSONString(employee));
            System.out.println("key: "+key);
            map.remove(key);
            System.out.println(employee.getName());
        }
        //第三种方式
        //active == 代表对象中的active是否启用
        EntryObject e = new PredicateBuilder().getEntryObject();
        Predicate predicate = e.is( "active" ).and( e.get( "age" ).lessEqual( 30 ) );
        Collection<Employee> employeessss = map.values( predicate );
        for (Employee employee : employeessss) {
            System.out.println(employee.getName());
        }
        //对key的操作
        Predicate predicate1 = new SqlPredicate("__key like a%");
        Collection<Employee> employeesss = map.values(predicate1);
        for (Employee employee : employeesss) {
            System.out.println(employee.getName());
        }
    }

如果客户端和服务端在同一个服务中就不需要配置

clientConfig.addAddress("127.0.0.1:5701");

5.如果想要初步实现缓存撮合可以使用客户端端例子中的对value操作的第二和第三种方式
6.该例子目前只是入门级,博客中会逐渐深入解析hazelcast如何实现高频撮合系统中的缓存部分。

相关文章
|
7天前
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
42 2
|
2月前
|
缓存 Java 开发工具
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
三级缓存是Spring框架里,一个经典的技术点,它很好地解决了循环依赖的问题,也是很多面试中会被问到的问题,本文从源码入手,详细剖析Spring三级缓存的来龙去脉。
171 24
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
|
2月前
|
存储 缓存 Java
在Spring Boot中使用缓存的技术解析
通过利用Spring Boot中的缓存支持,开发者可以轻松地实现高效和可扩展的缓存策略,进而提升应用的性能和用户体验。Spring Boot的声明式缓存抽象和对多种缓存技术的支持,使得集成和使用缓存变得前所未有的简单。无论是在开发新应用还是优化现有应用,合理地使用缓存都是提高性能的有效手段。
36 1
|
3月前
|
缓存 NoSQL Java
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
Spring Cache 是 Spring 提供的简易缓存方案,支持本地与 Redis 缓存。通过添加 `spring-boot-starter-data-redis` 和 `spring-boot-starter-cache` 依赖,并使用 `@EnableCaching` 开启缓存功能。JetCache 由阿里开源,功能更丰富,支持多级缓存和异步 API,通过引入 `jetcache-starter-redis` 依赖并配置 YAML 文件启用。Layering Cache 则提供分层缓存机制,需引入 `layering-cache-starter` 依赖并使用特定注解实现缓存逻辑。
834 1
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
|
3月前
|
缓存 Java Spring
Spring缓存实践指南:从入门到精通的全方位攻略!
【8月更文挑战第31天】在现代Web应用开发中,性能优化至关重要。Spring框架提供的缓存机制可以帮助开发者轻松实现数据缓存,提升应用响应速度并减少服务器负载。通过简单的配置和注解,如`@Cacheable`、`@CachePut`和`@CacheEvict`,可以将缓存功能无缝集成到Spring应用中。例如,在配置文件中启用缓存支持并通过`@Cacheable`注解标记方法即可实现缓存。此外,合理设计缓存策略也很重要,需考虑数据变动频率及缓存大小等因素。总之,Spring缓存机制为提升应用性能提供了一种简便快捷的方式。
48 0
|
3月前
|
缓存 NoSQL Java
惊!Spring Boot遇上Redis,竟开启了一场缓存实战的革命!
【8月更文挑战第29天】在互联网时代,数据的高速读写至关重要。Spring Boot凭借简洁高效的特点广受开发者喜爱,而Redis作为高性能内存数据库,在缓存和消息队列领域表现出色。本文通过电商平台商品推荐系统的实战案例,详细介绍如何在Spring Boot项目中整合Redis,提升系统响应速度和用户体验。
60 0
|
3月前
|
消息中间件 监控 Java
解锁Spring Cloud微服务架构的奥秘:深度剖析拆分原则,打造高内聚低耦合的业务创新引擎!
【8月更文挑战第3天】踏入微服务领域,Spring Cloud以丰富组件助力高效系统构建。微服务拆分需遵循原则确保系统高内聚低耦合且能适应变化。首要原则为单一职责,每个服务专注一个业务功能,降低复杂度并提高可维护性。其次,追求高内聚低耦合以减少服务间影响。围绕业务域拆分有助于保持逻辑清晰及团队协作。处理数据一致性问题时,考虑采用最终一致性模型。Spring Cloud提供Eureka、Zuul/Gateway、Sleuth和Config等工具支持服务发现、路由、跟踪及配置管理,共同构建灵活健壮的微服务架构。
73 2
|
4月前
|
存储 缓存 分布式计算
高并发架构设计三大利器:缓存、限流和降级问题之缓存的应对策略问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之缓存的应对策略问题如何解决
|
4月前
|
缓存 NoSQL Java
Spring Boot中的分布式缓存实现
Spring Boot中的分布式缓存实现
|
4月前
|
缓存 NoSQL Java
在Spring Boot中实现分布式缓存策略
在Spring Boot中实现分布式缓存策略