当前位置: 代码迷 >> 综合 >> 电商项目-缓存相关
  详细解决方案

电商项目-缓存相关

热度:45   发布时间:2024-01-21 03:41:37.0

 1.想要显示随机展示商品,又需要商品能更好的利用缓存,又兼顾其他重要排序,随机值可以取值范围20-200

 select DISTINCT(wcate.id),wcate.priority, MOD(wcate.id,30) suijifrom wcateleft join wsku on wsku.wcate_id = wcate.idinner join offer on wsku.id = offer.wsku_idwhere offer.app_show = 1order by wcate.priority asc, suijilimit 20 offset;

2.一个双缓存的设计

class JSONEncoder(json.JSONEncoder):def default(self, o):if isinstance(o, Decimal):return float(o)return json.JSONEncoder.default(self, o)class WeCache:def __init__(self, url, params, interval=5):if not interval:interval = 5self.interval = intervalself.url = urlself.params = json.dumps(params, cls=JSONEncoder)self.minute = int(time.strftime('%M', time.localtime(time.time()))) // self.interval * self.intervalself.key = self.build_key()def build_key(self):return self.url + '_' + self.params + '_' + str(self.minute)@staticmethoddef parse(response):return json.loads(response.decode())@staticmethoddef parse_list(response):return [r.decode() for r in response]def we_cache(url, params, interval=5):'''用url+params组成的缓存,间隔interval单位是分钟,推荐范围是1-30分钟:param url: 前缀标识,推荐用url:param params:请求参数:param interval:单位是分钟,推荐范围是1-30分钟:return:#use demo:def f():return time.time()new_f = we_cache('url', 'params')(f)for i in range(3):print('res {}'.format(new_f()))'''def decorator(func):@wraps(func)def wrapper(*args, **kwargs):wc = WeCache(url, params, interval)value = r.get(wc.key)# 返回缓存值if value:return wc.parse(value)else:# 只允许一个来重建缓存if r.setnx(wc.key + '_' + "flag", 'mark'):# bulid 缓存 responseresponse = func(*args, *kwargs)cathe_response = json.dumps(response, cls=JSONEncoder) or ''r.set(wc.key, cathe_response, ex=60 * wc.interval * 2)r.expire(wc.key + '_' + "flag", 60)return responseelse:wc.minute = (wc.minute - wc.interval + 60) % 60wc.key = wc.build_key()value = r.get(wc.key)# 这时候其实有两种选择,一是直接访问数据库,2是拒绝用户请求等到缓存完成后下次用户请求获取成功,这里选取的是1if value:return wc.parse(value)else:# raise ShopError(message='Other users are creating a new cache, please wait a moment.',#                 error_code=501)return func(*args, *kwargs)return wrapperreturn decorator

3.redis缓存的模糊查询和批量删除

keys "func:cate_list_new_*"

redis-cli -a '!QAZwemore' keys "func:cate_list_new_*" | xargs redis-cli -a '!QAZwemore' del

 

  相关解决方案