`
weii
  • 浏览: 101344 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

当memcached的key为url时

阅读更多

memcached的客户端最著名的是这2个:memcached client for java和spymemcached。前者,使用最广泛。稳定性比较好。后者存取速度会高于前者,但是稳定性不好。我采用了前者。

 

但有一天,我需要将url作为key存入memcached,却怎么也存不进去。而直接用memcached命令set,是可以存进去的。看来是memcached client for java不支持吗?

 

网上找了找资料,查到一个叫做“xmemcached”的。号称性能比前2个还要厉害。我下载了试了试,版本号是xmemcached-1.2.4。它里面有一个选项sanitizeKeys,当选择用URL当key的时候,MemcachedClient会自动将URL encode再存储。于是我设置成

memcachedClient.setSanitizeKeys(true); 同时配合另一个选项:commandFactory ,设置成net.rubyeye.xmemcached.command.TextCommandFactory。成功了!可以设置url为key了。

 

但是存入到memcached的内容出现了乱码。郁闷了。

于是再试:

注释掉这句memcachedClient.setSanitizeKeys(true);

将commandFactory 设置成net.rubyeye.xmemcached.command.BinaryCommandFactory。即采用二进制协议。成功存入到memcached,但内容还是乱码。

无语。

无意中,又翻了翻memcached client for java。找了一下源代码,发现它也有一个选项sanitizeKeys。原来它的默认值是true。意思是比如key为“/abc”,那么要用get('%2Fabc'),才能得到value。

哈哈。原来如此!!

然后我设置setSanitizeKeys(false)。set一个key为"/abc",get('/abc')得到了value!而且没有乱码。

不过,也许是我摸得不太熟。xmemcached是个好东西。下次好好研究。只不过担心它不稳定(吃螃蟹要付出代价啊)。

分享到:
评论
1 楼 dennis_zane 2010-03-26  
hi,我是xmemcached的作者
你所说的乱码是什么意思?能提供下测试所用的key和value吗?方便我重现看看

相关推荐

    Memcached_程序与php中应用

    // 'key'保存'value',过期时间为1小时 // 获取数据 $value = $memcached->get('key'); // 删除数据 $memcached->delete('key'); ``` **Memcached使用示例** `学习文档Url.txt`可能包含了关于如何在实际项目中...

    memcached监控模板

    <key>memcached.stats[{$HOSTNAME},{$ITEM_KEY}]</key> <type>7 <params>{$HOSTNAME} <params>{$ITEM_KEY} <value_type>3 <history>90d <trends>365d <delay>30s <trapper_hosts>0 <ipmi_sensor>0 ...

    分布式缓存Memcached实例

    但这也意味着,当内存满时,较旧或较少使用的数据会被自动删除,以腾出空间给新的数据,这种机制称为LRU(Least Recently Used)。 3. **Key-Value存储**:Memcached使用键值对的方式来存储数据,用户可以通过键来...

    memcached 缓存图片

    在缓存图片时,图片通常会被转换为字节串并存储在Memcached中,对应的键可能是图片的URL或唯一标识。当用户请求图片时,应用程序会首先检查Memcached中是否存在该图片,如果存在则直接返回,否则从数据库或文件系统...

    memcached-session-manager-1.8.1

    1. **Session复制**:当客户端首次访问服务器并创建session时,MSM会将session对象序列化为二进制格式,然后将其发送到配置好的Memcached服务器上。 2. **Session持久化**:每次session数据发生变化时,MSM都会自动...

    memcached-redis性能测试.docx

    理论上,Memcached可以处理无限数量的连接,但实际上,由于操作系统线程能力的限制,通常建议的最大同时连接数为200。 安装libevent的过程包括下载源码包、解压、配置、编译和安装。例如,可以从指定的URL下载...

    spring memcached

    @CacheEvict(value = {"roader1"}, key = "#obj.url") public CachedObject del(CachedObject obj) { return obj; } } ``` #### 四、总结 Spring 3.1 对 Memcached 的集成提供了一种简便的方法来管理和使用...

    PHP实例开发源码—urlShort 短网址服务实现程序.zip

    - **唯一性保证**:短网址必须全局唯一,所以`short_key`字段需要设置为主键,确保每个短网址的唯一性。 3. **短网址生成** - **哈希生成**:首先对长网址进行哈希运算,得到哈希值。 - **编码处理**:将哈希值...

    寻找我们丢失的数据

    假设有一个场景:我们需要存储出租房列表页,每页的大小约为 208016 字节,使用 md5(url) 作为 Key(长度为 32 字节),并且设置过期时间为 30 分钟。在这种情况下,我们可以计算理论上能存储多少个页面: 1.5 * ...

    Django缓存系统实现过程解析

    要在Django中使用Memcached,你需要安装相应的Python库(如python-memcached或pylibmc),然后在`CACHES`配置中指定`BACKEND`为对应的Memcached后端,并设置`LOCATION`为Memcached服务器的IP地址和端口,或者Unix套...

    Django技巧及建议

    当路由发生变化时,只需更改URL配置即可,而无需修改模板中的硬编码URL。 **示例代码**: ```html <a href="{% url 'views.about' %}">About Page ``` 上面的HTML代码展示了如何使用`{% url %}`标签来生成指向`views...

    nodejs读取memcache示例分享

    - `connect`事件监听器:当与Memcached服务器建立连接时,将`client.connected`设置为`true`。 - `close`事件监听器:当连接关闭时,将`client.connected`设置为`false`,表示客户端已断开连接。 6. **getData...

    memcache Java

    当应用程序需要数据时,它会首先检查Memcache,如果数据存在,就直接返回,避免了与数据库交互的延迟,这就是所谓的“缓存命中”。如果数据不在Memcache中,才会去数据库查找,这被称为“缓存未命中”。 在Tomcat...

    基于OSCache的页面缓存(收藏)

    在OSCache中,缓存是通过一个Key-Value对的形式存在的,Key通常是页面的URL或者一些标识页面内容的唯一键,Value则是页面的内容。当用户请求一个页面时,OSCache会先检查该页面是否已经在缓存中,如果存在则直接返回...

    memadmin 安装,memcache监控工具,详细文档

    `memadmin` 是一款专为 `memcached` 设计的管理工具,它可以帮助我们监控、管理和调整 `memcached` 服务器的状态,确保系统的高效运行。本篇文章将详细介绍 `memadmin` 的安装过程,以及如何利用它进行 `memcache` ...

    CenOS下安装Memcache和PHP Memcache扩展.

    在Linux系统,特别是CentOS上部署Web应用时,有时我们需要使用缓存技术来提升网站性能。Memcache是一款广泛使用的分布式内存对象缓存系统,它可以存储数据,减少数据库负载,提高应用响应速度。而PHP的Memcache扩展...

    PHP框架Gaeaphp.zip

    :log($module,$level,$message,[$context = array()]) 日志记录Core::db([$key='default',[$option=array()]]) 获取db实例Core::memcached([$key='default',[$servers=array(),[$options=array()]]]) 获取memcached...

    Laravel开发-laravel-aws-demo

    然后将 Laravel 项目打包为 `.zip` 文件,上传到 Elastic Beanstalk。确保 `.ebextensions` 目录包含必要的配置文件,以自定义环境设置,如设置环境变量。 **5. Lambda 和 API Gateway** Laravel 也可以与 AWS ...

    php 自定义封装 快递100

    为了减少对快递100服务器的负担,可以考虑使用缓存机制,比如Redis或Memcached,存储近期的查询结果,避免短时间内重复请求同一个快递单号。 7. **安全考虑**: 在实际应用中,要确保用户的快递单号不被滥用,...

Global site tag (gtag.js) - Google Analytics