这2天,才发现之前我们的某个开发人员使用java_memcached-release_2.0.1.jar是有问题的

在我们的某个模块里,需要2个memcached,分别提供不同的服务

于是,开发的人员就从网上粘贴来如下的码,分别生成2个MemcacheUtil类

static {

mcc=newMemCachedClient();

SockIOPoolpool=SockIOPool.getInstance();

String[]servers= { "192.168.1.1:11122" };

pool.setServers(servers);

pool.setInitConn(5);

pool.setMinConn(5);

pool.setMaxConn(20);

pool.setMaxIdle(1000 * 60 * 60 * 6);

pool.setMaintSleep(30);

pool.setNagle(false);

pool.setSocketTO(3000);

pool.setSocketConnectTO(0);

pool.initialize();

mcc.setCompressEnable(true);

mcc.setCompressThreshold(64 * 1024);

}

在2个类里,分别初始化2个不同的mcc,这样做其实是有很大问题的

因为,在初始化MemCachedClient和SockIOPool时,均没有指定对应的name

这样,memcached client会默认生成一个name为default的pool

也就是说,即使你初始化了2个不同server对应的mcc,但实际上只有一个default的pool

这个pool里对应的memcache server完全取决于这2个类的初始化顺序

最后初始化的class,会覆盖掉第一次所用的server

因此,用这样的方式,实际上最后使用的还是其中的某一个memcache server

造成memcache中的数据全部乱掉

正确的方法应该是

SockIOPool pool = SockIOPool.getInstance(poolName);

….

MemCachedClientmcc=newMemCachedClient(poolName);

初始化时,需要指定唯一的一个poolname,这样就能避免刚才的问题了

另外一个问题就是,用python或其它方式写入memcache中的数据,使用java client无法获取到

再查看了memcache client的源码后,发现了以下2点:

1. 它会默认对要存储的key进行URLEncoder的编码,如会把@给编码成%40

2. 在get调用时,如果没有传递参数asString,则它默认会对取到的value进行它自己的decode

所以,如果要想client能正确的取到没有编码过的数据,则需要

//设置不对key做编码

mcc.setSanitizeKeys(false);

//最后一个参数true,表明get时直接返回String,而不进行解码

mcc.get("aaaaaaa@sohu.com",null,true);

memcached 使用 java_使用Java java_memcached client的陷阱相关推荐

  1. Memcached 集群环境Java客户端

    Memcached 集群环境Java客户端 学习了: http://blog.csdn.net/zhouzhiwengang/article/details/53154112 http://guazi ...

  2. ios java 通信_Kurento Java Spring Client IOS – Web到IOS通信

    我们正在尝试使用Kurento 6.0 Java Spring Client.这些例子运作良好(one2one调用one2one-recording).我们正在尝试在IOS应用程序上实现相同的功能,以 ...

  3. ES8(Java API Client)查询详解

    根据我之前文章对 ES命令的查询使用,测试索引的文档数据前面文章有提到的. 下面我们就通过 ES8(Java API Client)来进行查询. 参考官方AP文档:https://www.elasti ...

  4. Springboot整合ES8(Java API Client)

    在 Elasticsearch7.15版本之后,Elasticsearch官方将它的高级客户端 RestHighLevelClient标记为弃用状态.同时推出了全新的 Java API客户端 Elas ...

  5. Elasticsearch RestHighLevelClient 已标记为被弃用 它的替代方案 Elasticsearch Java API Client 的基础教程及迁移方案

    在Elasticsearch7.15版本之后,Elasticsearch官方将它的高级客户端RestHighLevelClient标记为弃用状态.同时推出了全新的Java API客户端Elastics ...

  6. SpringBoot整合最新Elasticsearch Java API Client 7.16教程

    文章目录 前言 一.Elasticsearch和Kibana 7.16版本安装 二.pom.xml文件引入依赖 三.代码实例 总结 前言 最新在学习SpringBoot整合es的一些知识,浏览了网上的 ...

  7. es (Elasticsearch)--Java REST Client解析

    扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦 简介 ES提供了两种java的API对数据进行ES集群操作:TransportClient,Java REST Client ...

  8. Elasticsearch8.0版本中Elasticsearch Java API Client客户端的基本使用方法

    关于Elasticsearch Java API Client客户端如何连接以及如何对索引和文档进行基本的增删改查操作请查看我的上一篇博文:Elasticsearch RestHighLevelCli ...

  9. java jdbc 连接ignite_Apache Ignite 学习笔记(二): Ignite Java Thin Client

    前一篇文章,我们介绍了如何安装部署Ignite集群,并且尝试了用REST和SQL客户端连接集群进行了缓存和数据库的操作.现在我们就来写点代码,用Ignite的Java thin client来连接集群 ...

最新文章

  1. 原核表达常见问题解答
  2. C++STL常用排序算法
  3. python使用率_Python获取CPU、内存使用率以及网络使用状态代码
  4. C++ 百炼成钢20
  5. 算术表达式的实现,支持加减乘除,括号运算,表达式转二叉树
  6. 不变性真的意味着线程安全吗?
  7. python创建配置文件_python3 如何创建一个.ini的配置文件。
  8. 2021年中国直播电商投融资情况及行业发展中存在的问题、发展趋势和对策分析[图]
  9. ios uiswitch 开关_IOS开发(四):开关控件UISwitch
  10. Unity初级案例 - 吃豆人(Unity2017.2.0)Day 2
  11. 深度篇——实例分割(三) 细说 mask rcnn 实例分割代码 训练自己数据 之 相关网络,数据处理,工具等
  12. Python_美多商城(商品)_6
  13. sql语句中as的意思是什么
  14. 【优化选址】基于人工蜂群算法求解无线网络传感覆盖优化问题含Matlab源码
  15. 表格一分为二html,jsp中,td单元格怎么斜着一分为二
  16. 百度人脸识别搜索是怎么实现的
  17. 从零开发短视频电商 maven之pom引入第三方本地Jar并打包运行成功
  18. 风雷影音v2.1.1.0落雪梨花绿色精简版【首家独创双播放内核架构、全面支持高清格式】...
  19. vue mixin传参
  20. 汇聚音视频新能量 探索行业新蓝海

热门文章

  1. 对HashMap数据结构的理解——加载因子和初始容量
  2. 的环境下 qt 运行在_Ubuntu16.04环境下运行vins mono(环境配置及编译)之ROS kinetic的安装...
  3. c语言课程设计大作业模版,c语言课程设计报告模板下载
  4. php 循环大数组 卡死,PHP 大数组循环问题_PHP教程
  5. android 滑动接听源码,android仿摩拜单车APP、炫酷RecyclerView、卡片滑动、仿饿了么点餐、自定义索引等源码...
  6. split函数python统计英文单词_统计一篇英文文章单词个数,取出出现频次前10的单词(Python实现)...
  7. linux批量切割图片,MAC中用Shell脚本批量裁剪各种尺寸的App图标
  8. 腾讯视频下载安装免费2020_腾讯视频app的哪里发贴
  9. Spring的ApplicationEvent的使用
  10. Java面试题(亲身经历)