Hazelcast入门指南第5部分
這是我撰寫的有關(guān)Hazelcast的一系列文章的延續(xù)。 我強(qiáng)烈建議您閱讀其他內(nèi)容: 第1 部分 , 第2 部分 , 第3 部分和第4部分 。
讓人一見傾心的東西?
這篇文章中將沒有Hazelcast專用代碼。 讓我重復(fù)一遍。 這篇文章中將沒有Hazelcast專用代碼。 這是因?yàn)镠azelcast的優(yōu)秀人員生產(chǎn)的產(chǎn)品執(zhí)行不同的標(biāo)準(zhǔn)。 這樣可以選擇客戶。 Hazelcast實(shí)現(xiàn)的那些標(biāo)準(zhǔn)之一是內(nèi)存緩存。
JCache呢?
JCache(JSR 107)僅用于Java。 Memcached協(xié)議客戶端已跨多種語言實(shí)現(xiàn),因此不能將其固定為一種語言。 在我看來,實(shí)施memcached協(xié)議是明智之舉,因?yàn)樗笻azelcast不僅僅是“ Java東西”。
為什么要使用Hazelcast?
很好的問題! 如果可以使用任何內(nèi)存緩存服務(wù)器,為什么要使用Hazelcast。 好吧,說實(shí)話,除非一臺(tái)服務(wù)器在多臺(tái)服務(wù)器之間共享數(shù)據(jù)庫,否則一臺(tái)甚至可能不需要緩存! 如果確實(shí)需要緩存解決方案,這就是為什么我會(huì)選擇Hazelcast的原因:
例
我從不喜歡僅顯示“嗡嗡”的示例,因此我將展示Java客戶端如何與Python客戶端共享數(shù)據(jù)。
設(shè)定
我正在使用Java 1.7和Python 3.4。 不幸的是,兩種語言都沒有開箱即用的內(nèi)存緩存支持,所以我去尋找已經(jīng)寫好的客戶端。
Java
我發(fā)現(xiàn)Spymemcached for Java。 我只是略述其能力的表面。 可以從Maven中獲取。 這是項(xiàng)目的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 。 它使用經(jīng)典的setup.py過程進(jìn)行安裝。
服務(wù)器
如果服務(wù)器丟失,則沒有太多的緩存。 人們可以在下載Hazelcast hazelcast.org/download根據(jù)自己的操作系統(tǒng),內(nèi)容,CD提取到的bin目錄并運(yùn)行server.bat或服務(wù)器腳本。 隨著設(shè)置服務(wù)器的進(jìn)行,這是我做過的最簡單的事情。
情況
我試圖使價(jià)格更便宜的“昂貴”操作是斐波那契數(shù)。 由于Python和Java都可以理解unicode,因此將值存儲(chǔ)為unicode字符串。 密鑰是一個(gè)unicode字符串,其中包含序列號(hào)或到達(dá)該序列所需的輪數(shù)。
碼
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()結(jié)論
好吧,這是Hazelcast作為幕后力量的例子。 我認(rèn)為這是最耀眼的地方。 無需創(chuàng)建全新的,巧妙的分布式應(yīng)用程序即可利用Hazelcast。 所有要做的就是使用已知的做法,并讓Hazelcast進(jìn)行艱苦的工作。 這個(gè)崗位的來源,可以發(fā)現(xiàn)這里的Java代碼,并在這里為Python代碼。
參考文獻(xiàn)
- 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
總結(jié)
以上是生活随笔為你收集整理的Hazelcast入门指南第5部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为Mate60和Mate50配置对比!
- 下一篇: Hamcrest Matchers的高级