async def create_entry(ctx, db: AioRedis): """ Creates a rate limiter entry. @param ctx: (object) data to be inserted @param db: (object) db connection """ ctx['_id'] = str(bson.ObjectId()) await asyncio.gather( RateLimiter._set_indexes(ctx, db), db.hmset_dict(ctx['_id'], ctx), db.sadd(entry_set, ctx['_id']), db.expire(ctx['_id'], int(ctx['timeout'])) )
async def create_redis_rate_limiter(server_id: str, redis: Redis) -> RedisRateLimiter: server_key = f'api-server:{server_id}' initialize_futures = [ redis.script_load(_ACQUIRE_CONNECTION_SLOT), redis.script_load(_RELEASE_CONNECTION_SLOT), redis.script_load(_INCR_AND_EXPIRE_IF_NEW), redis.set(server_key, 'true'), redis.expire(server_key, SERVER_LIVENESS_EXPIRATION_SECONDS), ] [acquire_sha, release_sha, incr_expire_sha, *_] = await asyncio.gather(*initialize_futures) return RedisRateLimiter( server_id, redis, acquire_connection_sha=acquire_sha, release_connection_sha=release_sha, incr_expire_sha=incr_expire_sha, )
async def _delete(redis_cli: Redis, ride_id: str, timeout: int) -> None: ride = await get(redis_cli, ride_id) if ride is not None: keys = [_get_ride_key(ride_id, passenger.profile.user_id) for passenger in ride.passengers] await asyncio.gather(*[redis_cli.expire(key, timeout) for key in keys])