def load_words_into_redis_mset_slice(redis, words): ''' Load words into redis as sliced chunks - slow....... ''' ct = CodeTimer() print(f"Loading {len(words)} words") count = 0 grab = 5000 ct.start() while count < len(words): take = grab if count + grab > len(words): take = len(words) - count sliced = words[count:(take + count)] count += take bag = {} for word in sliced: bag[word] = "true" redis.mset(bag) print(f"{count} words loaded - first:'{sliced[0]}' last:'{sliced[-1]}' '{ct.stop():0.4f}' secs") ct.start() ct.stop() print("Finished")
def update(id, downloader, now): try: daily_menu = downloader(now) assert isinstance(daily_menu, list) except Timeout: print(f"timeout in «{id}» provider") daily_menu = [] except: print(f"exception in «{id}» provider:\n", traceback.format_exc()) daily_menu = [] daily_menu = normalize_menu(daily_menu) redis.mset({ f"{id}:menu": json.dumps(daily_menu), f"{id}:timestamp": now.isoformat() })
def update(place, now): try: daily_menu = place.downloader(now) assert isinstance(daily_menu, Iterable), "Download function must return a list or other iteratable" daily_menu = normalize_menu(daily_menu) except Timeout: print(f"timeout in «{place.id}» provider") daily_menu = [] except: print(f"exception in «{place.name}» provider:\n", traceback.format_exc()) daily_menu = [] redis.mset({ f"{place.id}:menu": json.dumps(daily_menu), f"{place.id}:timestamp": now.strftime(DATEFORMAT) })
def strings_redis(): import redis #charset="utf-8", decode_responses=True => avoid b' in redis python redis = redis.Redis(host='127.0.0.1', port=6379, db=0, charset="utf-8", decode_responses=True) print("-------------") print("STRINGS") print("-------------") #info() print(redis.info()) print("-------------") #monitor() print(redis.monitor()) print("-------------") #set() redis.set("name", "javier") redis.set("name", "jaime") print("key: ", redis.get("name")) print("-------------") print("all keys: ", redis.keys()) print("keys with a 'name...': ", redis.keys("name*")) print("keys with a 'e': ", redis.keys("*e*")) print("-------------") #setnx(name, value) redis.set("name", "javier") #mset(name, value) redis.mset({"name": "peter", "name": "david"}) print("name: ", redis.mget("name")) print("-------------") #getrange(name, start, end) - substrings of the value print("range : ", redis.getrange("name", 0, 3)) #delete all keys for key in redis.scan_iter("prefix:*"): redis.delete(key)
def load_words_into_redis_mset(redis, words): ''' Load words into redis as keys - slow....... ''' ct = CodeTimer() print(f"Loading {len(words)} words") count = 0 first_word = "" ct.start() for word in words: redis.mset({word:"true"}) count += 1 if first_word == "": first_word = word if count % 1000 == 0: print(f"{count} words loaded - first:'{first_word}' last:'{word}' '{ct.stop():0.4f}' secs") first_word = "" ct.start() print(f"{count} words loaded - first:'{first_word}' last:'{word}' '{ct.stop():0.4f}' secs") print("Finished")
def __multi_set_ttl(self, conn, flattened, ttl): redis = conn.pipeline() redis.mset(flattened) for key in flattened: redis.expire(key, ttl) redis.execute()