本系列博文已经所有完成,完整系列请访问:https://blog.zhuliang.ltd/tags/StackExchange-Redis%E7%B3%BB%E5%88%97/html
本文转自:https://blog.zhuliang.ltd/2020/01/redis/StackExchangeRedis-BasicUsage.htmlgit
- 本系列博文是“伪”官方文档翻译,并不是彻底将官方文档进行翻译,而是我在查阅、测试原始文档并转换为本身东西后进行的“准”翻译。
- 原始文档见此:https://stackexchange.github.io/StackExchange.Redis/
- 本系列本博文基于 redis 5.0.6,系列中部分博文跟官方文档有出入,有不一样看法 / 说明不当的地方,还请你们不吝拍砖。
命名空间位于:StackExchange.Redis.ConnectionMultiplexergithub
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("server1:6379,server2:6379");
说明:示例基于 .NET CORE 2.1,经过 IoC 进行注入,生命周期为“单例”。
若是不经过 IoC 的话建议直接使用“单例模式”。redis
public class RedisClient : ICache { private readonly RedisSettings _redisSettings; private static IDatabaseAsync _db; public RedisClient(IOptions<RedisSettings> redisSettings) { _redisSettings = redisSettings.Value; var redis = ConnectionMultiplexer.Connect($"{_redisSettings.Address}:{_redisSettings.Port}"); _db = redis.GetDatabase(_redisSettings.DataBase); } #region Implementation of ICache public async Task<bool> SetStringAsync(string key, string content) { return true; } public async Task<string> GetStringAsync(string key) { var result = await _db.StringGetAsync(key); return result; } #endregion }
db.StringIncrement(cacheKey, flags: CommandFlags.FireAndForget);
例子:
客户端json
private readonly RedisSettings _redisSettings; private static IDatabaseAsync _db; private static ConnectionMultiplexer _redis; public RedisClient(IOptions<RedisSettings> redisSettings) { _redisSettings = redisSettings.Value; _redis = ConnectionMultiplexer.Connect($"{_redisSettings.Address}:{_redisSettings.Port}"); _db = _redis.GetDatabase(_redisSettings.DataBase); } public async Task Subscribe(string channel, Action<RedisChannel, RedisValue> fun) { var sub = _redis.GetSubscriber(); await sub.SubscribeAsync(channel, fun); } public async Task Publish(string channel, string message) { var sub = _redis.GetSubscriber(); await sub.PublishAsync(channel, message); }
订阅者安全
class Program { static void Main(string[] args) { var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json"); var configuration = builder.Build(); var subscriber = configuration["Subscriber"]; var settings = configuration.GetSection("RedisSettings").Get<RedisSettings>(); var redisClient = new RedisClient(settings); redisClient.Subscribe(settings.ChannelName, (channel, message) => { System.Console.WriteLine($"{subscriber}:{message}"); }).Wait(); System.Console.WriteLine("started"); System.Console.ReadKey(); } }
测试效果:服务器
若要使用服务器命令,须要经过 ConnectionMultiplexer 对象获取 Server 对象,以下:app
var server = _redis.GetServer($"{_redisSettings.Address}:{_redisSettings.Port},allowAdmin=true"); server.ScriptExists("scripts here");
目前支持的方法以下异步