using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// https://github.com/StackExchange/StackExchange.Redis/
// https://stackexchange.github.io/StackExchange.Redis/
// https://stackexchange.github.io/StackExchange.Redis/Basics
// https://redis.io/download#installation
namespace TopNugetPackages
{
public class MainRedisDriver : IDisposable
{
private ConnectionMultiplexer redis;
public MainRedisDriver()
{
redis = ConnectionMultiplexer.Connect("localhost"); // default port 6379
}
public void Dispose()
{
redis.Dispose();
}
public void TestRedisCache()
{
IDatabase db = redis.GetDatabase();
string keyname = "KEYNAME1";
string keyvalue = "TimHsu1";
db.StringSet(keyname, keyvalue);
var value = db.StringGet(keyname);
Console.WriteLine($"GOT REDIS KEY:[{keyname}] VALUE:[{value}]");
db.KeyDelete(keyname);
}
// Need Debug, wait, then works
public async Task<bool> TestRedisCacheAsync()
{
IDatabase db = redis.GetDatabase();
string keyname = "KEYNAME2";
string keyvalue = "TimHsu2";
await db.StringSetAsync(keyname, keyvalue);
await Task.Delay(100);
var value = await db.StringGetAsync(keyname);
Console.WriteLine($"GOT REDIS ASYNC KEY:[{keyname}] VALUE:[{value}]");
db.KeyDelete(keyname);
return true;
}
// Need Debug, wait, then works
public void TestRedisPubSub()
{
ISubscriber sub = redis.GetSubscriber();
string channel = "CHANNEL1";
string message = "HELLO WORLD";
// Synchronous handler
sub.Subscribe(channel).OnMessage(channelMessage =>
{
var msg = (string)channelMessage.Message;
Console.WriteLine($"GOT PUB/SUB msg: {msg}");
});
//// Asynchronous handler
//sub.Subscribe(channel).OnMessage(async channelMessage =>
//{
// await Task.Delay(100);
// var msg = (string)channelMessage.Message;
// Console.WriteLine($"GOT PUB/SUB msg: {msg}");
//});
// ADD DEBUG BREAK HERE
sub.Publish(channel, message);
}
}
}