memcache技巧 - 选择理想的密钥

时间:2011-11-25 17:18:10

标签: php caching memcached

我必须在PHP中创建一个应用程序来存储不同用户的手机联系人。

用于存储电话号码的表格格式如下:

id,user-id,phone-number

每当用户尝试查看他的所有联系人时,首先应显示缓存中的所有内容,然后显示数据库中的其余内容。

在实施中,我遇到以下问题:

如何将电话号码存储在缓存中?通过这个我的意思是什么应该是将电话号码插入内存缓存的关键,以便我可以轻松地从任何用户提取数据。请记住,每个用户可以拥有许多电话号码,并且有很多用户。

2 个答案:

答案 0 :(得分:1)

密钥应该使用用户ID

user id { mobile number ... + list of contact ...[which is the user id]} 
// by accessing this key able to get all mobile number
// and his contact list

建议值应尽可能简单,
没有JSON,没有序列化数据

user id {m:xxx,xxxx..., c:yyy,yyy,yyy}

这是为了节省空间并节省json_decode / unserailize

的处理

获取用户的所有联系人

1. fetch cache using user id (one call)
2. iterate the list of contact
3. fetch parellel of all the contact (user) key * function handling
4. iterate to build a multi dimensional array

当用户添加/更新/删除手机号码时,
或添加/更新/删除手机号码

1. fetch cache using user id (one call)
2. expire the key using user id
3. iterate the cache result

你的功能应该是如果memcache中不存在缓存,
从数据库中取出,
设置memcache,
返回数据库结果

答案 1 :(得分:0)

缓存密钥格式应为

12_contacts其中12是用户ID。

在密钥内部,您可以将该用户的完整联系人列表存储为数组。通常这意味着无论何时用户联系人更改,您都可以清除或重建memcache密钥。你需要将完整的联系人列表存储在密钥中作为一个数组,存储一个部分列表,然后查询任何其他列表就会失败。