前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Session共享–实现Memcache集群

Session共享–实现Memcache集群

作者头像
星哥玩云
发布2022-06-30 21:05:02
4340
发布2022-06-30 21:05:02
举报
文章被收录于专栏:开源部署开源部署

Memcache在session共享中起着重要的作用,因为咱们所有的数据都是放到这里面的,所以这里咱们肯定不能只用一台Memcache,需要将Memcache集群,我这里是通过代码实现的。整体的思路就是在初始化的时候,将所有Memcache的地址全部读取出来,在存数据的时候向所有Memcache中都放值,在取的时候,随机一台读取,如果没有,则轮询读,直到读取到值为值。下面上具体的代码。

1. 放值

/**

  * 将数据存储到Memcached中

  * @param key 键值

  * @param value 对象

  *

  * 此方法存储的value在Memcached中永远都不会过期,只有当Memcached的内存占满时

  * 才会根据Memcached自身的最长时间不使用的算法将其中的一些value清除

  */

 public void setMemcached(String key, Object value) {

  for(int i=0;i<mcpool.size();i++)

  {

  MemCachedClient mc=(MemCachedClient)mcpool.get(i);

  mc.set(appName + key, value);

  }

 }

2.取值

/**

  * 随机从一台服务器上查找对应key的值

  * 若有,则返回

  * 若没有,则遍历所有服务器

  */

 public Object getMemcached(String key) {

  int num=(Math.abs(new Random().nextInt()))%mcpool.size();

  Object object=null;

  object=((MemCachedClient)mcpool.get(num)).get(appName + key);

  if(object!=null)

  {

  return object;

  }

  for(int i=0;i<mcpool.size();i++)

  {

  MemCachedClient mc=(MemCachedClient)mcpool.get(i);

  object=mc.get(appName + key);

  if(object!=null)

  {

    return object;

  }

  }

  return object;

 }

注:大家都知道,memcache存的都是序列化后的值,取的时候,再用反序列化的方式读取出来。我们这里用的writeObject和readObject。但也是因为这个原理,我们在存各个webapp自己的应用的时候,由于无法获得对应的class文件,导致无法反序列化读出数据。这个问题的解决方案在后面给出。

参考阅读:

Memcached 安装及启动脚本 http://www.linuxidc.com/Linux/2013-07/87641.htm

PHP中使用Memcached的性能问题 http://www.linuxidc.com/Linux/2013-06/85883.htm

Ubuntu下安装Memcached及命令解释 http://www.linuxidc.com/Linux/2013-06/85832.htm

Memcached的安装和应用 http://www.linuxidc.com/Linux/2013-08/89165.htm

使用Nginx+Memcached的小图片存储方案 http://www.linuxidc.com/Linux/2013-11/92390.htm

Memcached使用入门 http://www.linuxidc.com/Linux/2011-12/49516p2.htm

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档