hazelcast入门教程

这是我撰写的有关Hazelcast的一系列文章的延续。 我强烈建议您阅读其他内容: 第1 部分 , 第2 部分 , 第3 部分和第4部分 。

一气呵成的东西

这篇文章中没有Hazelcast专用代码。 让我重复一遍。 这篇文章中没有Hazelcast专用代码。 这是因为Hazelcast的优秀人员生产的产品执行不同的标准。 这样可以选择客户。 Hazelcast实现的那些标准之一是内存缓存。

JCache呢?

JCache(JSR 107)仅用于Java。 Memcached协议客户端已跨多种语言实现,因此不能将其固定为一种语言。 在我看来,实施memcached协议是明智之举,因为它使Hazelcast不仅仅是“ Java事物”。

为什么要使用Hazelcast?

很好的问题! 如果可以使用任何 Memcached服务器,为什么要使用Hazelcast。 好吧,说实话,除非一个人在多台服务器之间共享一个数据库,否则甚至可能不需要缓存! 如果确实需要缓存解决方案,这就是为什么我会选择Hazelcast的原因:

  1. 自动实时备份–我没有读过至少一次没有备份过的一种Hazelcast数据类型。 只需站起来两个实例,一个实例从另一个实例中脱机,即可获得全部收益。
  2. 安全性–如果需要缓存的服务器位于不同的网络中,那么使用Hazelcast可以更轻松地制定防火墙规则。 假设有n台服务器需要缓存数据,其中n / 2台位于192.168.1.x网络上,而其他n / 2则在10.10.1.x网络上。 通过在任一网络上设置一个Hazelcast实例,所有n台计算机都可以共享一个缓存。 Hazelcast实例可以配置为仅与另一侧的实例进行对话。 这使得防火墙规则编写器的工作更加容易,因为只需要为两个服务器而不是n台计算机制定一条规则,然后192.168.1.x机器就可以与其Hazelcast节点通信,而10.10.1.x机器就可以与其网络通信。 Hazelcast节点,并让Hazelcast实例完成其余工作。

我从不喜欢仅显示“嗡嗡”的示例,因此我将展示Java客户端如何与Python客户端共享数据。

建立

我正在使用Java 1.7和Python 3.4。 不幸的是,两种语言都没有开箱即用的内存缓存支持,所以我去寻找已经写好的客户端。

Java

我发现Spymemcached for Java。 我只是略述其能力的表面。 可以从Maven中获取。 这是项目的pom.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"><modelVersion>4.0.0</modelVersion><groupId>com.darylmathison</groupId><artifactId>Memcache</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><properties><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><build><plugin><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><showDeprecation>true</showDeprecation></configuration></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><version>1.3.2</version><executions><execution><goals><goal>java</goal></goals></execution></executions><configuration><mainClass>com.darylmathison.memcache.Main</mainClass></configuration></plugin></plugins></build><dependencies><dependency><groupId>net.spy</groupId><artifactId>spymemcached</artifactId><version>2.11.5</version></dependency></dependencies></project><dependency><groupId>org.apache.camel</groupId><artifactId>camel-servlet</artifactId></dependency><dependency><groupId>org.apache.camel</groupId><artifactId>camel-metrics</artifactId></dependency><dependency><groupId>org.apache.camel</groupId><artifactId>camel-swagger</artifactId></dependency><dependency><groupId>org.apache.camel</groupId><artifactId>camel-jackson</artifactId></dependency>

Python

接下来,我找到了适用于Python的python3-memcached 。 它使用经典的setup.py过程进行安装。

服务器

如果服务器丢失,则没有太多的缓存。 人们可以在下载Hazelcast hazelcast.org/download根据自己的操作系统,内容,CD提取到的bin目录并运行server.bat或服务器脚本。 随着设置服务器的进行,这是我做过的最简单的事情。

情况

我试图使价格更便宜的“昂贵”操作是斐波那契数。 由于Python和Java都可以理解unicode,因此将值存储为unicode字符串。 密钥是一个unicode字符串,其中包含序列号或到达该序列所需的轮数。

Java

package com.darylmathison.memcache;import java.io.IOException;
import java.net.InetSocketAddress;
import net.spy.memcached.MemcachedClient;/**** @author Daryl*/
public class Main {/*** @param args the command line arguments*/public static void main(String[] args) {try {MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 5701));for(int i = 2; i < 20; i++) {System.out.println("value of round " + i + " is " + fibonacci(i, client));}client.shutdown();} catch(IOException ioe) {ioe.printStackTrace();}}private static long fibonacci(int rounds, MemcachedClient client) {String cached = (String)client.get(String.valueOf(rounds));if(cached != null) {System.out.print("cached ");return Long.parseLong(cached);}long[] lastTwo = new long[] {1, 1};for(int i = 0; i < rounds; i++) {long last = lastTwo[1];lastTwo[1] = lastTwo[0] + lastTwo[1];lastTwo[0] = last;}client.set(String.valueOf(rounds), 360, String.valueOf(lastTwo[1]));return lastTwo[1];}
}

Python

这是Python客户端。 作为一名pythonian,我尝试成为尽可能的pythonic。

