设为首页 收藏本站
查看: 753|回复: 0

[经验分享] memcached的使用

[复制链接]

尚未签到

发表于 2015-9-1 08:43:16 | 显示全部楼层 |阅读模式
   1. 下载memcached客户端文件
  把下载文件放在文件目录下
  2. 安装 memcached
  命令: c:/memcached/memcached.exe  -d install
  3. 启动 memcached
   c:/memcached/memcached.exe -d  start
  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  



1  import 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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-108128-1-1.html 上篇帖子: Memcached (第一篇) 下篇帖子: Using MemCached with NHibernate
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表