hujh20 发表于 2015-9-1 08:43:16

memcached的使用

   1. 下载memcached客户端文件
  把下载文件放在文件目录下
  2. 安装 memcached
  命令: c:/memcached/memcached.exe-d install
  3. 启动 memcached
   c:/memcached/memcached.exe -dstart
  4. 连接到 memcached

telnet localhost 11211
  5:客户端使用的基本命令
  启动/结束
memcached -d -m 10 -u root -l 127.0.0.1 -p 11200 -c 256 -P /tmp/memcached.pid
-d 选项是启动一个守护进程
-m 是分配给Memcache使用的内存数量,单位是MB,这里是10MB
-u 是运行Memcache的用户,这里是root
-l 是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址127.0.0.1
-p 是设置Memcache监听的端口,这里设置了12000,最好是1024以上的端口
-c 选项是最大运行的并发连接数,默认是1024,这里设置了256,按照你服务器的负载量来设定
-P 是设置保存Memcache的pid文件
kill `cat /tmp/memcached.pid`关闭memcached
  6:在项目中使用(与Spring集成)
  获取Memcached API 地址 :

  创建接口MemcachedClient



1import java.util.Collection;
2 import java.util.Map;
3 import java.util.concurrent.TimeoutException;
4
5 /**
6* 提供通用的memcached访问接口
7*/
8 public interface MemcachedClient {
9   /**
10      * 不管数据存在不存在都会将目前设置的数据存储的memcached
11      *
12      * @param key
13      *            不要超过250字节
14      * @param exp
15      *            以秒为单位,如果超过30天的值,将会用unix timestamp来制定截止有效时间
16      * @param value
17      * @return
18      * @throws TimeoutException
19      * @throws InterruptedException
20      * @throws MemcachedClientException
21      */
22   boolean set(String key, int exp, Object value) throws TimeoutException,
23             InterruptedException, MemcachedClientException;
24
25   /**
26      * 不管数据存在不存在都会将目前设置的数据存储的memcached,自行制定超时时间
27      *
28      * @see #set(String, int, Object)
29      * @param key
30      * @param exp
31      * @param value
32      * @param timeout
33      * @return
34      * @throws TimeoutException
35      * @throws InterruptedException
36      * @throws MemcachedClientException
37      */
38   boolean set(String key, int exp, Object value, long timeout)
39             throws TimeoutException, InterruptedException,
40             MemcachedClientException;
41
42   /**
43      * 不管数据存在不存在都会将目前设置的数据存储的memcached,但不等待返回确认
44      *
45      * @see #set(String, int, Object)
46      * @param key
47      * @param exp
48      * @param value
49      * @throws InterruptedException
50      * @throws MemcachedClientException
51      */
52   void setWithNoReply(String key, int exp, Object value)
53             throws InterruptedException, MemcachedClientException;
54
55   /**
56      * 只有数据不存在时进行添加
57      *
58      * @param key
59      *            不要超过250字节
60      * @param exp
61      *            以秒为单位,如果超过30天的值,将会用unix timestamp来制定截止有效时间
62      * @param value
63      * @return
64      * @throws TimeoutException
65      * @throws InterruptedException
66      * @throws MemcachedClientException
67      */
68   boolean add(String key, int exp, Object value) throws TimeoutException,
69             InterruptedException, MemcachedClientException;
70
71   /**
72      * 只有数据不存在时进行添加
73      *
74      * @param key
75      * @param exp
76      *            以秒为单位,如果超过30天的值,将会用unix timestamp来制定截止有效时间
77      * @param value
78      * @param timeout
79      *            1/1000秒为单位,在制定的时间段内没有响应就抛出TimeoutException
80      * @return
81      * @throws TimeoutException
82      * @throws InterruptedException
83      * @throws MemcachedClientException
84      */
85   boolean add(String key, int exp, Object value, long timeout)
86             throws TimeoutException, InterruptedException,
87             MemcachedClientException;
88
89   /**
90      * 只有数据不存在时进行添加,不需要返回具体的确认信息,大多数情况下可以用此方法来提升效率,毕竟我们对Memcached的理解是假设数据不是持久的
91      *
92      * @param key
93      * @param exp
94      * @param value
95      * @throws InterruptedException
96      * @throws MemcachedClientException
97      */
98   void addWithNoReply(String key, int exp, Object value)
99             throws InterruptedException, MemcachedClientException;
100
101   /**
102      * 只有数据存在才进行覆盖
103      *
104      * @param key
105      * @param exp
106      * @param value
107      * @return
108      * @throws TimeoutException
109      * @throws InterruptedException
110      * @throws MemcachedClientException
111      */
112   boolean replace(String key, int exp, Object value) throws TimeoutException,
113             InterruptedException, MemcachedClientException;
114
115   /**
116      * 只有数据存在才进行覆盖
117      *
118      * @param key
119      * @param exp
120      * @param value
121      * @param timeout
122      * @return
123      * @throws TimeoutException
124      * @throws InterruptedException
125      * @throws MemcachedClientException
126      */
127   boolean replace(String key, int exp, Object value, long timeout)
128             throws TimeoutException, InterruptedException,
129             MemcachedClientException;
130
131   /**
132      * 只有数据存在才进行覆盖,不等返回确认
133      *
134      * @param key
135      * @param exp
136      * @param value
137      * @throws InterruptedException
138      * @throws MemcachedClientException
139      */
140   void replaceWithNoReply(String key, int exp, Object value)
141             throws InterruptedException, MemcachedClientException;
142
143   /**
144      * 追加到当前数据的后面
145      *
146      * @param key
147      * @param value
148      * @return
149      * @throws TimeoutException
150      * @throws InterruptedException
151      * @throws MemcachedClientException
152      */
153   boolean append(String key, Object value) throws TimeoutException,
154             InterruptedException, MemcachedClientException;
155
156   /**
157      * 追加到当前数据的后面
158      *
159      * @param key
160      * @param value
161      * @param timeout
162      * @return
163      * @throws TimeoutException
164      * @throws InterruptedException
165      * @throws MemcachedClientException
166      */
167   boolean append(String key, Object value, long timeout)
168             throws TimeoutException, InterruptedException,
169             MemcachedClientException;
170
171   /**
172      * 追加到当前数据的后面,不等待响应
173      *
174      * @param key
175      * @param value
176      * @throws InterruptedException
177      * @throws MemcachedClientException
178      */
179   void appendWithNoReply(String key, Object value)
180             throws InterruptedException, MemcachedClientException;
181
182   /**
183      * 追加到当前数据的前面
184      *
185      * @param key
186      * @param value
187      * @return
188      * @throws TimeoutException
189      * @throws InterruptedException
190      * @throws MemcachedClientException
191      */
192   boolean prepend(String key, Object value) throws TimeoutException,
193             InterruptedException, MemcachedClientException;
194
195   /**
196      * 追加到当前数据的前面
197      *
198      * @param key
199      * @param value
200      * @param timeout
201      * @return
202      * @throws TimeoutException
203      * @throws InterruptedException
204      * @throws MemcachedClientException
205      */
206   boolean prepend(String key, Object value, long timeout)
207             throws TimeoutException, InterruptedException,
208             MemcachedClientException;
209
210   /**
211      * 追加到当前数据的前面,不等待返回
212      *
213      * @param key
214      * @param value
215      * @throws InterruptedException
216      * @throws MemcachedClientException
217      */
218   void prependWithNoReply(String key, Object value)
219             throws InterruptedException, MemcachedClientException;
220
221   long incr(String key, long delta, long initValue) throws TimeoutException,
222             InterruptedException, MemcachedClientException;
223
224   long incr(String key, long delta, long initValue, long timeout)
225             throws TimeoutException, InterruptedException,
226             MemcachedClientException;
227
228   void incrWithNoReply(String key, long delta) throws InterruptedException,
229             MemcachedClientException;
230
231   long decr(String key, long delta, long initValue) throws TimeoutException,
232             InterruptedException, MemcachedClientException;
233
234   long decr(String key, long delta, long initValue, long timeout)
235             throws TimeoutException, InterruptedException,
236             MemcachedClientException;
237
238   void decrWithNoReply(String key, long delta) throws InterruptedException,
239             MemcachedClientException;
240
241   boolean delete(String key) throws TimeoutException, InterruptedException,
242             MemcachedClientException;
243
244   boolean delete(String key, long opTimeout) throws TimeoutException,
245             InterruptedException, MemcachedClientException;
246
247   boolean delete(String key, long cas, long opTimeout)
248             throws TimeoutException, InterruptedException,
249             MemcachedClientException;
250
251   void deleteWithNoReply(String key) throws InterruptedException,
252             MemcachedClientException;
253
254   <T> T get(String key) throws TimeoutException, InterruptedException,
255             MemcachedClientException;
256
257   <T> T get(String key, long timeout) throws TimeoutException,
258             InterruptedException, MemcachedClientException;
259
260   <T> Map<String, T> get(Collection<String> keyCollections)
261             throws TimeoutException, InterruptedException,
262             MemcachedClientException;
263
264   <T> Map<String, T> get(Collection<String> keyCollections, long timeout)
265             throws TimeoutException, InterruptedException,
266             MemcachedClientException;
267
268   <T> GetsResponse<T> gets(String key) throws TimeoutException,
269             InterruptedException, MemcachedClientException;
270
271   <T> GetsResponse<T> gets(String key, long timeout) throws TimeoutException,
272             InterruptedException, MemcachedClientException;
273
274   <T> Map<String, GetsResponse<T>> gets(Collection<String> keyCollections)
275             throws TimeoutException, InterruptedException,
276             MemcachedClientException;
277
278   <T> Map<String, GetsResponse<T>> gets(Collection<String> keyCollections,
279             long timeout) throws TimeoutException, InterruptedException,
280             MemcachedClientException;
281   
282   
283   
284   boolean isEnabled();
285 }
  

