久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

StackExchange.Redis 系列 1:基礎(chǔ)使用

 Coder編程 2021-04-16
  • 本系列博文是“偽”官方文檔翻譯,并非完全將官方文檔進(jìn)行翻譯,,而是我在查閱,、測(cè)試原始文檔并轉(zhuǎn)換為自己東西后進(jìn)行的“準(zhǔn)”翻譯。


  • 本系列本博文基于 redis 5.0.6,,系列中部分博文跟官方文檔有出入,,有不同見解 / 說(shuō)明不當(dāng)?shù)牡胤剑€請(qǐng)大家不吝拍磚,。

ConnectionMultiplexer 說(shuō)明

命名空間位于:StackExchange.Redis.ConnectionMultiplexer

  • ConnectionMultiplexer 是 StackExchange.Redis 的核心對(duì)象,,內(nèi)部繼承了 IDisposable,但建議不要用 using 以便可以愉快重用,,你就認(rèn)為它足夠安全吧,。

  • 該對(duì)象線程安全,且應(yīng)該被重用,,搞成單例即可,,不要每次操作都創(chuàng)建一個(gè)。

主從庫(kù)示例:

ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("server1:6379,server2:6379");

項(xiàng)目中調(diào)用實(shí)例

說(shuō)明:示例基于 .NET CORE 2.1,,通過(guò) IoC 進(jìn)行注入,,生命周期為“單例”。
如果不通過(guò) IoC 的話建議直接使用“單例模式”,。

    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
    }

其他一些建議和說(shuō)明

  • StackExchange.Redis 有 3種主要使用機(jī)制:

    • 同步

    • 異步:建議優(yōu)先使用異步方法而不是同步方法,。

    • 即發(fā)即忘(Fire-And-Forget):當(dāng)你不需要響應(yīng)結(jié)果的時(shí)候,可以使用這種機(jī)制,,被調(diào)用方法會(huì)立馬返回,,但操作會(huì)在后臺(tái)進(jìn)行執(zhí)行。,。

  • 即發(fā)即忘”機(jī)制補(bǔ)充:StackExchange.Redis 的方法中都有 CommandFlags 枚舉,,默認(rèn)值是 “None”,當(dāng)你需要使用“即發(fā)即忘”機(jī)制的時(shí)候,,需要在方法上顯示指定 CommandFlags.FireAndForget,,需要注意:

    • 如果返回值是一個(gè)字符串類型,則將總是返回 null,。

    • 如果返回值是一個(gè) Int64 類型,,則將總是返回 0。

    • 需要注意的是,如果返回值是一個(gè) boolean,,則返回的是 false(但操作是成功的,,此時(shí)不要用該返回值作為你后續(xù)業(yè)務(wù)的判斷依據(jù))。

db.StringIncrement(cacheKey, flags: CommandFlags.FireAndForget);
  • StackExchange.Redis.IDatabase 的一些方法,,是根據(jù) Redis 的數(shù)據(jù)類型來(lái)進(jìn)行命名的,,如 IDatabase.StringGet,這里的 StringGet 表示的是獲取一個(gè) String ,,跟 C# 中的字符串并非表示同一個(gè)東西,,可參考:關(guān)于 Redis 的數(shù)據(jù)類型

發(fā)布/訂閱

  • 發(fā)布/訂閱不需要指定 database

例子:
客戶端

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();
    }
}

測(cè)試效果:

image

服務(wù)器命令

若要使用服務(wù)器命令,,需要通過(guò) ConnectionMultiplexer 對(duì)象獲取 Server 對(duì)象,,如下:

var server = _redis.GetServer($"{_redisSettings.Address}:{_redisSettings.Port},allowAdmin=true");
server.ScriptExists("scripts here");

目前支持的方法如下

image

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多