ホームページ バックエンド開発 PHPチュートリアル Windows で Redis キャッシュ サーバーを使用する方法

Windows で Redis キャッシュ サーバーを使用する方法

Feb 08, 2017 pm 01:53 PM
redis windows

1. Redis サーバー


まず Redis サーバーをダウンロードし、クリックして .msi バージョンをダウンロードし、ダブルクリックして Redis サーバーをインストールし、システムをサービスとして起動します:

Windows で Redis キャッシュ サーバーを使用する方法

Redis をインストールするサーバーの後に最初に行うことは、パスワードを設定してインストール ディレクトリを入力することです: C:Program FilesRedis - 構成ファイルを検索します: redis.windows-service.conf - 検索: # requirepass fo Bared - 入力して改行し、追加します: requirepass Writeここに新しいパスワードを入力します (先頭行にスペースを入れないでください) - サービスに移動して Redis サービスを再起動するか、コンピューターを再起動します

パスワードを設定しない場合のデメリットは、何が起こったかを見てください。 Ctrip のこの人: Redis が攻撃された事件を思い出してください


2. Redis クライアント (コマンド ラインおよび視覚化ツール RDM)

コマンド ライン モードのデモ: Redis クライアントを起動し、Redis サーバーの読み取りと書き込みを行います

Windows で Redis キャッシュ サーバーを使用する方法

上の図のコマンドの説明:

cd C:Program FilesRedis:cd このコマンドは、Redis インストール ディレクトリに入ります。これは、Windows システムの

redis-cli.exe をダブルクリックして Redis インストール ディレクトリに入るのと同じです。 redis-cli クライアント プログラムを開きます。これは、Windows システムで exe プログラムをダブルクリックして実行するのと同じです (上記の Redis サービスがインストールされています。サーバーに接続するにはクライアント プログラムが必要です。ローカル Redis サーバーに接続するには、このコマンドを直接入力して、リモート サーバーに接続するには、IP とポートを追加する必要があります。例: redis-cli.exe -h 111.11.11.111 -p 6379)


keys *: すべてのキーを表示します。値のペア (Redis サーバーがパスワードを設定している場合、このコマンドはエラーを報告します。最初にパスワードを入力する必要があります。次のコマンドを実行します: パスワードを認証します)

set blog oppoic.cnblogs.com: 設定 A キーと値ペア、キーは: blog、値は: oppoic.cnblogs.com (ディレクトリによって保存: ディレクトリ名を設定: キー値)

get blog: キー blog に対応する値を取得します

keys *: すべてのキーを表示値のペア

その他の一般的なコマンド:

config get dir: Redis インストール ディレクトリを取得します

ping: Redis サーバーが正常であることを示す PONG を返します

redis-cli.exe: 最初のデータベース (デフォルト)、redis を入力しますtotals 0 to 15 合計 16 のライブラリがあります。3 番目のライブラリに入ります。 redis-cli -n 2 (既に入力されています。0 ~ 15 を選択し、任意に切り替えます)

quit: redis プログラムを終了します

exit: dos ウィンドウを終了します

flushdb: 現在選択されているデータベースを削除します。

flushall のすべてのキーを削除します。

その他のコマンド: https://redis.io/commands

