# clj-xmemcached
Clj-xmemcached is an opensource memcached client for clojure wrapping xmemcached. Xmemcached is an opensource high performance memcached client for java.
## Leiningen Usage
To include clj-xmemcached,add:
[clj-xmemcached “0.1.1”]
</pre> to your project.clj. ## Usage ### Create a client <div style="background-color: #eeeeee;font-size: 13px;border: 1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%"><!--Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/--><span style="color: #000000">(use [clj</span><span style="color: #000000">-</span><span style="color: #000000">xmemcached.core]) (def client (xmemcached </span><span style="color: #000000">"</span><span style="color: #000000">host:port</span><span style="color: #000000">"</span><span style="color: #000000">)) (def client (xmemcached </span><span style="color: #000000">"</span><span style="color: #000000">host1:port1 host2:port2</span><span style="color: #000000">"</span><span style="color: #000000"> :protocol </span><span style="color: #000000">"</span><span style="color: #000000">binary</span><span style="color: #000000">"</span><span style="color: #000000">))</span></div> Then we create a memcached client using binary protocol to talk with memcached servers host1:port1 and host2:port2. Valid options including: <pre>
: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.
### Store items
<!–
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
–> (xset client “ key “ “ dennis “ )
(xset client “ key “ “ dennis “ 100 )
(xappend client “ key “ “ zhuang “ )
(xprepend client “ key “ “ hello, “ )
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.
### Get items
<!–Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/--> (xget client “ key “ )
(xget client “ key1 “ “ key2 “ “ key3 “ )
(xgets client “ key “ )
`
http://www.CodeHighlighter.com/--> (xget client “ key “ )
(xget client “ key1 “ “ key2 “ “ key3 “ )
(xgets client “ key “ )
`</div> xgets returns a value including a cas value,for example: <div style="background-color: #eeeeee;font-size: 13px;border: 1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%"><!--Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/--><span style="color: #000000"> {:value </span><span style="color: #000000">"</span><span style="color: #000000">hello,dennis zhuang</span><span style="color: #000000">"</span><span style="color: #000000">, :</span><span style="color: #0000ff">class</span><span style="color: #000000"> net.rubyeye.xmemcached.GetsResponse, :cas </span><span style="color: #000000">396</span><span style="color: #000000">}</span>
</div> And bulk get returns a HashMap contains existent items. ### Increase/Decrease numbers <div style="background-color: #eeeeee;font-size: 13px;border: 1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%"><!--</div> Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #000000">(xincr client </span><span style="color: #000000">"</span><span style="color: #000000">num</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">) (xdecr client </span><span style="color: #000000">"</span><span style="color: #000000">num</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">) (xincr client </span><span style="color: #000000">"</span><span style="color: #000000">num</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">)</span> </div> 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. ### Delete items <div style="background-color: #eeeeee;font-size: 13px;border: 1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%"><!--Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/--><span style="color: #000000">(xdelete client </span><span style="color: #000000">"</span><span style="color: #000000">num</span><span style="color: #000000">"</span><span style="color: #000000">)</span>
`
Compare and set
<!–Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/--> (xcas client “ key “ inc)
`
http://www.CodeHighlighter.com/--> (xcas client “ key “ inc)
`</div> 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:
<div style="background-color: #eeeeee;font-size: 13px;border: 1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%"><!--Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/--><span style="color: #000000"> (xcas client key cas</span><span style="color: #000000">-</span><span style="color: #000000">fn max</span><span style="color: #000000">-</span><span style="color: #000000">times)</span></div>
The cas-fn is a function to return a new value,set the new value to <div style="background-color: #eeeeee;font-size: 13px;border: 1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%"><!--Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/--><span style="color: #000000">(cas</span><span style="color: #000000">-</span><span style="color: #000000">fn current</span><span style="color: #000000">-</span><span style="color: #000000">value)</span>
`
Shutdown
<!–Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/--> (xshutdown client)
http://www.CodeHighlighter.com/--> (xshutdown client)
Flush
<!–Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/--> (xflush client)
(xflush client (InetSocketAddress. host port))
http://www.CodeHighlighter.com/--> (xflush client)
(xflush client (InetSocketAddress. host port))
Statistics
<!–Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/--> (xstats client)
http://www.CodeHighlighter.com/--> (xstats client)
Example
Please see the example code in example/demo.clj
License
Copyright (C) 2011-2014 dennis zhuang[killme2008@gmail.com]
Distributed under the Eclipse Public License, the same as Clojure.
本文来源于"阿里中间件团队播客",原文发表时间" 2011-10-31"