Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie den Redis-Cache-Server unter Windows

So verwenden Sie den Redis-Cache-Server unter Windows

高洛峰
高洛峰Original
2017-02-08 13:53:231321Durchsuche

1. Redis-Server


Laden Sie zuerst den Redis-Server herunter, klicken Sie, um die .msi-Version herunterzuladen, doppelklicken Sie, um den Redis-Server zu installieren, und er wird installiert als Dienst. Das System startet zusammen:

So verwenden Sie den Redis-Cache-Server unter Windows

Das erste, was Sie nach der Installation des Redis-Servers tun müssen, ist, ein Passwort festzulegen und das Installationsverzeichnis einzugeben: C:ProgrammeRedis – Finden Sie Konfigurationsdatei: redis.windows-service .conf – Suchen Sie: # requirepass foobared – Geben Sie ein, führen Sie einen Zeilenvorschub aus und fügen Sie Folgendes hinzu: requirepass Schreiben Sie hier Ihr neues Passwort (schreiben Sie es in die oberste Zeile, lassen Sie kein Leerzeichen davor) – Starten Sie Redis neu Dienst im Dienst, oder starten Sie den Computer neu

Nein Die Nachteile des Festlegens von Passwörtern können verstanden werden, wenn man sich ansieht, was diesem Kerl von Ctrip passiert ist: Erinnern Sie sich an einen Vorfall, bei dem Redis angegriffen wurde


2. Redis-Client (Befehlszeilen- und Visualisierungstool RDM)

Befehlszeilendemonstration: Redis-Client starten, Redis-Server lesen und schreiben

So verwenden Sie den Redis-Cache-Server unter Windows

Erklärung des obigen Befehls:

cd C: ProgrammeRedis: Der Befehl cd gibt das Redis-Installationsverzeichnis ein, was einem Doppelklick zum Aufrufen des Redis-Installationsverzeichnisses im Windows-System entspricht

redis-cli.exe: Öffnet das Redis-Cli-Client-Programm, was einem Doppelklick zum Ausführen einer Exe im Windows-System entspricht (nach der Installation des oben genannten Redis-Serverprogramms ist ein Client-Programm erforderlich). Stellen Sie eine Verbindung zum Server her. Um eine Verbindung zum lokalen Redis-Server herzustellen, geben Sie diesen Befehl direkt ein. Um eine Verbindung zum Remote-Server herzustellen, müssen Sie beispielsweise die IP und den Port hinzufügen: redis-cli.exe -h 111.11 .11.111 -p 6379 )


Schlüssel *: Alle Schlüssel-Wert-Paare anzeigen (Wenn der Redis-Server ein Kennwort festgelegt hat, meldet dieser Befehl einen Fehler. Sie müssen zuerst das Kennwort eingeben. Führen Sie diesen Befehl aus: auth your password)

set blog oppoic.cnblogs.com: Legen Sie ein Schlüssel-Wert-Paar fest, der Schlüssel ist: blog, der Wert ist: oppoic.cnblogs.com (gespeichert im Verzeichnis: set Verzeichnisname: Schlüsselwert)

Blog abrufen: Den dem Schlüsselblog entsprechenden Wert abrufen

Schlüssel *: Alle Schlüssel-Wert-Paare anzeigen

Andere häufig verwendete Befehle:

config get dir: Ruft das Redis-Installationsverzeichnis ab

ping: Gibt PONG zurück, um anzuzeigen, dass der Redis-Server normal ist

redis-cli.exe: Geben Sie die erste Datenbank ein (Standard). ), Redis verfügt über insgesamt 16 Bibliotheken von 0 bis 15. Geben Sie die dritte Bibliothek ein: redis-cli -n 2 (bereits eingegeben, wählen Sie 0 bis 15 aus, um nach Belieben zu wechseln)

Beenden: Beenden Sie das Redis-Programm

exit: Verlässt das DOS-Fenster

flushdb: Alle Schlüssel in der aktuell ausgewählten Datenbank löschen

flushall: Datenbanken in allen Datenbanken löschen

Weitere Befehle: https ://redis.io/commands

