Spring Boot集成geode快速入门Demo

1.什么是geode?

Apache Geode 是一个数据管理平台,可在广泛分布的云架构中提供对数据密集型应用程序的实时、一致的访问。Geode 跨多个进程汇集内存、CPU、网络资源和可选的本地磁盘,以管理应用程序对象和行为。它使用动态复制和数据分区技术来实现高可用性、改进的性能、可伸缩性和容错性。除了作为分布式数据容器之外,Geode 还是一个内存数据管理系统,可提供可靠的异步事件通知和有保证的消息传递。(gemfire是它的商业版本)

主要组件概念

  • locator:locator 定位器,类似于 zk ,进行选举协调,服务发现等功能,我们的应用程序链接的是 locator 定位器
  • server:真正提供缓存服务的功能
  • region:对数据进行区域划分,类似数据库中表的概念
  • gfsh:Geode 的命令行控制台
  • client:链接 Geode 服务的客户端

Geode 特性

  • 高读写吞吐量
  • 低且可预测的延迟
  • 高可扩展性
  • 持续可用性
  • 可靠的事件通知
  • 数据存储上的并行应用程序行为
  • 无共享磁盘持久性
  • 降低拥有成本
  • 客户/服务器的单跳能力
  • 客户/服务器安全
  • 多站点数据分布
  • 连续查询
  • 异构数据共享

Geode 与 Redis

总体来说 Geode 的功能包含 Redis 的功能,但是还是有一些迥异点的。

  1. 定位不同:Geode 定位数据管理平台,强调实时一致性, Redis 高速缓存。
  2. 集群:Geode 天然支持集群,节点是对等的,Redis 集群去中心化,主从复制。
  3. 部署方式:Geode 有点对点方式、C/S 方式、WAN 多数据中心方式,而 Redis 是 C/S 主从方式、集群方式。
  4. 查询:Geode 支持 OQL 查询、函数计算、Redis KV 查询
  5. 发布订阅:Geode 支持稳定的时间订阅和连续查询, Redis 的发布订阅貌似用的并不多。
  6. 事务支持:Geode 支持的也是存内存的 ACID 事务,对落盘的事务支持也不行,Redis 支持的也是内存型事务,相对来说,ACID 更一些。
  7. Geode 支持 Redis 的协议模拟,有 Redis Adaper。

     整理了这份面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题

    需要全套面试笔记【点击此处】即可免费获取

应用场景

目前12306.cn就是用Geode作为高性能分布式缓存计算框架 。Apache Geode适用于各种需要处理大规模分布式数据的场景。以下是几个典型的应用场景:

  1. 实时分析系统:Geode的高性能和实时一致性特性使得它成为实时分析系统的理想选择。例如,金融领域的股票交易分析、电商领域的用户行为分析等。
  2. 缓存系统:由于Geode具有高性能和可扩展性,它可以用作缓存系统,为应用程序提供快速的数据访问。例如,在Web应用中缓存用户会话数据或热点数据。
  3. 分布式计算:Geode可以作为分布式计算框架的一部分,提供数据处理和存储的支持。例如,在Hadoop生态系统中集成Geode作为存储后端或消息中间件。
  4. 事务处理系统:由于Geode提供了高可用性和容错性,它可以用于构建需要强一致性和高可用性的事务处理系统。例如,在线支付系统或银行交易系统。

2.环境搭建

pull the container image

 

bash

复制代码

docker pull apachegeode/geode

This may take a while depending on your internet connection, but it's worth since this is a one time step and you endup with a container that is tested and ready to be used for development. It will download Gradle and as part of the build, project dependencies as well. Starting a locator and gfsh,Then you can start gfsh as well in order to perform more commands:

 

yaml

复制代码

docker run -it -p 10334:10334 -p 7575:7575 -p 40404:40404 -p 1099:1099 apachegeode/geode gfsh

From this point you can pretty much follow Apache Geode in 5 minutes for example:

 

css

复制代码

gfsh> start locator --name=locator1 --port=10334 gfsh> start server --name=server1 --server-port=40404

query cluster status

 

复制代码

list members

Create a region:

 

css

复制代码

gfsh> create region --name=hello --type=REPLICATE gfsh> create region --name=People --type=REPLICATE

query region

 

ini

复制代码

gfsh>query --query="select * from /hello"

clean region

 

css

复制代码

remove --all --region=People

Finally, shutdown the Geode server and locator:

 

ini

复制代码

gfsh> shutdown --include-locators=true

3.代码工程

实验目的

实现springboot对geode插入和查询操作

pom.xml

 

xml

复制代码

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springboot-demo</artifactId> <groupId>com.et</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>gemfire</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.geode</groupId> <artifactId>spring-geode-starter-session</artifactId> <version>1.4.13</version> </dependency> <dependency> <groupId>org.springframework.geode</groupId> <artifactId>spring-geode-starter-test</artifactId> <version>1.4.13</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.geode</groupId> <artifactId>spring-geode-starter</artifactId> <version>1.4.13</version> </dependency> </dependencies> </project>

controller

 

typescript

复制代码

package com.et.gemfire.controller; import com.et.gemfire.entity.People; import com.et.gemfire.repository.PersonRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; @RestController public class HelloWorldController { @RequestMapping("/hello") public Map<String, Object> showHelloWorld(){ Map<String, Object> map = new HashMap<>(); map.put("msg", "HelloWorld"); return map; } @Autowired PersonRepository personRepository; @RequestMapping(value = "/findById", method = RequestMethod.GET) public Object findById(String id) { return personRepository.findById(id); } @RequestMapping(value = "/findAll", method = RequestMethod.GET) public Object findAll() { return personRepository.findAll(); } @RequestMapping(value = "/insert", method = RequestMethod.POST) public Object insert(@RequestBody People bean) { personRepository.save(bean); return "add OK"; } }

respository

 

kotlin

复制代码

package com.et.gemfire.repository; import com.et.gemfire.entity.People; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; @Repository public interface PersonRepository extends CrudRepository<People, String> {}

entity

 

typescript

复制代码

package com.et.gemfire.entity; import org.springframework.data.annotation.Id; import org.springframework.data.gemfire.mapping.annotation.Region; import java.io.Serializable; @Region(value = "People") public class People implements Serializable { @Id private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }

DemoApplication.java

 

kotlin

复制代码

package com.et.gemfire; import com.et.gemfire.entity.People; import org.apache.geode.cache.client.ClientRegionShortcut; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.gemfire.cache.config.EnableGemfireCaching; import org.springframework.data.gemfire.config.annotation.EnableCachingDefinedRegions; import org.springframework.data.gemfire.config.annotation.EnableEntityDefinedRegions; import org.springframework.data.gemfire.config.annotation.EnablePdx; @SpringBootApplication @EnableEntityDefinedRegions(basePackageClasses = People.class, clientRegionShortcut = ClientRegionShortcut.PROXY ) // 只是当代理转发的操作 @EnablePdx @EnableCachingDefinedRegions @EnableGemfireCaching public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

4.测试

启动SpringBoot应用

测试插入

测试查询

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值