Skip to content

Commit

Permalink
Merge pull request #27 from peppy/lazy-redis
Browse files Browse the repository at this point in the history
Make redis initialisation lazy
  • Loading branch information
smoogipoo authored Oct 9, 2023
2 parents 4c4f1bd + 4f02212 commit 8d19ac5
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions osu.Server.QueueProcessor/QueueProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,10 @@ public abstract class QueueProcessor<T> where T : QueueItem

private readonly QueueConfiguration config;

/// <summary>
/// An option queue to push to when finished.
/// </summary>
private readonly ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(
Environment.GetEnvironmentVariable("REDIS_HOST") ?? "localhost");
private readonly Lazy<ConnectionMultiplexer> redis = new Lazy<ConnectionMultiplexer>(() => ConnectionMultiplexer.Connect(
Environment.GetEnvironmentVariable("REDIS_HOST") ?? "localhost"));

private IDatabase getRedisDatabase() => redis.Value.GetDatabase();

private long totalProcessed;

Expand Down Expand Up @@ -92,7 +91,7 @@ public void Run(CancellationToken cancellation = default)

using (var threadPool = new ThreadedTaskScheduler(Environment.ProcessorCount, "workers"))
{
var database = redis.GetDatabase();
IDatabase database = getRedisDatabase();

while (!cts.Token.IsCancellationRequested)
{
Expand Down Expand Up @@ -229,19 +228,19 @@ private void outputStats()
/// </summary>
/// <param name="item"></param>
public void PushToQueue(T item) =>
redis.GetDatabase().ListLeftPush(QueueName, JsonConvert.SerializeObject(item));
getRedisDatabase().ListLeftPush(QueueName, JsonConvert.SerializeObject(item));

/// <summary>
/// Push multiple items to the queue.
/// </summary>
/// <param name="items"></param>
public void PushToQueue(IEnumerable<T> items) =>
redis.GetDatabase().ListLeftPush(QueueName, items.Select(obj => new RedisValue(JsonConvert.SerializeObject(obj))).ToArray());
getRedisDatabase().ListLeftPush(QueueName, items.Select(obj => new RedisValue(JsonConvert.SerializeObject(obj))).ToArray());

public long GetQueueSize() =>
redis.GetDatabase().ListLength(QueueName);
getRedisDatabase().ListLength(QueueName);

public void ClearQueue() => redis.GetDatabase().KeyDelete(QueueName);
public void ClearQueue() => getRedisDatabase().KeyDelete(QueueName);

/// <summary>
/// Publishes a message to a Redis channel with the supplied <paramref name="channelName"/>.
Expand All @@ -255,7 +254,7 @@ public long GetQueueSize() =>
/// <typeparam name="TMessage">The type of message to be published.</typeparam>
public void PublishMessage<TMessage>(string channelName, TMessage message)
{
redis.GetDatabase().Publish(channelName, JsonConvert.SerializeObject(message));
getRedisDatabase().Publish(channelName, JsonConvert.SerializeObject(message));
DogStatsd.Increment("messages_published", tags: new[] { $"channel:{channelName}", $"type:{typeof(TMessage).FullName}" });
}

Expand Down

0 comments on commit 8d19ac5

Please sign in to comment.