A Clojure library designed to render velocity template for ring in clojure.
Adds dependency in leiningen project.clj:
[ring.velocity "0.1.0-SNAPSHOT"]
Create a directory named templates
in your project directory to keep all velocity templates.
Create a template templates/test.vm
:
hello,$name,your age is $age.
Use ring.velocity in your namespace:
(use '[ring.velocity.core :only [render]])
Use render
function to render template with vars:
(render "test.vm" :name "dennis" :age 29)
The test.vm
will be interpreted equals to:
hello,dennis,your age is 29.
Use ring.velocity in compojure:
(defroutes app-routes
(GET "/" [] (render "test.vm" :name "dennis" :age 29))
(route/not-found "Not Found"))
Use ring.velocity in ring:
(use '[ring.util.response])
(response (render "test.vm" :name "dennis" :age 29))
Custom velocity properties,just put a file named ring-velocity.properties
to your classpath or resource paths.The default velocity properties is in src/default/velocity.properties.
Copyright © 2012 dennis zhuang[killme2008@gmail.com]
Distributed under the Eclipse Public License, the same as Clojure.
Home: https://github.com/killme2008/ring.velocity
文档åQ?a style="color: #006699; ">https://github.com/killme2008/Metamorphosis/wiki
ä¸»è¦æ”¹è¿›å¦‚下åQ?/strong>
1. 为MemcachedClientBuilderæ·ÕdŠ ä¸¤ä¸ªæ–°æ–¹æ³•ç”¨äºŽé…¾|®ï¼š(x¨¬)
2. 用于hibernateçš„XmemcachedClientFactorydæ·ÕdŠ äº†connectTimeout属性,感谢¾|‘å‹ Boli.Jiangçš„èµA(ch¨³)献ã€?/span>
3. æ·ÕdŠ æ–°çš„æžšä‹D¾cÕdž‹ net.rubyeye.xmemcached.transcoders.CompressionModeåQŒç”¨äºŽæŒ‡å®šTranscoder的压¾~©ç±»åž‹ï¼Œé»˜è®¤æ˜¯ZIP压羃åQŒå¯é€‰æ‹©GZIP压羃。TranscoderæŽ¥å£æ·ÕdŠ setCompressionModeæ–ÒŽ(gu¨©)³•ã€?/p>
4. 修改心蟩规则åQŒåŽŸæ¥æ˜¯åœ¨è¿žæŽ¥ç©ºé—²çš„æ—¶å€™å‘起心跻I¼ŒçŽ°åœ¨å˜æˆå›ºå®šæ¯éš”5¿U’å‘起一‹Æ¡å¿ƒè·Ïx£€‹¹‹è¿žæŽ¥ã€?/p>
5. ä¿®æ”¹é»˜è®¤å‚æ•°åQŒé»˜è®¤ç¦ç”¨nagle½Ž—法åQŒé»˜è®¤å°†æ‰šw‡getçš„åˆòq¶å› å下é™åˆ°50ã€?/p>
6. ä¿®å¤bug和改˜q›ï¼ŒåŒ…括åQ?a target="_blank" style="color: #006699; ">161ã€?a target="_blank" style="color: #006699; ">163ã€?a target="_blank" style="color: #006699; ">165ã€?a target="_blank" style="color: #006699; ">169ã€?a target="_blank" style="color: #006699; ">172ã€?73ã€?a target="_blank" style="color: #006699; ">176ã€?a target="_blank" style="color: #006699; ">179å’?a target="_blank" style="color: #006699; ">180ã€?/p>
™å¹ç›®ä¸»é¡µåQ?a target="_blank" style="color: #006699; ">http://code.google.com/p/xmemcached/
™å¹ç›®æ–‡æ¡£åQ?a target="_blank" style="color: #006699; ">http://code.google.com/p/xmemcached/w/list
下è²åQ?a target="_blank" style="color: #006699; ">http://code.google.com/p/xmemcached/downloads/list
æºç åQ?a target="_blank" style="color: #006699; ">https://github.com/killme2008/xmemcached
Mavenä¾èµ–åQ?/strong>
<dependency>
(ssh "/etc/init.d/ssh restart" :sudo true)
(scp "start.sh" "/etc/init.d/start.sh" :sudo true :mode 755)
(if (not (exists? (str "/home/deploy/.ssh")))
(ssh (sudo (str "mkdir -p /home/deploy/.ssh"))))
(deftask :ps "A task to grep process" [process]
(ssh (str "ps aux | grep " process)))
(deftask :start_ha []
(ssh "/etc/init.d/haproxy start")
(call :ps "haproxy"))
(ssh (append "/etc/hosts" "192.168.1.100 web" :sudo true))
(sed <file> <before> <after> :flags <flags> :limit <limit> :backup <backup>)
Equivalent to
sed -i<backup> -r -e "<limit> s/<before>/<after>/<flags>g <filename>"
Limits max output line to 10000.
Adds more documents in wiki: https://github.com/killme2008/clojure-control/wiki
More information please visit it on github: https://github.com/killme2008/clojure-control
Clj-xmemcached is an opensource memcached client for clojure wrapping xmemcached. Xmemcached is an opensource high performance memcached client for java.
To include clj-xmemcached,add:
[clj-xmemcached "0.1.1"]
to your project.clj.
Then we create a memcached client using binary protocol to talk with memcached servers host1:port1 and host2:port2. Valid options including:
:name Client's name
:protocol Protocol to talk with memcached,a string value in text,binary or kestrel,default is text protocol.
:hash Hash algorithm,a string value in consistent or standard,default is standard hash.
:timeout Operation timeout in milliseconds,default is five seconds.
:pool Connection pool size,default is one.
The value 100 is the expire time for the item in seconds.Store functions include xset,xadd,xreplace,xappend and xprepend.Please use doc to print documentation for these functions.
xgets returns a value including a cas value,for example:
And bulk get returns a HashMap contains existent items.
Above codes try to increase/decrease a number in memcached with key "num",and if the item is not exists,then set it to zero.
We use inc function to increase the current value in memcached and try to compare and set it at most Integer.MAX_VALUE times.
xcas can be called as:
The cas-fn is a function to return a new value,set the new value to
Please see the example code in example/demo.clj
Copyright (C) 2011-2014 dennis zhuang[killme2008@gmail.com]
Distributed under the Eclipse Public License, the same as Clojure.
å¼€æºçš„java memcached client—— xmemcachedå‘布1.3.4版本åQŒä¸»è¦æ”¹˜q›å¦‚下:(x¨¬)
1ã€ä¿®å¤ä¸€ä¸ªç›¸å¯¹ä¸¥é‡çš„bugåQŒåœ¨è§£æžäºŒè¿›åˆ¶å议时如果é‡åˆ°ä»ŽæœåŠ¡ç«¯˜q”回的错误信æ¯ï¼Œä¼?x¨¬)导致连接异常æ–å¼€åQ›å¦‚æžœä½ æ²¡æœ‰ä½¿ç”¨binaryåè®®åQŒä¸ä¼?x¨¬)é‡åˆ°æ¤é—®é¢˜ã€?strong>廸™®®ä½¿ç”¨xmemcachedòq¶ä¸”使用二进制å议的朋å‹å‡çñ”到æ¤ç‰ˆæœ¬ã€?/strong>
2ã€å…许XMemcachedClientFactoryBeané…ç½®opTimeout选项ã€?
3ã€æ·»åŠ RoundRobinMemcachedSessionLocatoråQŒè½®è¯¢çš„˜qžæŽ¥é€‰æ‹©å™¨ï¼Œä»…用于kestrel或者memcacheq集群åQŒè¿™äº›åº”用都ä¸è¦æ±‚åŒä¸€ä¸ªkeyè¦ä¿å˜åœ¨å›ºå®šçš„æœåŠ¡å™¨ä¸Šï¼Œè€Œä»…æ˜¯ä½œä¸ºé›†¾Ÿ¤åˆ†æ‹…è´Ÿè½½ã€?/p>
4ã€?a >KetamaMemcachedSessionLocatoræ·ÕdŠ é¢å¤–选项åQŒå…è®?d¨¡ng)R…¾|®æ˜¯å¦å…¼å®?nginx-upstream-consistentåQŒè¿™ä¸ªæ˜¯¾|‘å‹ wolfg1969贡献的patch。如果è¦ä½¿å¾—xmc的一致性哈希算法兼å®?/span>nginx-upstream-consistentåQŒåªè¦è®¾¾|®cwNginxUpstreamConsistent为trueå›_¯åQŒç¤ºèŒƒä»£ç :(x¨¬)
5ã€ä¿®å¤bugåQŒåŒ…æ‹?a class="closed_ref" title="Typo in INFO message: log.info("Creating " + selectorPoolSize + " rectors...");" >issue 132 , issue 142 , issue 133 , issue 139 , issue 142 , issue 145 ,issue 150½{‰ã€?/p>
å¦‚æžœä½ ä‹É用mavenåQŒåªè¦ç®€å•凾U§ç‰ˆæœ¬å³å¯ï¼š(x¨¬)
下è²åœ°å€åQ?/p>
http://code.google.com/p/xmemcached/downloads/list
The idea came from node-control.
Define clusters and tasks for system administration or code deployment, then execute them on one or many remote machines.
Clojure-control depends only on OpenSSH and clojure on the local
control machine.Remote machines simply need a standard sshd daemon.
2.Quick example
Get the current date from the two machines listed in the 'mycluster' config with a single command:
If saved in a file named "controls.clj",run with
Each machine execute "date" command ,and the output form the remote
machine is printed to the console.Exmaple console output
Each line of output is labeled with the address of the machine the
command was executed on. The actual command sent and the user used to
send it is displayed. stdout and stderr output of the remote process
is identified as well as the final exit code of the local ssh
command.
3.How to scp files?
Let's define a new task named deploy
Then it will copy release1.tar.gz and release2.tar.gz to remote
machine's /home/alogin directory.
4.Where is it?
aviator是一个轻é‡çñ”çš„ã€é«˜æ€§èƒ½çš„Javaè¡¨è¾¾å¼æ±‚值器åQŒä¸»è¦åº”用在如工作æµå¼•擎节点æ¡äšg判æ–ã€MQä¸çš„æ¶ˆæ¯˜q‡æ×o(h¨´)以åŠ(qi¨¢ng)æŸäº›ç‰¹å®šçš„业务场景ã€?/p>
自从上次å‘布1.0åŽï¼Œ˜q˜å‘˜q?.01版本åQŒä¸˜q‡éƒ½æ²¡æ€Žä¹ˆå®£ä¼ 。这‹Æ¡å‘布一ä¸?.0的里½E‹ç¢‘版本åQŒä¸»è¦æ”¹˜q›å¦‚下:(x¨¬)
1ã€å®Œæ•´æ”¯æŒä½˜qç®—½W¦ï¼Œä¸Žjava完全一致。ä½é¢„ç®—½W¦å¯¹å®žçްbit set之类的需求还是éžå¸¸å¿…™åÈš„ã€?
2ã€æ€§èƒ½ä¼˜åŒ–åQŒåã^凿€§èƒ½æå‡100%åQŒå‡½æ•°è°ƒç”¨æ€§èƒ½æå‡200%åQŒæœ€æ–°çš„与groovyå’ŒJEXL的性能‹¹‹è¯•看这é‡?/p>
http://code.google.com/p/aviator/wiki/Performance
3ã€æ·»åŠ äº†æ–°å‡½æ•ŽÍ¼ŒåŒ…括longã€doubleã€str用于¾cÕdž‹è½¬æ¢åQŒæ·»åŠ äº†string.indexOf函数ã€?/p>
4ã€å®Œå–„了用户手册åQŒæ›´æ–°æ€§èƒ½‹¹‹è¯•ã€?/p>
下è²åœ°å€åQ?nbsp; http://code.google.com/p/aviator/downloads/list
™å¹ç›®ä¸»é¡µåQ?nbsp; http://code.google.com/p/aviator/
用户指å—åQ?nbsp; http://code.google.com/p/aviator/w/list
性能报告åQ?nbsp; http://code.google.com/p/aviator/wiki/Performance
æºç åQ?nbsp; https://github.com/killme2008/aviator
Maven引用åQˆæ„Ÿè°¢è®¸è€å¤§çš„帮助)(j¨ª)åQ?/p>
˜q™ä¸ª™å¹ç›®ç›®å‰ç”¨åœ¨æˆ‘们的MQ产å“ä¸åšæ¶ˆæ¯˜q‡æ×o(h¨´)åQŒä¹Ÿæœ‰å‡ 个公å¸å¤–的用户告诉我他们也在用,ä¸è¿‡ä¼°è®¡ä¸ä¼š(x¨¬)很多。有˜q™ç§éœ€æ±‚的场景˜q˜æ˜¯æ¯”较?y¨u)®‘çš„ã€‚è¿™ä¸ªé¡¹ç›®å®žé™…ä¸Šæ˜¯äØ“(f¨´)我们的MQå®šåˆ¶çš„ï¼Œæˆ‘ä¸»è¦æƒ³åšåˆ°˜q™ä¹ˆå‡ 点åQ?/p>
åQ?åQ‰æŽ§åˆ¶ç”¨æˆ¯‚ƒ½å¤Ÿä‹É用的函数åQŒä¸å…许调用ä»ÖM½•ä¸å—控制的函数ã€?/p>
åQ?åQ‰è½»é‡çñ”åQŒä¸éœ€è¦åµŒå…¥groovy˜q™ä¹ˆå¤§çš„脚本引擎åQŒæˆ‘们åªéœ€è¦ä¸€ä¸ªå‰ªè£è¿‡çš„è¡¨è¾‘Ö¼è¯æ³•å›_¯ã€?/p>
åQ?åQ‰é«˜æ€§èƒ½åQŒæœ€¾lˆçš„æ€§èƒ½åœ¨æŸäº›åœºæ™¯æ¯”groovy略差åQŒä½†æ˜¯å·²¾léžå¸¸æŽ¥˜q‘ã€?/p>
åQ?åQ‰æ˜“于扩展,å¯ä»¥å®ÒŽ(gu¨©)˜“åœ°æ·»åŠ å‡½æ•°æ‰©å±•åŠŸèƒ½ã€‚è¯æ³•相对固定ã€?/p>
åQ?åQ‰å‡½æ•°çš„调用é¿å…使用åå°„ã€‚å› æ¤æ²¡ä½¿ç”¨dot˜qç®—½W¦çš„函数调用方å¼åQŒè€Œæ˜¯æ›´ç±»ä¼¼cè¯è¨€å’Œluaè¯è¨€çš„å‡½æ•°è°ƒç”¨é£Žæ ¹{€‚函数是一½{‰å…¬æ°‘,seqåº“çš„é£Žæ ¼å¾ˆç¬¦åˆæˆ‘的喜好ã€?/p>
seq˜q™æ¦‚忉|¥è‡ªclojureåQŒæˆ‘ž®†å®žçŽîCº†java.util.Collection接å£çš„类和数¾l„都¿UîCØ“(f¨´)seq集åˆåQŒå¯ä»¥ç»Ÿä¸€ä½¿ç”¨seq库æ“作。例如å‡è®¾æˆ‘有个list:
issue 112:: 新引入的failure模å¼åœ¨å¯åŠ¨çš„æ—¶å€™ï¼Œå¦‚æžœmemcachedæ•…éšœåQŒè¿è¡Œä¸½W¦åˆé¢„期的bug.
issue 113: æ–°å¢žåŠ ä¸€ä¸ªdeleteæ–ÒŽ(gu¨©)³•åQŒå¯ä»¥è®¾¾|®æ“作超æ—?/p>
2ã€æ€§èƒ½è°ƒä¼˜åQŒå˜å‚¨æ“ä½?set/add/replace/prepend/append/cas)的性能æå‡5%ã€?/p>
3ã€ä¿®å¤pom.xmlåQŒä‹Éå¾—xmemcachedå¯ä»¥åœ¨å…¶ä»–机器上¾~–译ã€?/p>
4ã€ä‹É用githubä½œäØ“(f¨´)æºç 仓库åQŒç‰ˆæœ¬ç®¡ç†ä‹É用git替æ¢svnåQŒæºç è{¿UÕdˆ°
https://github.com/killme2008/xmemcached
新版本下载地å€åQ?/p> http://code.google.com/p/xmemcached/downloads/list
使用mavenå¯ä»¥ç›´æŽ¥å¼•用åQ?nbsp;
<dependency>™å¹ç›®æ–‡æ¡£åQ?/p>
http://code.google.com/p/xmemcached/w/list
Feature | Supported | Comment |
---|---|---|
define | yes | |
lambda | yes | |
variable lookup | yes | |
primitive procedure evaluation | yes | |
compound procedure evaluation | yes | no tail recursion yet |
if | yes | |
cond | yes | |
let | yes |
|
let* | yes |
no named let* yet |
letrec | no | |
begin | yes |
|
set! | yes |
|
quote | yes | |
quasiquote | no | |
unquote | no | |
delay | no | |
define-syntax | no |
1ã€å¼•入了failure模å¼åQŒæ‰€è°“failureæ¨¡å¼æ˜¯æŒ‡åœ¨å½“一个memcachedç”׃ºŽå„ç§åŽŸå› ä¸å¯ç”¨çš„æƒ…况下,å‘å¾€˜q™ä¸ªèŠ‚ç‚¹çš„è¯·æ±‚å°†ç›´æŽ¥æŠ›å‡ºå¼‚å¸¸åQŒè€Œéžä½¿ç”¨ä¸‹ä¸€ä¸ªå¯ç”¨çš„节点。具体å¯ä»¥çœ‹memachedçš?a >˜q™ä¸ªæ–‡æ¡£ã€‚默认ä¸å¯ç”¨åQŒå¯ç”¨failure模å¼å¾ˆç®€å•:(x¨¬)
也å¯ä»¥é‡‡ç”¨springé…ç½®ã€?br />
2ã€åœ¨å¯ç”¨failure模å¼çš„æƒ…况下åQŒå…è®æ€Ø“(f¨´)æ¯ä¸ªmemcached讄¡½®ä¸€ä¸ªå¤‡ä»½èŠ‚ç‚¹ï¼Œå½“ä¸»èŠ‚ç‚¹æŒ‚æŽ‰çš„æƒ…å†µä¸‹åQŒä¼š(x¨¬)ž®†è¯·æ±‚è{交给备䆾节点åQŒä¸»èŠ‚ç‚¹æ¢å¤åŽåˆè‡ªåŠ¨åˆ‡æ¢åˆîC¸»èŠ‚ç‚¹ã€‚è¯·æ³¨æ„åQŒè¦è®„¡½®å¤‡ä†¾èŠ‚ç‚¹çš„å‰ææ˜¯å¯ç”¨failure模å¼ã€‚å‡è®¾æˆ‘们已¾l有两个memcached节点åQšhost1:portå’Œhost2:portåQŒäØ“(f¨´)host1:port讄¡½®ä¸€ä¸ªå¤‡ä»½èŠ‚ç‚¹host3:portå¯ä»¥å®žçŽ°ä¸ºï¼š(x¨¬)
关于failure模å¼å’Œstandby节点更多内容å¯ä»¥å‚è€?a href="http://www.aygfsteel.com/killme2008/archive/2010/12/28/341731.html">˜q™ç¯‡blog.
3ã€ä¿®æ£BUG和新功能åQŒåŒ…æ‹?a >issue 104,issue 105,issue 107½{‰ã€?br />
™å¹ç›®ä¸»é¡µ http://code.google.com/p/xmemcached/
下è²åœ°å€ http://code.google.com/p/xmemcached/downloads/list
ç”¨æˆ·æŒ‡å— http://code.google.com/p/xmemcached/wiki/TableOfContents
å¦‚æžœä½ ä‹É用mavenæž„å¾åQŒå¯ä»¥ç›´æŽ¥å¼•用:(x¨¬)
æ›´æ–°åQšå‘å¸?.3.1äº†ï¼Œå¦‚æžœä½ è¿˜åœ¨ä‹Éç”?.3.0åQŒå¾è®®å‡¾U§ã€?.3.0å› äØ“(f¨´)改å˜äº†memcachedåœ°å€æœåŠ¡å™¨é¡ºåºï¼Œå¯èƒ½å¯ÆD‡´åŽŸæœ‰çš„ç¼“å˜å¤±æ•ˆã€?br />