我必须在PHP中创建一个应用程序,它将存储不同用户的手机联系人。memcache技巧 - 选择理想的密钥
用于存储电话号码表的格式如下:
id,user-id,phone-number
每当一个用户试图查看他的所有联系人,首先从缓存中的内容应该显示,然后将剩余的来自数据库。
在实现这一点,我有以下问题:
如何将电话号码存储在缓存中?我的意思是将电话号码插入memcache的关键是什么,以便我可以轻松地从任何用户那里提取数据。请记住,每个用户可以有很多电话号码,并且有很多用户。
我必须在PHP中创建一个应用程序,它将存储不同用户的手机联系人。memcache技巧 - 选择理想的密钥
用于存储电话号码表的格式如下:
id,user-id,phone-number
每当一个用户试图查看他的所有联系人,首先从缓存中的内容应该显示,然后将剩余的来自数据库。
在实现这一点,我有以下问题:
如何将电话号码存储在缓存中?我的意思是将电话号码插入memcache的关键是什么,以便我可以轻松地从任何用户那里提取数据。请记住,每个用户可以有很多电话号码,并且有很多用户。
密钥应该使用的用户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
你的功能应该是,如果内存缓存中不存在缓存,
从取数据库,
set memcache,
返回数据库结果
缓存密钥格式应该是
12_contacts
其中12是用户ID。
在密钥内部,您可以将该用户的联系人的完整列表作为数组存储。通常这意味着只要用户联系人发生变化,您就可以清除或重建memcache密钥。您需要将完整的联系人列表作为数组存储在密钥中,存储部分列表,然后查询其他人是否会破坏目的。
但是,如果用户有太多的联系人,以适应1MB空间来存储t他重视对应一把钥匙,那该怎么办? –
购买更多硬盘空间。 memcache的用途是速度,memcache需要驱动器空间。 – Julien
为特定用户添加新号码时,是否需要删除该用户ID的缓存条目,然后添加新列表?同样对于删除,我应该从缓存中删除整个条目并添加该ID的新列表? –
是的,对用户所做的任何更改,都需要将其缓存过期以保持数据的新鲜度。一旦找不到缓存,从数据库获取,将其设置为memcache – ajreal