`
wxw850227
  • 浏览: 70603 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java 和 php共享memcached数据注意问题

    博客分类:
  • java
阅读更多
在很多时候,一台memcached server中的数据,需要被不同语言的客户端访问。

在理想的情况下,一种语言写,其他语言读可能不会造成一些兼容的问题。

日前遇到了java和php共享数据的问题,php写入的时候,java可以读取;java写入的,php读取时候数据解析有误。

分析memcached中的数据:
telnet memcache-srv1 11211
get key[enter]

发现php写入,和java写入的数据存在一点差异。

php:VALUE key 1 250
java:VALUE key 0 250

   大家发现了吧,就是一个状态位不一致导致。在java中,这个状态为用于压缩等其他标识,而在php中,用于作为判断php的对象(比如:array等)。
检查php代码,发现它是直接把array对象,传给php memcached 函数,由其进行序列化,以及加入标识,在读取的时候,其直接反馈相应的php对象。
Java代码
set:  
$out = array();  
$out['field1'] = "me";  
$mc->set($key, $out, NULL, 12 * 3600);  
 
get:  
$out=$mc->get($key);  
echo $out['field1']; 

   set:
   $out = array();
   $out['field1'] = "me";
   $mc->set($key, $out, NULL, 12 * 3600);
  
   get:
   $out=$mc->get($key);
   echo $out['field1'];

解决方案:
  使用传给php memcached客户端的时候,先序列化好。取的时候,在反序列化一次。
   Java代码
set:  
$out = array();  
$out['field1'] = "me";  
$mc->set($key, serilized($out), NULL, 12 * 3600);  
 
get:  
$out=$mc->get($key);  
echo unserilized($out)['field1'];  

   set:
   $out = array();
   $out['field1'] = "me";
   $mc->set($key, serilized($out), NULL, 12 * 3600);
  
   get:
   $out=$mc->get($key);
   echo unserilized($out)['field1'];
  
  或者,修改java的memcacheClient源代码,不建议。

分享到:
评论

相关推荐

    基于内存的K-V数据平台(Memcached)

    **基于内存的K-V数据平台——Memcached** Memcached是一款高性能、分布式内存对象缓存系统,主要用于加速动态Web应用,通过将数据存储在内存中,减少数据库的访问次数,从而提高应用性能。它是一个轻量级的服务,...

    memcached 64位 window

    4. **客户端库**:选择合适的编程语言(如PHP、Python、Java等)的客户端库,连接到Memcached服务器。 5. **测试和优化**:通过测试确保缓存工作正常,监控内存使用情况,根据需要调整配置。 总的来说,Memcached ...

    memcached服务器端安装程序

    - 许多编程语言(如PHP、Python、Java、Ruby等)都有客户端库支持Memcached,方便进行数据存取操作。 - 可以通过负载均衡器与其他Memcached实例结合,构建更强大的缓存集群。 总的来说,"memcached-win32-1.4.4-...

    Memcached使用--使用

    2. **分布式**:Memcached支持多台服务器之间的数据共享,可以构建分布式缓存系统,解决单一服务器内存限制问题。 3. **键值对存储**:数据以键值对的形式存储,键是唯一的标识符,值是存储的数据。 4. **短暂性**...

    Memcached网站应用实战

    3. **多主机支持**:Memcached支持多主机之间的数据共享,允许多个用户同时访问同一个缓存系统,从而解决了共享内存仅限于单机的问题。 4. **LRU算法**:Memcached使用LRU(Least Recently Used)算法来管理缓存中的...

    Memcached-1.2.6

    它采用简单的文本协议,支持多种编程语言,如PHP、Python、Ruby、Java等。通过在内存中缓存常用数据,Memcached显著减少了数据库的读取次数,提高了响应速度。 2. **Memcached的工作原理** - **分布式缓存**:...

    memcached-windows64-1.4安装文件

    3. **简单易用**:Memcached具有简单的API,可轻松集成到各种编程语言中,如PHP、Python、Java等。 4. **内存管理**:使用 slab allocation 算法进行内存管理,避免了内存碎片问题。 5. **数据持久化**:虽然默认不...

    最新版Memcached for windows + 源码

    - 许多编程语言如PHP、Python、Java、Ruby等都有官方或第三方的客户端库,方便与Memcached交互。 - 开发者可以利用源码学习如何实现一个简单的分布式缓存系统,也可以在此基础上开发更复杂的缓存解决方案。 6. **...

    memcached缓存系统

    Memcached,作为一个广泛使用的开源、高性能、分布式的内存对象缓存系统,其设计目的是为了提高动态Web应用的响应速度,通过将数据存储在内存中,减少对数据库的频繁访问,从而降低了系统的延迟和数据库的负载。...

    memcached客户端包memcached-1.4.12.tar.gz

    Memcached是一种高性能、分布式内存对象缓存系统,用于在分布式环境中快速存储和检索数据,以减轻数据库的负载。客户端包`memcached-1.4.12.tar.gz`是为开发者提供的工具,允许他们与memcached服务器进行交互,实现...

    memcached server

    标题提到的"memcached server"指的是这个服务端程序,用于在多台服务器之间共享数据,通过缓存常用数据来提升整体性能。版本1.2.6是其历史的一个稳定版本,尽管现在已经有了更新的版本,但这个版本依然具有一定的...

    memcached-1.6.12.tar.gz

    1. **客户端库**:memcached支持多种编程语言的客户端库,如Python的`pylibmc`,PHP的`memcache`或`memcached`扩展,Java的`spymemcached`等。 2. **缓存操作**:通过简单的命令(如`set`、`get`、`delete`)进行...

    Memcached分布式缓存

    - **memcached不互相通信的分布式**:每个memcached实例都是独立的,它们之间不共享数据,也不互相通信。这使得系统具有良好的扩展性和容错能力。 **1.3 安装memcached** - **memcached的安装**:通常通过包管理器...

    memcached安装和使用详细说明

    在Java环境下,可以通过多种客户端库与之交互,如java_memcached-release和alisoft-xplatform-asf-cache,结合Spring AOP可以轻松实现数据缓存,提高应用的响应速度和性能。然而,正确评估应用场景并理解其适用性和...

    memcached

    - **Session共享**:在分布式环境中,可以使用Memcached共享用户session,避免session数据在服务器之间同步的问题。 **6. 与其他缓存系统的对比** Memcached专注于简单、高速的键值存储,而Redis则提供了更丰富的...

    memcached-1.4.20.tar.gz

    1. **客户端库**:许多编程语言如Python、PHP、Java等都有官方或第三方提供的客户端库,方便与Memcached进行交互。 2. **操作命令**:基本的操作包括 `set`(设置键值对)、`get`(获取键值对)、`delete`(删除键值...

    memcached-1.4.17

    分布式缓存是现代Web服务中常见的一种技术,用于在多台服务器之间共享数据,减少对后端数据库的直接访问,提高响应速度和系统吞吐量。Memcached以其简单的设计、快速的性能和广泛的语言支持而备受青睐。 **...

Global site tag (gtag.js) - Google Analytics