この時点で、このマシン上で Redis キャッシュ サーバーが実行されています。がセットアップされており、読み取りと書き込みが可能です。ただし、コマンド ラインは明らかに初心者ユーザーにとって使いやすいものではありません。ビジュアル ツールは次のとおりです: Redis Desktop Manager (https://redisdesktop.com/download)

Windows で Redis キャッシュ サーバーを使用する方法

左側のツリーは、すでに接続があることを示しています。下部の [Redis に接続] をクリックします。 サーバーが別の接続を追加します:

名前: 接続名、適当に選択します

ホスト: ホスト アドレス、このマシンは 127.0.0.1、リモート入力は IP に対応します

ポート: ポート、 Redis サーバーのデフォルトのポートは 6379 です

Auth: パスワード、設定されている場合は失われ、設定されていない場合は空白のままにしてください

Redis サーバーに接続すると、デフォルトで 16 のライブラリがあることがわかります (設定ファイルは変更可能)、そしてインデックスは 0 から始まります。一般的な使用法は、1 つのプロジェクトと 1 つのライブラリを持ち、プロジェクト内の異なる機能モジュールがこのライブラリの下の異なるディレクトリに保存されることです。

可視化ツールを手に入れた後の操作は言うまでもなく、ダブルクリック、右クリックで作成、削除です。 。 。 Windows システムの使用方法を知っている人なら誰でも、このツールを使用できます。 Redis Desktop Manager は、コマンド ラインと比較して、リモート サーバー上のデータをデバッグするのにさらに使いやすく便利なビジュアル ツールです。

注: このマシンではこれを実行できます。リモート サーバーに接続するには、サーバー上の Redis インストール ディレクトリに移動し、redis.windows-service.conf ファイルを見つけて、bind 127.0.0.1 を見つけてコメント化する必要があります。先頭に「#」を付けてサービスを右クリックし、redis サービスを再起動するか、Windows システムを再起動します

3. C# は Redis サーバーを操作します

上記は Redis サーバーを操作するためのコマンドラインとビジュアルツールです。C# プログラムは Redis を操作するために StackExchange.Redis (https://github.com/StackExchange/StackExchange.Redis) を使用する必要があります。統合呼び出しを行うために、RedisHelper ヘルパー クラスをカプセル化します:

using Newtonsoft.Json;
using StackExchange.Redis;
using System;
using System.ComponentModel;
using System.Configuration;
using System.Reflection;
using System.Text;

namespace redis_Demo
{
    /// <summary>
    /// Redis 帮助类
    /// </summary>
    public static class RedisHelper
    {
        private static string _conn = ConfigurationManager.AppSettings["redis_connection_string"] ?? "127.0.0.1:6379";
        private static string _pwd = ConfigurationManager.AppSettings["redis_connection_pwd"] ?? "123456";

        static ConnectionMultiplexer _redis;
        static readonly object _locker = new object();

        #region 单例模式
        public static ConnectionMultiplexer Manager
        {
            get
            {
                if (_redis == null)
                {
                    lock (_locker)
                    {
                        if (_redis != null) return _redis;

                        _redis = GetManager();
                        return _redis;
                    }
                }
                return _redis;
            }
        }

        private static ConnectionMultiplexer GetManager(string connectionString = null)
        {
            if (string.IsNullOrEmpty(connectionString))
            {
                connectionString = _conn;
            }
            var options = ConfigurationOptions.Parse(connectionString);
            options.Password = _pwd;
            return ConnectionMultiplexer.Connect(options);
        }
        #endregion

        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="folder">目录</param>
        /// <param name="key">键</param>
        /// <param name="value">值</param>
        /// <param name="expireMinutes">过期时间,单位:分钟。默认600分钟</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        /// <returns></returns>
        public static bool StringSet(CacheFolderEnum folder, string key, string value, int expireMinutes = 600, int db = -1)
        {
            string fd = GetDescription(folder);
            return Manager.GetDatabase(db).StringSet(string.IsNullOrEmpty(fd) ? key : fd + ":" + key, value, TimeSpan.FromMinutes(expireMinutes));
        }

        /// <summary>
        /// 获取
        /// </summary>
        /// <param name="folder">目录</param>
        /// <param name="key">键</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        /// <returns></returns>
        public static string StringGet(CacheFolderEnum folder, string key, int db = -1)
        {
            try
            {
                string fd = GetDescription(folder);
                return Manager.GetDatabase(db).StringGet(string.IsNullOrEmpty(fd) ? key : fd + ":" + key);
            }
            catch (Exception)
            {
                return null;
            }
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="folder">目录</param>
        /// <param name="key">键</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        /// <returns></returns>
        public static bool StringRemove(CacheFolderEnum folder, string key, int db = -1)
        {
            try
            {
                string fd = GetDescription(folder);
                return Manager.GetDatabase(db).KeyDelete(string.IsNullOrEmpty(fd) ? key : fd + ":" + key);
            }
            catch (Exception)
            {
                return false;
            }
        }
        /// <summary>
        /// 是否存在
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        public static bool KeyExists(CacheFolderEnum folder, string key, int db = -1)
        {
            try
            {
                string fd = GetDescription(folder);
                return Manager.GetDatabase(db).KeyExists(string.IsNullOrEmpty(fd) ? key : fd + ":" + key);
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// 延期
        /// </summary>
        /// <param name="folder">目录</param>
        /// <param name="key">键</param>
        /// <param name="min">延长时间,单位:分钟,默认600分钟</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        public static bool AddExpire(CacheFolderEnum folder, string key, int min = 600, int db = -1)
        {
            try
            {
                string fd = GetDescription(folder);
                return Manager.GetDatabase(db).KeyExpire(string.IsNullOrEmpty(fd) ? key : fd + ":" + key, DateTime.Now.AddMinutes(min));
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// 添加实体
        /// </summary>
        /// <param name="folder">目录</param>
        /// <param name="key">键</param>
        /// <param name="t">实体</param>
        /// <param name="ts">延长时间,单位:分钟,默认600分钟</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        public static bool Set<T>(CacheFolderEnum folder, string key, T t, int expireMinutes = 600, int db = -1)
        {
            string fd = GetDescription(folder);
            var str = JsonConvert.SerializeObject(t);
            return Manager.GetDatabase(db).StringSet(string.IsNullOrEmpty(fd) ? key : fd + ":" + key, str, TimeSpan.FromMinutes(expireMinutes));
        }

        /// <summary>
        /// 获取实体
        /// </summary>
        /// <param name="folder">目录</param>
        /// <param name="key">键</param>
        /// <param name="db">库,默认第一个。0~15共16个库</param>
        public static T Get<T>(CacheFolderEnum folder, string key, int db = -1) where T : class
        {
            string fd = GetDescription(folder);
            var strValue = Manager.GetDatabase(db).StringGet(string.IsNullOrEmpty(fd) ? key : fd + ":" + key);
            return string.IsNullOrEmpty(strValue) ? null : JsonConvert.DeserializeObject<T>(strValue);
        }

        /// <summary>
        /// 获得枚举的Description
        /// </summary>
        /// <param name="value">枚举值</param>
        /// <param name="nameInstead">当枚举值没有定义DescriptionAttribute,是否使用枚举名代替,默认是使用</param>
        /// <returns>枚举的Description</returns>
        private static string GetDescription(this Enum value, Boolean nameInstead = true)
        {
            Type type = value.GetType();
            string name = Enum.GetName(type, value);
            if (name == null)
            {
                return null;
            }

            FieldInfo field = type.GetField(name);
            DescriptionAttribute attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;

            if (attribute == null && nameInstead == true)
            {
                return name;
            }
            return attribute == null ? null : attribute.Description;
        }
    }
}
ログイン後にコピー

キー名と値 wangjie を持つレコードを Redis サーバーの最初のライブラリの fd1 ディレクトリに追加します:

RedisHelper.StringSet(CacheFolderEnum.Folder1, "name", "wangjie");
ログイン後にコピー

このレコードを取得します:

string key = RedisHelper.StringGet(CacheFolderEnum.Folder1, "name");
Console.WriteLine("键为name的记录对应的值:" + key);
ログイン後にコピー

このレコードを削除します:

bool result = RedisHelper.StringRemove(CacheFolderEnum.Folder1, "name");
if (result)
{
    Console.WriteLine("键为name的记录删除成功");
}
else
{
    Console.WriteLine("键为name的记录删除失败");
}
ログイン後にコピー

このレコードが存在するかどうかをクエリします:

bool ifExist = RedisHelper.KeyExists(CacheFolderEnum.Folder1, "name");
if (ifExist)
{
    Console.WriteLine("键为name的记录存在");
}
else
{
    Console.WriteLine("键为name的记录不存在");
}
ログイン後にコピー

キー sd1 とオブジェクトの値を持つレコードを Redis サーバーの 2 番目のライブラリの fd2 ディレクトリに追加します:

Student student = new Student() { Id = 1, Name = "张三", Class = "三年二班" };
RedisHelper.Set<Student>(CacheFolderEnum.Folder2, "sd1", student, 10, 1);
ログイン後にコピー

このオブジェクトを取得します:

Student sdGet = RedisHelper.Get<Student>(CacheFolderEnum.Folder2, "sd1", 1);
if (sdGet != null)
{
    Console.WriteLine("Id:" + sdGet.Id + " Name:" + sdGet.Name + " Class:" + sdGet.Class);
}
else
{
    Console.WriteLine("找不到键为sd1的记录");
}
ログイン後にコピー

ソースコード: (http://files.cnblogs.com/files/oppoic/redis_Demo.zip)

環境はVS 2013です。実行できない場合は、csにコードをコピーし、自分でコンパイルして実行してください


4. その他

MSOpenTech によって開発された Redis キャッシュ サーバーには、書き込み後、コンピューターが再起動されたときにもキーと値のペアが存在し続けるため、有効期限を設定する必要があります。キーと値のペアを書き込むと、占有されていたメモリが解放されません。 Redis の保存方法は、文字列に対応するキーだけでなく、List、HashTable などにも対応します。もちろん、Redis のより高度な使用法は、依然として Linux で行われています。

Windows での Redis キャッシュ サーバーの使用に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Redisクラスターモードの構築方法 Redisクラスターモードの構築方法 Apr 10, 2025 pm 10:15 PM

Redisクラスターモードは、シャードを介してRedisインスタンスを複数のサーバーに展開し、スケーラビリティと可用性を向上させます。構造の手順は次のとおりです。異なるポートで奇妙なRedisインスタンスを作成します。 3つのセンチネルインスタンスを作成し、Redisインスタンスを監視し、フェールオーバーを監視します。 Sentinel構成ファイルを構成し、Redisインスタンス情報とフェールオーバー設定の監視を追加します。 Redisインスタンス構成ファイルを構成し、クラスターモードを有効にし、クラスター情報ファイルパスを指定します。各Redisインスタンスの情報を含むnodes.confファイルを作成します。クラスターを起動し、CREATEコマンドを実行してクラスターを作成し、レプリカの数を指定します。クラスターにログインしてクラスター情報コマンドを実行して、クラスターステータスを確認します。作る

Oracleデータベースアンインストールチュートリアル Oracleデータベースアンインストールチュートリアル Apr 11, 2025 pm 06:24 PM

Oracleデータベースをアンインストールするには:Oracleサービスを停止し、Oracleインスタンスを削除し、Oracle Homeディレクトリを削除し、レジストリキー(Windowsのみ)をクリアし、環境変数(Windowsのみ)を削除します。アンインストールする前にデータをバックアップしてください。

Redisコマンドラインの使用方法 Redisコマンドラインの使用方法 Apr 10, 2025 pm 10:18 PM

Redisコマンドラインツール(Redis-Cli)を使用して、次の手順を使用してRedisを管理および操作します。サーバーに接続し、アドレスとポートを指定します。コマンド名とパラメーターを使用して、コマンドをサーバーに送信します。ヘルプコマンドを使用して、特定のコマンドのヘルプ情報を表示します。 QUITコマンドを使用して、コマンドラインツールを終了します。

Debianの下でのPostgreSQLパフォーマンスの最適化 Debianの下でのPostgreSQLパフォーマンスの最適化 Apr 12, 2025 pm 08:18 PM

Debian SystemsのPostgreSQLデータベースのパフォーマンスを改善するには、ハードウェア、構成、インデックス、クエリ、その他の側面を包括的に検討する必要があります。次の戦略は、データベースのパフォーマンスを効果的に最適化できます。1。ハードウェアリソース最適化メモリ拡張:適切なメモリは、データとインデックスをキャッシュするために重要です。高速ストレージ:SSD SSDドライブを使用すると、I/Oパフォーマンスが大幅に向上する可能性があります。マルチコアプロセッサ:マルチコアプロセッサを最大限に活用して、並列クエリ処理を実装します。 2。データベースパラメーターチューニングShared_Buffers:システムメモリサイズの設定によると、システムメモリの25%〜40%に設定することをお勧めします。 work_mem:ソートとハッシュ操作のメモリを制御します。通常は64MBから256mに設定されています

Redisカウンターを実装する方法 Redisカウンターを実装する方法 Apr 10, 2025 pm 10:21 PM

Redisカウンターは、R​​edisキー価値ペアストレージを使用して、カウンターキーの作成、カウントの増加、カウントの減少、カウントのリセット、およびカウントの取得など、カウント操作を実装するメカニズムです。 Redisカウンターの利点には、高速速度、高い並行性、耐久性、シンプルさと使いやすさが含まれます。ユーザーアクセスカウント、リアルタイムメトリック追跡、ゲームのスコアとランキング、注文処理などのシナリオで使用できます。

CディスクにインストールされているOracleデータベースは何ですか? CディスクにインストールされているOracleデータベースは何ですか? Apr 11, 2025 pm 04:21 PM

Cドライブ上のOracleデータベースの隠れ場所:レジストリ:レジストリエディターを使用して「Oracle」を検索してインストールパス、サービス名などを含む情報を見つけます。ファイルシステム:Oracleファイルは、ホームディレクトリ、システムファイル、一時ファイルなどを含むCドライブの複数の場所に散らばっています。慎重なアクション:Oracleをアンインストールするときは、ファイルを削除するだけでなく、レジストリとサービスをクリーンする必要があります。公式のアンインストールツールを使用するか、専門的なヘルプを求めることをお勧めします。スペース管理:ディスクスペースを最適化して、CドライブにOracleの設置を避けます。定期的に一時的なファイルを清掃します

Debian Readdirのパフォーマンスを最適化する方法 Debian Readdirのパフォーマンスを最適化する方法 Apr 13, 2025 am 08:48 AM

Debian Systemsでは、Directoryコンテンツを読み取るためにReadDirシステム呼び出しが使用されます。パフォーマンスが良くない場合は、次の最適化戦略を試してください。ディレクトリファイルの数を簡素化します。大きなディレクトリをできる限り複数の小さなディレクトリに分割し、Readdirコールごとに処理されたアイテムの数を減らします。ディレクトリコンテンツのキャッシュを有効にする:キャッシュメカニズムを構築し、定期的にキャッシュを更新するか、ディレクトリコンテンツが変更されたときに、頻繁な呼び出しをreaddirに削減します。メモリキャッシュ(memcachedやredisなど)またはローカルキャッシュ(ファイルやデータベースなど)を考慮することができます。効率的なデータ構造を採用する:ディレクトリトラバーサルを自分で実装する場合、より効率的なデータ構造(線形検索の代わりにハッシュテーブルなど)を選択してディレクトリ情報を保存およびアクセスする

Centos7にRedisをインストールする方法 Centos7にRedisをインストールする方法 Apr 14, 2025 pm 08:21 PM

公式Redisソースからソースコードパッケージをダウンロードして、コンパイルしてインストールして、最新の安定したバージョンを確保し、パーソナライズされた方法でカスタマイズできます。特定の手順は次のとおりです。ソフトウェアパッケージリストを更新してRedisディレクトリを作成するRedisソースコードパッケージをダウンロードしてソースコードパッケージを解凍し、インストール構成をコンパイルし、Redis構成を変更してRedisの起動ステータスを確認します

See all articles