Memcached服務端安裝
libevent安裝
cd /tmp wget http://monkey.org/~provos/libevent-1.4.14b-stable.tar.gz tar -zxf libevent-1.4.14b-stable.tar.gz cd libevent-1.4.14b-stable ./configure --prefix=/opt/libevent/ make make install
Memcached安裝
cd /tmp wget -N http://www.memcached.org/files/memcached-1.4.17.tar.gz tar -zxf memcached-1.4.17.tar.gz cd memcached-1.4.17 ./configure --prefix=/opt/memcached --enable-64bit --with-libevent=/opt/libevent make make install
編寫Memcached啟動腳本
vi /etc/init.d/memcached
#!/bin/sh
# chkconfig: - 50 50
# description: memcached
# 以下要自己配置
CMD=/opt/memcached/bin/memcached
MEMORY=128
USER=root
HOST=master
PORT=11211
CONNECTION=32
PID=/tmp/memcached.pid
start() {
echo -n $"memcached starting... "
$CMD -d -m $MEMORY -u $USER -l $HOST -p $PORT -c $CONNECTION -P $PID
echo
}
stop() {
echo -n $"memcached shutting down... "
kill `cat $PID`
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0將memcached加入系統啟項
chmod +x /etc/init.d/memcached chkconfig --add /etc/init.d/memcached chkconfig --level 35 memcached on chkconfig --level 35 iptables off
啟動Memcached
/opt/memcached/bin/memcached -d -m 128 -u root -l master -p 11211 -c 32 -P /tmp/memcached.pid service memcached restart
基于上面,其他一些選項的含義
-d 指定memcached進程作為一個守護進程啟動 -m <num> 指定分配給memcached使用的內存,單位是MB -u <username> 運行memcached的用戶 -l <ip_addr> 監聽的服務器IP地址,如果有多個地址的話,使用逗號分隔,格式可以為“IP地址:端口號”,例如:-l 指定192.168.0.184:19830,192.168.0.195:13542;端口號也可以通過-p選項指定 -p <num> Memcached監聽的端口,要保證該端口號未被占用 -c <num> 設置最大運行的并發連接數,默認是1024 -R <num> 為避免客戶端餓死(starvation),對連續達到的客戶端請求數設置一個限額,如果超過該設置,會選擇另一個連接來處理請求,默認為20 -k 設置鎖定所有分頁的內存,對于大緩存應用場景,謹慎使用該選項 -P 保存memcached進程的pid文件 -s <file> 指定Memcached用于監聽的UNIX socket文件 -a <perms> 設置-s選項指定的UNIX socket文件的權限 -U <num> 指定監聽UDP的端口,默認11211,0表示關閉 -M 當內存使用超出配置值時,禁止自動清除緩存中的數據項,此時Memcached不可以,直到內存被釋放 -r 設置產生core文件大小 -f <factor> 用于計算緩存數據項的內存塊大小的乘數因子,默認是1.25 -n 為緩存數據項的key、value、flag設置最小分配字節數,默認是48 -C 禁用CAS -h 顯示Memcached版本和摘要信息 -v 輸出警告和錯誤信息 -vv 打印信息比-v更詳細:不僅輸出警告和錯誤信息,也輸出客戶端請求和響應信息 -i 打印libevent和Memcached的licenses信息 -t <threads> 指定用來處理請求的線程數,默認為4 -D <char> 用于統計報告中Key前綴和ID之間的分隔符,默認是冒號“:” -L 嘗試使用大內存分頁(pages) -B <proto> 指定使用的協議,默認行為是自動協商(autonegotiate),可能使用的選項有auto、ascii、binary。 -I <size> 覆蓋默認的STAB頁大小,默認是1M -F 禁用flush_all命令 -o <options> 指定逗號分隔的選項,一般用于用于擴展或實驗性質的選項
停止Memcached
ps -ef | grep memcached kill -9 <PID>
Java客戶端 - XMemcached客戶端
spring.xml
<!-- 啟動參數加入 -Dxmemcached.jmx.enable=true 可啟動jmx支持 -->
<!-- 監控端可通過service:jmx:rmi:///jndi/rmi://host:7077/xmemcachedServer連接監控 -->
<bean name="memcachedClient"
class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean"
destroy-method="shutdown">
<!-- servers節點列表格式 主節點1:port,主節點1備份:port 主節點2:port,主節點2備份:port -->
<!--可以不設置備份節點,主備節點都好分割,不同的主備分組用空格分隔 -->
<property name="servers">
<value>${cache.memcacheHost}</value>
</property>
<!-- 權重 -->
<property name="weights">
<list>
<value>${cache.memcacheHostWeights1}</value>
</list>
</property>
<!-- 開啟sasl驗證需要配置此部分 -->
<!-- <bean name="server1" class="java.net.InetSocketAddress"> <constructor-arg>
<value>host1</value> </constructor-arg> <constructor-arg> <value>port1</value>
</constructor-arg> </bean> <property name="authInfoMap"> <map> <entry key-ref="server1">
<bean class="net.rubyeye.xmemcached.auth.AuthInfo" factory-method="typical">
<constructor-arg index="0"> <value>cacheuser</value> </constructor-arg> <constructor-arg
index="1"> <value>123456</value> </constructor-arg> </bean> </entry> </map>
</property> -->
<!-- nio線程數最好是cpu核數-1 -->
<property name="connectionPoolSize">
<value>${cache.memcacheConnectionPoolSize}</value>
</property>
<!--默認超時時間 -->
<property name="opTimeout">
<value>${cache.opTimeout}</value>
</property>
<!-- 使用二進制保存 -->
<property name="commandFactory">
<!-- <bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory"></bean> -->
<bean class="net.rubyeye.xmemcached.command.TextCommandFactory"></bean>
</property>
<!-- 分布式hash一致策略 -->
<property name="sessionLocator">
<bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean>
</property>
<!-- 序列化轉換 -->
<property name="transcoder">
<bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />
</property>
<!-- buffer分配策略 -->
<property name="bufferAllocator">
<bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"></bean>
</property>
<!-- 在hash一致模式下節點失敗路由到下一節點,關閉快速失敗模式 -->
<property name="failureMode" value="false" />
</bean> 本文由用戶 ymc4 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!