Open kalakala opened 10 years ago
Jacob, 我读了一下代码,
涉及到以下几种缓存:
search-result-cache property-cache suggestion-keyword-list api-key-to-site-id-dict site-id-to-api-key-dict
用户更新商品后,涉及到的缓存是search-result
和 property-cache
.
有两种方式可以实现:
cache.clear()
.
site_id
放到cache_key 的起始位置(),清空cache时只需要清空redis中以site_id
做为前缀的key,同时不会影响 suggestion、key-to-id、id-to-key 相关的缓存。 不过这种方式会带来两个问题
site_id
做为前缀我个人更倾向第二种使用方式。
我们用的django cache backend是django-redis,该backend支持cache.delete_pattern,应该能满足需要。(https://django-redis.readthedocs.org/en/latest/)
另外,请设计一下相应的清缓存的api。考虑一下如何请求清不同部分的缓存。得设计成私有的管理api。参见(http://search.tuijianbao.net/docs/v1.6/management_api_items.html)
jacob, api 设计如下:
Authentication: 与 /v1.6/private/items/
相同
API URI: POST /v1.6/private/cache/
参数:
flush = all | search | category | brand
categories = [cid, cid, cid...] (if flush == 'category')
brands = [bid, bid, bid ....] (if flush == 'brand')
@lisztli category/brand部分暂时不需要。
如果我没有记错,在更新category和brand时,cache会自动更新。请检查一下是否如此。如果不是,那么应该改成更新这两者时自动更新。
@jacobfan category、brand目前无法自动清空缓存,复现步骤如下:
{"count": 2, "id": "234", "label": "22223"}
"filters": {"categories":["234"]}, "q": ""
作为检索条件,查询; 可以看到结果中, id为234的category,label为 22223
{"count": 2, "id": "234", "label": "22224"}
"filters": {"categories":["234"]}, "q": " "
作为检索条件,查询; 可以看到结果中, id为234的category,label为 22223
<- 这里应该为 22224
del ":1:property-cache-230-category-234"
"filters": {"categories":["234"]}, "q": " "
作为检索条件,查询; 可以看到结果中, id为234的category,label为 22224
为了保证运营的需要,有时会对搜索数据的准确做及时的刷新, 孙总曾在微信上说过要提供这种接口。 麻烦明确一下什么时候会提供这样的接口。