RedisNet、DetNetコアのための生産準備Redisクライアント


  • からソースコードをチェックする
    Githubからそれをダウンロードする
  • dotnet add package RedisNet
    
  • 圧縮(あなたの重いレイス呼び出しパフォーマンスを50 %増加させます)
  • public void ConfigureServices(IServiceCollection services)
    {
        var redis2ConfigurationOptions = ConfigurationOptions.Parse("localhost:6379");
        redis2ConfigurationOptions.ReconnectRetryPolicy = new ExponentialRetry(1000);
        services.AddRedisDotNet(new RedisCacheOptions()
        {
            ConfigurationOptions = redis2ConfigurationOptions,
            CompressionOption = new CompressionOption()
            {
                TriggerByteSize = 100 * 1024
            }
        });
    }
    
    Redisキーの値サイズが100キロバイトを超えたとき、GZIP圧縮アルゴリズムを適用してサイズを小さくし、検索時に自動的にそれを解凍しますので、全体のプロセスはクライアントの視点から透明です.圧縮はネットワークを通してデータパケットのサイズを減少させます、したがって、REDIS呼び出しのパフォーマンスは50 %増加します.
    レガックスによる
  • キー削除
    Nuget
    圧縮ベンチマーク結果
    
    BenchmarkDotNet=v0.12.1, OS=macOS 11.3 (20E232) [Darwin 20.4.0]
    Intel Core i7-9750H CPU 2.60GHz, 1 CPU, 12 logical and 6 physical cores
    .NET Core SDK=5.0.201
      [Host] : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT DEBUG
    
    
    
    方法
    平均
    エラー
    stddev
    ジェン0
    ジェン1
    ゲン2
    割り当てた
    圧縮
    668.2 ms
    13.34 ms
    18.24 ms
    -
    -
    -
    4.88 MB
    を返します.
    1387.1 ms
    26.92 ms
    37.74 ms
    -
    -
    -
    2.39 MB

    使用方法1
    シングルREDISサーバ
    前提条件
    docker run --name redis1 -d -p 6379:6379  redis redis-server --appendonly yes
    
    public void ConfigureServices(IServiceCollection services)
    {
        var redis2ConfigurationOptions = ConfigurationOptions.Parse("localhost:6379");
        redis2ConfigurationOptions.ReconnectRetryPolicy = new ExponentialRetry(1000);
        services.AddRedisDotNet(new RedisCacheOptions()
        {
            ConfigurationOptions = redis2ConfigurationOptions
        });
    }
    
    public class TestController : Controller
    {
        private readonly IRedisService _redisService;
        public TestController(IRedisService redisService){
            _redisService = redisService;
        }
    
        public IActionResult Get(string key){
            var result = _redisService.GetString(key);
            return OK(result);
        }
    
        public async Task<IActionResult> GetAsync(string key){
            var result = await _redisService.GetStringAsync(key);
            return OK(result);
        }
    }
    
    
    

    使用方法2
    複数のREDISサーバ
    前提条件
    docker run --name redis1 -d -p 6379:6379  redis redis-server --appendonly yes
    docker run --name redis2 -d -p 6380:6380  redis redis-server --appendonly yes
    
    public void ConfigureServices(IServiceCollection services)
    {
        var redis1ConfigurationOptions = ConfigurationOptions.Parse("localhost:6379");
        redis1ConfigurationOptions.ReconnectRetryPolicy = new ExponentialRetry(1000);
        services.AddRedisDotNet<Redis1>(new RedisCacheOptions()
        {
           ConfigurationOptions = redis1ConfigurationOptions
        });
    
        var redis2ConfigurationOptions = ConfigurationOptions.Parse("localhost:6380");
        redis2ConfigurationOptions.ReconnectRetryPolicy = new ExponentialRetry(1000);
        services.AddRedisDotNet<Redis2>(new RedisCacheOptions()
        {
           ConfigurationOptions = redis2ConfigurationOptions
        });
    }
    
    
    public class Redis1 : RedisService<Redis1>
    {
        public Redis1(IOptionsMonitor<RedisCacheOptions> cacheOptions) : base(cacheOptions)
        {
        }
    }
    
    
    public class Redis2 : RedisService<Redis2>
    {
        public Redis2(IOptionsMonitor<RedisCacheOptions> cacheOptions) : base(cacheOptions)
        {
        }
    }
    
    public class Redis1Controller : ControllerBase
    {
        private readonly Redis1 _redis1;
    
        public Redis1Controller(Redis1 redis1)
        {
            _redis1 = redis1;
        }
    
        [HttpGet]
        public async Task<IActionResult> Get()
        {
            return Ok(await _redis1.GetStringAsync("redis1"));
        }
    }
    
    
    public class Redis2Controller : ControllerBase
    {
        private readonly Redis2 _redis2;
    
        public Redis2Controller(Redis2 redis2)
        {
            _redis2 = redis2;
        }
    
        [HttpGet]
        public async Task<IActionResult> Get()
        {
            return Ok(await _redis2.GetStringAsync("redis2"));
        }
    }
    
    
    
  • からソースコードをチェックする
    からそれをダウンロードする
  • dotnet add package RedisNet --version 1.1.0
    
    ハッピーコーディング