From aabf5f98ad26e467645033c2cc80f5ff7e678aa2 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期四, 03 八月 2023 10:15:47 +0800 Subject: [PATCH] redis封装 --- code_attribute/gpcode_manager.py | 89 +++++++++++++++++++++++++++++++------------- 1 files changed, 63 insertions(+), 26 deletions(-) diff --git a/code_attribute/gpcode_manager.py b/code_attribute/gpcode_manager.py index 21e84e0..40ca2a9 100644 --- a/code_attribute/gpcode_manager.py +++ b/code_attribute/gpcode_manager.py @@ -17,6 +17,7 @@ class CodesNameManager: redisManager = redis_manager.RedisManager(0) + __gp_list_names_first_cache = [] @classmethod def __get_redis(cls): @@ -44,8 +45,8 @@ return None @classmethod - def list_second_code_name_dict(cls): - val = RedisUtils.get(cls.__get_redis(), "gp_list_names") + def list_first_code_name_dict_cache(cls): + val = RedisUtils.get(cls.__get_redis(), "gp_list_names_first") if val is not None: val = json.loads(val) return val @@ -61,16 +62,6 @@ if val[k] == code: return k return None - - @classmethod - def get_second_code_name(cls, code): - val = RedisUtils.get(cls.__get_redis(), "gp_list_names") - if not val: - return None - val = json.loads(val) - for k in val: - if val[k] == code: - return k @classmethod def get_first_name_code(cls, name): @@ -89,6 +80,34 @@ val[name] = code cls.set_first_code_names(val) + # 璁剧疆棣栨澘浠g爜鍚嶇О + @classmethod + def set_first_code_names(cls, datas): + RedisUtils.set(cls.__get_redis(), "gp_list_names_first", json.dumps(datas)) + + # 鍒犻櫎棣栨澘浠g爜鍚嶇О + @classmethod + def clear_first_code_names(cls): + RedisUtils.delete(cls.__get_redis(), "gp_list_names_first") + + @classmethod + def list_second_code_name_dict(cls): + val = RedisUtils.get(cls.__get_redis(), "gp_list_names") + if val is not None: + val = json.loads(val) + return val + return None + + @classmethod + def get_second_code_name(cls, code): + val = RedisUtils.get(cls.__get_redis(), "gp_list_names") + if not val: + return None + val = json.loads(val) + for k in val: + if val[k] == code: + return k + @classmethod def get_second_name_code(cls, name): val = RedisUtils.get(cls.__get_redis(), "gp_list_names") @@ -97,20 +116,10 @@ val = json.loads(val) return val.get(name) - # 璁剧疆棣栨澘浠g爜鍚嶇О - @classmethod - def set_first_code_names(cls, datas): - RedisUtils.set(cls.__get_redis(), "gp_list_names_first", json.dumps(datas)) - # 璁剧疆浜屾澘浠g爜鍚嶇О @classmethod def set_second_code_names(cls, datas): RedisUtils.set(cls.__get_redis(), "gp_list_names", json.dumps(datas)) - - # 鍒犻櫎棣栨澘浠g爜鍚嶇О - @classmethod - def clear_first_code_names(cls): - RedisUtils.delete(cls.__get_redis(), "gp_list_names_first") # 璁剧疆浜屾澘浠g爜鍚嶇О @classmethod @@ -160,6 +169,7 @@ class WantBuyCodesManager: redisManager = redis_manager.RedisManager(0) __redis_key = "want_buy_codes" + __want_buy_codes_cache = set() @classmethod def __get_redis(cls): @@ -171,16 +181,29 @@ @classmethod def add_code(cls, code): + cls.__want_buy_codes_cache.add(code) RedisUtils.sadd(cls.__get_redis(), cls.__redis_key, code) RedisUtils.expire(cls.__get_redis(), cls.__redis_key, tool.get_expire()) @classmethod def remove_code(cls, code): + cls.__want_buy_codes_cache.discard(code) RedisUtils.srem(cls.__get_redis(), cls.__redis_key, code) + + @classmethod + def sync(cls): + cls.__want_buy_codes_cache.clear() + codes = RedisUtils.smembers(cls.__get_redis(), cls.__redis_key) + if codes: + cls.__want_buy_codes_cache += set(codes) @classmethod def is_in(cls, code): return RedisUtils.sismember(cls.__get_redis(), cls.__redis_key, code) + + @classmethod + def is_in_cache(cls, code): + return code in cls.__want_buy_codes_cache @classmethod def list_code(cls): @@ -264,6 +287,9 @@ CodesNameManager.set_second_code_names(old_name_codes) +__gp_list_first_codes_cache = set() + + # -------------------------------棣栨澘浠g爜绠$悊------------------------------- # 娣诲姞棣栨澘浠g爜 # code_datas 鎺橀噾杩斿洖鐨勬暟鎹� @@ -273,7 +299,7 @@ codes_set = set() for code in codes: codes_set.add(code) - old_codes_set = RedisUtils.smembers(redis_instance, "gp_list_first") + old_codes_set = __gp_list_first_codes_cache if old_codes_set is None: old_codes_set = set() del_set = old_codes_set - codes_set @@ -282,7 +308,12 @@ RedisUtils.sadd(redis_instance, "gp_list_first", code) for code in del_set: RedisUtils.srem(redis_instance, "gp_list_first", code) - RedisUtils.expire(redis_instance, "gp_list_first", tool.get_expire()) + if add_codes or del_set: + RedisUtils.expire(redis_instance, "gp_list_first", tool.get_expire()) + # 鏇存柊缂撳瓨 + __gp_list_first_codes_cache.clear() + for code in codes_set: + __gp_list_first_codes_cache.add(code) old_name_codes = CodesNameManager.list_first_code_name_dict() if old_name_codes is None: @@ -440,7 +471,7 @@ # 璇诲彇鍐呭瓨涓殑鍊� if code in __limit_up_price_dict: return __limit_up_price_dict[code] - price = get_price_pre(code) + price = get_price_pre_cache(code) if price is None: return None limit_up_price = tool.to_price(decimal.Decimal(str(price)) * decimal.Decimal("1.1")) @@ -456,7 +487,7 @@ # 鑾峰彇璺屽仠浠� def get_limit_down_price(code): - price = get_price_pre(code) + price = get_price_pre_cache(code) if price is None: return None return tool.to_price(decimal.Decimal(str(price)) * decimal.Decimal("0.9")) @@ -471,8 +502,14 @@ return None +__current_price_cache = {} + + # 璁剧疆鐜颁环 def set_price(code, price): + if code in __current_price_cache and __current_price_cache[code] == price: + return + __current_price_cache[code] = price redis_instance = __redisManager.getRedis() RedisUtils.setex(redis_instance, "price-{}".format(code), tool.get_expire(), price) -- Gitblit v1.8.0