创建接口实现类MemcachedClientWrapper


1 package cn.edu.jszg.cache;
2
3 import java.util.Collection;
4 import java.util.HashMap;
5 import java.util.Map;
6 import java.util.Set;
7 import java.util.concurrent.TimeoutException;
8
9 import net.rubyeye.xmemcached.exception.MemcachedException;
10
11 public class MemcachedClientWrapper implements MemcachedClient {
12   private net.rubyeye.xmemcached.MemcachedClient client;
13   private boolean enabled = false;
14
15   public MemcachedClientWrapper() {
16         super();
17   }
18
19   public void setMemcachedClient(net.rubyeye.xmemcached.MemcachedClient client) {
20         this.client = client;
21   }
22
23   public net.rubyeye.xmemcached.MemcachedClient getXMemcachedClient() {
24         return client;
25   }
26
27   @Override
28   public boolean set(String key, int exp, Object value) throws TimeoutException, InterruptedException,
29             MemcachedClientException {
30         try {
31             return client.set(key, exp, value);
32         } catch (MemcachedException e) {
33             throw new MemcachedClientException(e);
34         }
35   }
36
37   @Override
38   public boolean set(String key, int exp, Object value, long timeout) throws TimeoutException,
39             InterruptedException, MemcachedClientException {
40         try {
41             return client.set(key, exp, value, timeout);
42         } catch (MemcachedException e) {
43             throw new MemcachedClientException(e);
44         }
45   }
46
47   @Override
48   public void setWithNoReply(String key, int exp, Object value) throws InterruptedException,
49             MemcachedClientException {
50         try {
51             client.setWithNoReply(key, exp, value);
52         } catch (MemcachedException e) {
53             throw new MemcachedClientException(e);
54         }
55   }
56
57   @Override
58   public boolean add(String key, int exp, Object value) throws TimeoutException, InterruptedException,
59             MemcachedClientException {
60         try {
61             return client.add(key, exp, value);
62         } catch (MemcachedException e) {
63             throw new MemcachedClientException(e);
64         }
65   }
66
67   @Override
68   public boolean add(String key, int exp, Object value, long timeout) throws TimeoutException,
69             InterruptedException, MemcachedClientException {
70         try {
71             return client.add(key, exp, value, timeout);
72         } catch (MemcachedException e) {
73             throw new MemcachedClientException(e);
74         }
75   }
76
77   @Override
78   public void addWithNoReply(String key, int exp, Object value) throws InterruptedException,
79             MemcachedClientException {
80         try {
81             client.addWithNoReply(key, exp, value);
82         } catch (MemcachedException e) {
83             throw new MemcachedClientException(e);
84         }
85   }
86
87   @Override
88   public boolean replace(String key, int exp, Object value) throws TimeoutException, InterruptedException,
89             MemcachedClientException {
90         try {
91             return client.replace(key, exp, value);
92         } catch (MemcachedException e) {
93             throw new MemcachedClientException(e);
94         }
95   }
96
97   @Override
98   public boolean replace(String key, int exp, Object value, long timeout) throws TimeoutException,
99             InterruptedException, MemcachedClientException {
100         try {
101             return client.replace(key, exp, value, timeout);
102         } catch (MemcachedException e) {
103             throw new MemcachedClientException(e);
104         }
105   }
106
107   @Override
108   public void replaceWithNoReply(String key, int exp, Object value) throws InterruptedException,
109             MemcachedClientException {
110         try {
111             client.replaceWithNoReply(key, exp, value);
112         } catch (MemcachedException e) {
113             throw new MemcachedClientException(e);
114         }
115   }
116
117   @Override
118   public boolean append(String key, Object value) throws TimeoutException, InterruptedException,
119             MemcachedClientException {
120         try {
121             return client.append(key, value);
122         } catch (MemcachedException e) {
123             throw new MemcachedClientException(e);
124         }
125   }
126
127   @Override
128   public boolean append(String key, Object value, long timeout) throws TimeoutException, InterruptedException,
129             MemcachedClientException {
130         try {
131             return client.append(key, value, timeout);
132         } catch (MemcachedException e) {
133             throw new MemcachedClientException(e);
134         }
135   }
136
137   @Override
138   public void appendWithNoReply(String key, Object value) throws InterruptedException, MemcachedClientException {
139         try {
140             client.appendWithNoReply(key, value);
141         } catch (MemcachedException e) {
142             throw new MemcachedClientException(e);
143         }
144   }
145
146   @Override
147   public boolean prepend(String key, Object value) throws TimeoutException, InterruptedException,
148             MemcachedClientException {
149         try {
150             return client.prepend(key, value);
151         } catch (MemcachedException e) {
152             throw new MemcachedClientException(e);
153         }
154   }
155
156   @Override
157   public boolean prepend(String key, Object value, long timeout) throws TimeoutException, InterruptedException,
158             MemcachedClientException {
159         try {
160             return client.prepend(key, value, timeout);
161         } catch (MemcachedException e) {
162             throw new MemcachedClientException(e);
163         }
164   }
165
166   @Override
167   public void prependWithNoReply(String key, Object value) throws InterruptedException, MemcachedClientException {
168         try {
169             client.prependWithNoReply(key, value);
170         } catch (MemcachedException e) {
171             throw new MemcachedClientException(e);
172         }
173   }
174
175   @Override
176   public long incr(String key, long delta, long initValue) throws TimeoutException, InterruptedException,
177             MemcachedClientException {
178         try {
179             return client.incr(key, delta, initValue);
180         } catch (MemcachedException e) {
181             throw new MemcachedClientException(e);
182         }
183   }
184
185   @Override
186   public long incr(String key, long delta, long initValue, long timeout) throws TimeoutException,
187             InterruptedException, MemcachedClientException {
188         try {
189             return client.incr(key, delta, initValue, timeout);
190         } catch (MemcachedException e) {
191             throw new MemcachedClientException(e);
192         }
193   }
194
195   @Override
196   public void incrWithNoReply(String key, long delta) throws InterruptedException, MemcachedClientException {
197         try {
198             client.incrWithNoReply(key, delta);
199         } catch (MemcachedException e) {
200             throw new MemcachedClientException(e);
201         }
202   }
203
204   @Override
205   public long decr(String key, long delta, long initValue) throws TimeoutException, InterruptedException,
206             MemcachedClientException {
207         try {
208             return client.decr(key, delta, initValue);
209         } catch (MemcachedException e) {
210             throw new MemcachedClientException(e);
211         }
212   }
213
214   @Override
215   public long decr(String key, long delta, long initValue, long timeout) throws TimeoutException,
216             InterruptedException, MemcachedClientException {
217         try {
218             return client.decr(key, delta, initValue, timeout);
219         } catch (MemcachedException e) {
220             throw new MemcachedClientException(e);
221         }
222   }
223
224   @Override
225   public void decrWithNoReply(String key, long delta) throws InterruptedException, MemcachedClientException {
226         try {
227             client.decrWithNoReply(key, delta);
228         } catch (MemcachedException e) {
229             throw new MemcachedClientException(e);
230         }
231   }
232
233   @Override
234   public boolean delete(String key) throws TimeoutException, InterruptedException, MemcachedClientException {
235         try {
236             return client.delete(key);
237         } catch (MemcachedException e) {
238             throw new MemcachedClientException(e);
239         }
240   }
241
242   @Override
243   public boolean delete(String key, long opTimeout) throws TimeoutException, InterruptedException,
244             MemcachedClientException {
245         try {
246             return client.delete(key, opTimeout);
247         } catch (MemcachedException e) {
248             throw new MemcachedClientException(e);
249         }
250   }
251
252   @Override
253   public boolean delete(String key, long cas, long opTimeout) throws TimeoutException, InterruptedException,
254             MemcachedClientException {
255         try {
256             return client.delete(key, cas, opTimeout);
257         } catch (MemcachedException e) {
258             throw new MemcachedClientException(e);
259         }
260   }
261
262   @Override
263   public void deleteWithNoReply(String key) throws InterruptedException, MemcachedClientException {
264         try {
265             client.deleteWithNoReply(key);
266         } catch (MemcachedException e) {
267             throw new MemcachedClientException(e);
268         }
269   }
270
271   @SuppressWarnings("unchecked")
272   @Override
273   public <T> T get(String key) throws TimeoutException, InterruptedException, MemcachedClientException {
274         try {
275             return (T)client.get(key);
276         } catch (MemcachedException e) {
277             throw new MemcachedClientException(e);
278         }
279   }
280
281   @SuppressWarnings("unchecked")
282   @Override
283   public <T> T get(String key, long timeout) throws TimeoutException, InterruptedException,
284             MemcachedClientException {
285         try {
286             return (T)client.get(key, timeout);
287         } catch (MemcachedException e) {
288             throw new MemcachedClientException(e);
289         }
290   }
291
292   @Override
293   public <T> Map<String, T> get(Collection<String> keyCollections) throws TimeoutException,
294             InterruptedException, MemcachedClientException {
295         try {
296             return client.get(keyCollections);
297         } catch (MemcachedException e) {
298             throw new MemcachedClientException(e);
299         }
300   }
301
302   @Override
303   public <T> Map<String, T> get(Collection<String> keyCollections, long timeout) throws TimeoutException,
304             InterruptedException, MemcachedClientException {
305         try {
306             return client.get(keyCollections, timeout);
307         } catch (MemcachedException e) {
308             throw new MemcachedClientException(e);
309         }
310   }
311
312   @SuppressWarnings("unchecked")
313   @Override
314   public <T> GetsResponse<T> gets(String key) throws TimeoutException, InterruptedException,
315             MemcachedClientException {
316         try {
317             return new GetsResponse<T>((net.rubyeye.xmemcached.GetsResponse<T>) client.gets(key));
318         } catch (MemcachedException e) {
319             throw new MemcachedClientException(e);
320         }
321   }
322
323   @SuppressWarnings("unchecked")
324   @Override
325   public <T> GetsResponse<T> gets(String key, long timeout) throws TimeoutException, InterruptedException,
326             MemcachedClientException {
327         try {
328             return new GetsResponse<T>((net.rubyeye.xmemcached.GetsResponse<T>) client.gets(key, timeout));
329         } catch (MemcachedException e) {
330             throw new MemcachedClientException(e);
331         }
332   }
333
334   @Override
335   public <T> Map<String, GetsResponse<T>> gets(Collection<String> keyCollections) throws TimeoutException,
336             InterruptedException, MemcachedClientException {
337         try {
338             Map<String, GetsResponse<T>> results = new HashMap<String, GetsResponse<T>>();
339             Map<String, net.rubyeye.xmemcached.GetsResponse<T>> tmps = client.gets(keyCollections);
340             if (tmps != null) {
341               Set<String> keys = tmps.keySet();
342               for (String key : keys) {
343                     results.put(key, new GetsResponse<T>((net.rubyeye.xmemcached.GetsResponse<T>) tmps.get(key)));
344               }
345             }
346             return results;
347         } catch (MemcachedException e) {
348             throw new MemcachedClientException(e);
349         }
350   }
351
352   @Override
353   public <T> Map<String, GetsResponse<T>> gets(Collection<String> keyCollections, long timeout)
354             throws TimeoutException, InterruptedException, MemcachedClientException {
355         try {
356             Map<String, GetsResponse<T>> results = new HashMap<String, GetsResponse<T>>();
357             Map<String, net.rubyeye.xmemcached.GetsResponse<T>> tmps = client.gets(keyCollections, timeout);
358             if (tmps != null) {
359               Set<String> keys = tmps.keySet();
360               for (String key : keys) {
361                     results.put(key, new GetsResponse<T>((net.rubyeye.xmemcached.GetsResponse<T>) tmps.get(key)));
362               }
363             }
364             return results;
365         } catch (MemcachedException e) {
366             throw new MemcachedClientException(e);
367         }
368   }
369
370   @Override
371   public boolean isEnabled() {
372         return enabled;
373   }
374
375   public void setEnabled(boolean enabled) {
376         this.enabled = enabled;
377   }
378
379 }
  经验总结:
  缓存数据的一致性问题
   缓存数据尽量只读,因此缓存本身是不适合大量写和更新操作的数据场景的。对于读的情况下,如果存在数据变化,一种是同时更新缓存和数据库。一种是直接对缓存数据进行失效处理。敲命令行的时候换行的时候要跟空格.
  
  另附:memcached的常用命令
  参考:http://www.cnblogs.com/jeffwongishandsome/archive/2011/11/06/2238265.html
  
页: [1]
查看完整版本: memcached的使用