import memcacheclient = memcache.Client(['localhost:5701'])def fibonacci(round):f = [1, 1, 1]for i in range(round):f[-1] = sum(f[:2])f[0], f[1] = f[1], f[2]return f[2]def retrievefib(round):fib = client.get(str(round))if not fib:fib = fibonacci(round)client.set(str(round), str(fib))else:print("cached")return fibdef main():store = [ x for x in range(20) if x % 2 == 0]for i in store:retrievefib(i)for i in range(20):print(retrievefib(i))if __name__ == "__main__":main()

结论

好吧,这是Hazelcast作为幕后力量的例子。 我认为这是最耀眼的地方。 无需创建全新的,巧妙的分布式应用程序即可利用Hazelcast。 所有要做的就是使用已知的做法,并让Hazelcast进行艰苦的工作。 这个岗位的来源,可以发现这里的Java代码,并在这里为Python代码。

参考资料

  • http://en.wikipedia.org/wiki/Fibonacci_number
  • https://code.google.com/p/spymemcached/
  • https://pypi.python.org/pypi/python3-memcached/1.51

翻译自: https://www.javacodegeeks.com/2014/12/the-beginners-guide-to-hazelcast-part-5.html

hazelcast入门教程

hazelcast入门教程_Hazelcast入门指南第5部分相关推荐

  1. hazelcast入门教程_Hazelcast入门指南第6部分

    hazelcast入门教程 这是有关Hazelcast的一系列文章中的第六篇. 如果一个人没有看过过去的五年,请到表中的内容后 ,我创建赶上. 本地客户 在上一篇文章之后,我决定要去本地化. 是的,我 ...

  2. hazelcast入门教程_Hazelcast入门指南第4部分

    hazelcast入门教程 这是我的Hazelcast系列的第四部分. 如果一个人没有看到其他三个人,我建议一个人去看第1 部分 , 第2 部分和第3部分 . 记录中 日志记录是任何应用程序的重要功能 ...

  3. hazelcast入门教程_Hazelcast入门指南第3部分

    hazelcast入门教程 这是从初学者的角度来看一系列有关如何使用Hazelcast的文章的延续. 如果您还没有阅读最后两个,我鼓励阅读它们: Hazelcast入门指南第1部分 Hazelcast ...

  4. hazelcast入门教程_Hazelcast入门指南第7部分

    hazelcast入门教程 这是解释如何使用Hazelcast的系列文章的续篇. 如果一个人没有阅读其他六个帖子,请转到目录并阅读其他帖子. 不同的地图种类 Hazelcast的MultiMap打破了 ...

  5. hazelcast入门教程_Hazelcast入门指南第2部分

    hazelcast入门教程 本文是我开始使用Hazelcast (分布式内存数据库)的系列文章的继续. 如果尚未阅读第一篇文章,请单击此处 . 分布式馆藏 Hazelcast具有许多可用于存储数据的分 ...

  6. hazelcast入门教程_Hazelcast入门

    hazelcast入门教程 7月,我写了一个博客向Java开发人员介绍erlang,重点介绍了这两种语言之间的一些异同. erlang虚拟机具有许多令人印象深刻的内置功能,其中之一是它们独立于位置且可 ...

  7. 基金投资入门教程-----基金入门

    基金投资入门教程-----基金入门 基金投资入门教程-----基金入门 1.基金入门 什么是基金 基金的三大优势 基金的风险 基金投资入门教程-----基金入门 1.基金入门 什么是基金 基金的三大优 ...

  8. 计算机linux入门教程,Turbolinux入门教程1

    原标题:Turbolinux入门教程1 第一课:什么是Linux 简单地说, Linux 是一套免费使用和自由传播的类 Unix 操作系统,它主要用于基于 Intel x86 系列 CPU 的计算机上 ...

  9. python入门教程pdf-Python入门教程详解.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspPython Python入门教程详解.pdf132页 本文档一 ...

最新文章

  1. c++ empty()函数
  2. 架构设计的真谛:系统与子系统、模块与组件、框架与架构
  3. java-web——第十课 session
  4. apk修改strings.xml后重新打包出错
  5. ISCC2021 真作假时假亦真
  6. ad20如何画出pcb板大小_NAKANISHI分板机主轴在PCB分板上切削案例
  7. WinPcap 获取本地适配器信息
  8. php中unset函数是在哪一章_PHP unset函数好奇怪 -
  9. stats | 概率分布与随机数生成(一)——离散型分布
  10. redhat-5.4故障排除
  11. googletest,笔记20190821
  12. HDU2010 水仙花数【进制】
  13. LAN7500 Mac OS X Device Driver
  14. 你真的懂Linux吗?Linux运维快速入门学习方法
  15. 信息安全管理——网络安全监管
  16. 汇编 - 实验 - 计算X+(Y-Z)=W
  17. 科目三: 济南章丘五号线
  18. 直流斩波电路在matlab中的建模与仿真,毕业设计直流斩波电路的MATLAB建模与仿真...
  19. 质量管理3个过程及相关重点
  20. mathematica动态模型的建模分析

热门文章

  1. POJ3348-Cows【凸包,计算几何】
  2. POJ2352-Stars【树状数组】
  3. 上学要迟到了【最短路转化】
  4. 医院(jzoj 1611)
  5. [XXSY] 构树(prufer序列,树上连通块DP)
  6. SpringCloud Consul自定义服务注册
  7. 业务库负载翻了百倍,我做了什么来拯救MySQL架构
  8. 汇编语言(十四)之判断字符串是否包含数字
  9. 分布式之redis复习精讲
  10. 阿里巴巴开源 Spring Cloud Alibaba,加码微服务生态建设