[C#] ネットコアでの Redis の使用に関するチュートリアル

一連の記事



序文

公式チュートリアル: https://www.runoob.com/redis/redis-install.html
Remote DIctionary Server (Redis Remote Dictionary Server) は、Salvatore Sanfilippo によって作成されたキーと値のストレージ システムです。
Redis は、ANSI C 言語で書かれたオープンソースのログタイプの Key-Value データベースで、BSD プロトコルに準拠し、ネットワークをサポートし、メモリベースで永続化でき、複数の言語で API を提供します。
値には文字列、マップ、リスト、セット、ソートされたセットなどのタイプがあるため、データ構造サーバーと呼ばれることがよくあります。


1. Redis の概要

Redis およびその他のキーと値のキャッシュ製品には、次の 3 つの特徴があります。

  • Redis はデータの永続化をサポートしています。これにより、データをディスク上のメモリに保持し、再起動時に再ロードして使用できます。
  • Redis は、単純なキーと値の型のデータをサポートするだけでなく、リスト、セット、zset、ハッシュなどのデータ構造のストレージも提供します。
  • Redis はデータ バックアップ、つまりマスター/スレーブ モードでのデータ バックアップをサポートしています。

1.1 Redis の利点

  • 非常に高いパフォーマンス – Redis は 110,000 回/秒の速度で読み取り、81,000 回/秒の速度で書き込みます。
  • 豊富なデータ型 – Redis は、バイナリの場合の文字列、リスト、ハッシュ、セット、および順序付きセットのデータ型操作をサポートします。
  • アトミック – Redis のすべての操作はアトミックであり、Redis は完全にマージされた後のいくつかの操作のアトミック実行もサポートします。
    豊富な機能 – Redis はパブリッシュ/サブスクライブ、通知、キーの有効期限などの機能もサポートしています。

1.2 Redis は他の Key-Value ストアとどう違うのですか?

  • Redis はより複雑なデータ構造を持ち、それらに対するアトミックな操作を提供するという、他のデータベースとは異なる進化の過程を経ています。
  • Redis のデータ型は基本的なデータ構造に基づいており、追加の抽象化を必要とせずにプログラマにとって透過的です。
  • Redis はメモリ内で実行されますが、ディスクに永続化できるため、さまざまなデータ セットの高速読み取りおよび書き込みを実行するときは、メモリを考慮する必要があります。データ量はハードウェア メモリより大きくてはなりません。インメモリ データベースのもう 1 つの利点は、ディスク上の同じ複雑なデータ構造と比較して、メモリ内での操作が非常にシンプルであるため、Redis は内部の複雑性が高くても多くのことを実行できることです。また、ディスク形式に関しては、ランダム アクセスを必要としないため、コンパクトな追加生成となります。

2. Redis のインストール手順

2.1 ダウンロードリンク

ダウンロード アドレス: https://github.com/tporadowski/redis/releases
ここでは、Redis-x64-xxx.zip 圧縮パッケージを D:\Program Files にダウンロードし、解凍後、フォルダーの名前を redis に変更します。
次の内容が含まれるフォルダーを開きます。
ここに画像の説明を挿入します

2.2 設置テスト

現在のディレクトリで cmd ウィンドウを開いて実行を開始します。

redis-server.exe redis.windows.conf

利便性を求める場合は、システム環境変数に redis パスを追加すると、パスを再度入力する必要がなくなります。以下の redis.windows.conf は省略できます。省略した場合は、デフォルトのものが有効になります。 。入力後、次のインターフェイスが表示されます:
ここに画像の説明を挿入します
このとき、別の cmd ウィンドウを開いてください。元の cmd ウィンドウを閉じないでください。そうしないと、サーバーにアクセスできなくなります。
redis ディレクトリに切り替えて、以下を実行します。

redis-cli.exe -h 127.0.0.1 -p 6379

キーと値のペアを設定します。

myKey abc を設定します

キーと値のペアを取得します。

マイキーを取得する

ここに画像の説明を挿入します
テストの成功

3. Redis でアカウントのパスワードを変更する

サービス redis-server.exe redis.windows.conf を開始します
クライアント redis-cli.exe を開始します
パスワードを表示します config get requirepass
パスワードを設定します config set requirepass system //システムにパスワードを設定します
終了し
て再度ログインします - クライアント redis-cli.exe を開始します
再度ログイン - パスワード認証システムを入力してください
ここに画像の説明を挿入します

4. Redis は Windows サービスとして作成されます

毎回 cmd ウィンドウを起動するのは非常に面倒なので、簡単に起動できるように Windows サービスとして記述します。

redis-server --service-install redis.windows.conf
ここに画像の説明を挿入します
ここに画像の説明を挿入します

5. .net core - CSRedisCore を使用して Redis を操作する

ServiceStack.Redis は商用版であり、無料版には制限がある;
StackExchange.Redis は無料版であるが、.NETCore 上で動作するカーネルと頻繁なタイムアウトの問題があり、当面は解決できない;
CSRedis は、 2016 年に .NETCore をサポートし、今日に至るまで反復を続け、低しきい値、高パフォーマンス、高度なパーティショニングを実現した .NETCore redis-cli SDK; v3.0 バージョンの更新では、CSRedis のすべてのメソッド名が調整されています
。 redis-cli との整合性 redis-cli に精通している場合 コマンドに関しては、CSRedis を直接使用できるため、学習コストが大幅に削減されます。
ここに画像の説明を挿入します
RedisServer キャッシュ データベースのインスタンス化と接続を作成します。

using CSRedis;
using YS.Common;

namespace YS.Core
{
    
    
    /// <summary>
    /// 创建RedisServer缓存型数据库
    /// 说明:需要读取配置文件,里面有连接字符串
    /// </summary>
    public static class RedisServer
    {
    
    
        public static CSRedisClient? Cache;
        public static CSRedisClient? Sequence;
        public static CSRedisClient? Session;

        public static void Initalize()
        {
    
    
            Cache = new CSRedisClient(AppSettings.Configuration["RedisServer:Cache"]);
            Sequence = new CSRedisClient(AppSettings.Configuration["RedisServer:Sequence"]);
            Session = new CSRedisClient(AppSettings.Configuration["RedisServer:Session"]);
        }
    }
}

RedisCache.cs 補助クラス。操作の実行を担当します。


using SqlSugar;
using System;
using System.Collections.Generic;

namespace YS.Core
{
    
    
    /// <summary>
    /// Redis操作方法
    /// 说明:添加键值对、添加json,以及修改删除等
    /// </summary>
    public class RedisCache : ICacheService
    {
    
    
        public void Add<V>(string key, V value)
        {
    
    
            RedisServer.Cache.Set(key, value);
        }

        public void Add<V>(string key, V value, int cacheDurationInSeconds)
        {
    
    
            RedisServer.Cache.Set(key, value, cacheDurationInSeconds);
        }

        public bool ContainsKey<V>(string key)
        {
    
    
            return RedisServer.Cache.Exists(key);
        }

        public V Get<V>(string key)
        {
    
    
            return RedisServer.Cache.Get<V>(key);
        }

        public IEnumerable<string> GetAllKey<V>()
        {
    
    
            return RedisServer.Cache.Keys("Cache:SqlSugarDataCache.*");
        }

        public V GetOrCreate<V>(string cacheKey, Func<V> create, int cacheDurationInSeconds = int.MaxValue)
        {
    
    
            if (ContainsKey<V>(cacheKey))
            {
    
    
                return Get<V>(cacheKey);
            }
            else
            {
    
    
                var result = create();
                Add(cacheKey, result, cacheDurationInSeconds);
                return result;
            }
        }

        public void Remove<V>(string key)
        {
    
    
            RedisServer.Cache.Del(key.Remove(0, 6));
        }
    }
}

おすすめ

転載: blog.csdn.net/youcheng_ge/article/details/133072163
おすすめ