Memcached对密钥(250?)和值(大约1MB)有长度限制,以及一些(据我所知)对密钥没有很好定义的字符限制.在您看来,解决这些问题的最佳方法是什么?我使用Perl API Cache :: Memcached.
我目前所做的是,如果原始值太大("parts:
至于关键限制,人们可能会实现散列并在值中存储完整的密钥(以解决冲突),但我还不需要这样做.
有没有人提出更优雅的方式,甚至是透明处理任意数据大小(和键值)的Perl API?有没有人黑客入侵memcached服务器以支持任意键/值?
服务器已经允许您指定所需的大小:
-I Override the size of each slab page. Adjusts max item size (default: 1mb, min: 1k, max: 128m)
然而,大多数时候,当人们想要缓存更大的对象时,他们做错了什么.你真的需要一个缓存密钥中的那么多数据吗?未压缩?
如果您有足够大的任务,那么低延迟访问的好处与您实际传输数据所需的时间相比是相形见绌的.或者你发现在同一个键中抛出所有东西意味着你的前端最终不得不做大量的工作来反序列化他们想要的一些数据.
这取决于您的需求,如果不了解您正在做的事情,我无法告诉您什么对您最好.如果你确实需要大于1MB的东西,那就是我们添加的原因-I
.
$键= ABS(CRC32($ long_key))
通过这种方式,您可以获得查询和其他长密钥的唯一密钥,这些密钥可能会超出250个字符的memcache.
哇......小心.很好的建议,但没有重要的警告.这可能会导致碰撞.当然这是非常不可能的,但它只需要发生一次,以造成一个惊天动地的错误.您仍然可能希望使用memcached存储长密钥,并始终仔细检查密钥上的冲突.处理它们的最佳方法是存储一个简单的long_key/value对列表.