Zu diesem Zeitpunkt wurde ein Redis-Cache-Server eingerichtet, der auf dem lokalen Computer ausgeführt wird und gelesen und geschrieben werden kann. Allerdings ist die Befehlszeile offensichtlich nicht für unerfahrene Benutzer geeignet. Das Visualisierungstool finden Sie hier: Redis Desktop Manager (https://redisdesktop.com/download)

So verwenden Sie den Redis-Cache-Server unter Windows

Der Baum Auf der linken Seite wird angezeigt, dass bereits vorhanden sind. Sobald die Verbindung hergestellt ist, klicken Sie unten auf „Mit Redis-Server verbinden“, um eine weitere Verbindung hinzuzufügen:

Name: Verbindungsname, nehmen Sie ihn beiläufig auf

Host: Hostadresse, Diese Maschine ist 127.0.0.1, geben Sie die entsprechende IP aus der Ferne ein

Port: Port, der Standardport des Redis-Servers ist 6379

Auth: Passwort, geben Sie es ein, wenn es festgelegt ist, lassen Sie es leer Wenn es nicht festgelegt ist

Sie können es sehen, nachdem Sie eine Verbindung zum Redis-Server hergestellt haben. Der Standardwert beträgt 16 Bibliotheken (die Konfigurationsdatei kann geändert werden) und der Index beginnt bei 0. Eine übliche Verwendung besteht darin, ein Projekt und eine Bibliothek zu haben, und verschiedene Funktionsmodule unter dem Projekt werden in verschiedenen Verzeichnissen unter dieser Bibliothek gespeichert.

Es versteht sich von selbst, dass der Vorgang nach der Verwendung des Visualisierungstools darin besteht, zu doppelklicken, mit der rechten Maustaste zu klicken und zu löschen. . . Jeder, der sich mit dem Windows-System auskennt, wird dieses Tool verwenden. Im Vergleich zur Befehlszeile ist Redis Desktop Manager ein benutzerfreundlicheres visuelles Tool und es ist auch bequemer, die Daten auf dem Remote-Server zu debuggen.

Hinweis: Um eine Verbindung zum Remote-Server herzustellen, müssen Sie zum Redis-Installationsverzeichnis auf dem Server gehen, die Datei redis.windows-service.conf suchen und Bind 127.0.0.1 finden , kommentieren Sie es mit „#“ voran und klicken Sie dann mit der rechten Maustaste auf den Dienst, um den Redis-Dienst neu zu starten, oder starten Sie das Windows-System neu

3. C#-Betrieb des Redis-Servers

Die oben genannten Befehlszeilen und visuellen Tools zum Betrieb des Redis-Servers müssen StackExchange.Redis verwenden (https://github.com/StackExchange/StackExchange). Redis), um es einheitlich aufzurufen, ist eine RedisHelper-Hilfsklasse gekapselt:

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

Fügen Sie dem fd1-Verzeichnis der ersten Bibliothek des Redis-Servers einen Datensatz mit dem Schlüsselnamen und dem Wert wangjie hinzu :

RedisHelper.StringSet(CacheFolderEnum.Folder1, "name", "wangjie");

Diesen Datensatz abrufen:

string key = RedisHelper.StringGet(CacheFolderEnum.Folder1, "name");
Console.WriteLine("键为name的记录对应的值:" + key);

Diesen Datensatz löschen:

bool result = RedisHelper.StringRemove(CacheFolderEnum.Folder1, "name");
if (result)
{
    Console.WriteLine("键为name的记录删除成功");
}
else
{
    Console.WriteLine("键为name的记录删除失败");
}

Überprüfen Sie, ob dieser Datensatz vorhanden ist:

bool ifExist = RedisHelper.KeyExists(CacheFolderEnum.Folder1, "name");
if (ifExist)
{
    Console.WriteLine("键为name的记录存在");
}
else
{
    Console.WriteLine("键为name的记录不存在");
}

Fragen Sie im fd2-Verzeichnis der zweiten Bibliothek des Redis-Servers einen Datensatz mit dem Schlüssel sd1 und dem Wert eines Objekts:

Student student = new Student() { Id = 1, Name = "张三", Class = "三年二班" };
RedisHelper.Set<Student>(CacheFolderEnum.Folder2, "sd1", student, 10, 1);

Holen Sie sich dieses Objekt:

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的记录");
}

Quellcode: (http://files.cnblogs.com/files/oppoic/redis_Demo.zip)

Die Umgebung ist VS 2013. Wenn es nicht ausgeführt werden kann, kopieren Sie den Code in cs, kompilieren und ausführen es selbst


4. Andere

Der von MSOpenTech entwickelte Redis-Cache-Server wird nach dem Schreiben mit einem Neustart des Computers geliefert Im Allgemeinen muss beim Schreiben des Schlüssel-Wert-Paares die Ablaufzeit festgelegt werden, andernfalls bleibt der belegte Speicher bestehen. Die Redis-Speichermethode verfügt nicht nur über Schlüssel, die Zeichenfolgen entsprechen, sondern auch für Listen, HashTables usw. Natürlich gibt es unter Linux immer noch fortgeschrittenere Verwendungsmöglichkeiten von Redis.

Weitere Artikel zur Verwendung des Redis-Cache-Servers unter Windows finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn