Install Redis on Windows, C# simple interaction

1. Download the msi file from the website [ https://github.com/microsoftarchive/redis/releases ], and install it directly after downloading.

2. After the installation is complete, add a bat file in the installation directory [ I installed it under the F disk ], the content is

redis-server.exe redis.windows.conf

So that we can easily start the redis server by double-clicking this batch command

3. VS2019 creates a form application, and the framework uses .net framework 4.7.2

4. Simply design the interface

5. Nuget package installation [ServiceStack.Redis] library 

6. Add a class file RedisUtil.cs

using ServiceStack.Redis;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RedisDemo
{
    public class RedisUtil
    {
        public RedisClient client = null;

        /// <summary>
        /// 开启redis服务
        /// </summary>
        /// <returns></returns>
        public bool Start()
        {
            if (Process.GetProcessesByName("redis-server.exe").Length > 0)
            {
                return false;
            }
            Process process = new Process();
            process.StartInfo.WorkingDirectory = @"F:\Redis";
            process.StartInfo.FileName = @"F:\Redis\startup.bat";
            process.StartInfo.CreateNoWindow = false;
            process.StartInfo.UseShellExecute = false;
            process.Start();
            return true;
        }

        /// <summary>
        /// 关闭redis服务
        /// </summary>
        /// <returns></returns>
        public bool Close()
        {
            bool flag = false;
            foreach (Process process in Process.GetProcesses())
            {
                if (process.ProcessName.Contains("redis-server"))
                {
                    process.Kill();
                    flag = true;
                }
            }
            return flag;
        }

        /// <summary>
        /// 连接redis服务
        /// </summary>
        /// <returns></returns>
        public void Connect()
        {
            if (client == null)
            {
                client = new RedisClient("127.0.0.1", 6379);
            }
        }

        /// <summary>
        /// 断开连接
        /// </summary>
        public void Disconnect()
        {
            if (client != null)
            {
                client.Quit();
            }
        }

        /// <summary>
        /// 所有键值对
        /// </summary>
        /// <returns></returns>
        public List<string> AllKeyValue()
        {
            IEnumerable<string> keys = client.ScanAllKeys();
            List<string> result = new List<string>();
            foreach (string key in keys)
            {
                string value = "";
                string type = client.Type(key).ToLower();
                int len;
                byte[][] buffer;
                switch (type)
                {
                    case "string":
                        value = client.GetValue(key);
                        break;
                    case "hash":
                        buffer = client.HGetAll(key);
                        value += "{";
                        for (int i = 0; i < buffer.Length; i += 2)
                        {
                            value += $"{Encoding.UTF8.GetString(buffer[i])}={Encoding.UTF8.GetString(buffer[i + 1])}";
                            if (i + 2 < buffer.Length)
                            {
                                value += ",";
                            }
                        }
                        value += "}";
                        break;
                    case "list":
                        len = (int)client.LLen(key);
                        buffer = client.LRange(key, 0, len);
                        value += "[";
                        for (int i = 0; i < buffer.Length; i++)
                        {
                            value += $"{Encoding.UTF8.GetString(buffer[i])}";
                            if (i + 1 < buffer.Length)
                            {
                                value += ",";
                            }
                        }
                        value += "]";
                        break;
                    case "set":
                        buffer = client.SMembers(key);
                        value += "{";
                        for (int i = 0; i < buffer.Length; i++)
                        {
                            value += $"{Encoding.UTF8.GetString(buffer[i])}";
                            if (i + 1 < buffer.Length)
                            {
                                value += ",";
                            }
                        }
                        value += "}";
                        break;
                    case "zset":
                        len = (int)client.ZCard(key);
                        buffer = client.ZRange(key, 0, len);
                        value += "{";
                        for (int i = 0; i < buffer.Length; i++)
                        {
                            value += $"{Encoding.UTF8.GetString(buffer[i])}";
                            if (i + 1 < buffer.Length)
                            {
                                value += ",";
                            }
                        }
                        value += "}";
                        break;
                    default:
                        break;
                }
                result.Add($"type={type},key={key},value={value}");
            }
            return result;
        }

        /// <summary>
        /// 添加
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="t"></param>
        public void Add<T>(T t) where T : IAdd
        {
            t.Add(client);
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="key"></param>
        public void Delete(string key)
        {
            client.Del(key);
        }

        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string Search(string key)
        {
            List<string> result = AllKeyValue();
            string pattern = $"key={key}";
            foreach(string keyvalue in result)
            {
                if (keyvalue.Contains(pattern))
                {
                    return keyvalue;
                }
            }
            return "";
        }
    }

    public interface IAdd
    {
        void Add(RedisClient client);
    }

    public class StringItem : IAdd
    {
        public string key;
        public string value;
        public StringItem(string key, string value)
        {
            this.key = key;
            this.value = value;
        }

        public void Add(RedisClient client)
        {
            client.Set(key, value);
        }
    }

    public class HashItem : IAdd
    {
        public string hashId;
        public Dictionary<string, string> pairs = new Dictionary<string, string>();
        public HashItem(string hashId, Dictionary<string, string> pairs)
        {
            this.hashId = hashId;
            this.pairs = pairs;
        }

        public void Add(RedisClient client)
        {
            byte[][] ks = new byte[pairs.Count][];
            byte[][] vs = new byte[pairs.Count][];
            int i = 0;
            foreach (string key in pairs.Keys)
            {
                ks[i] = Encoding.UTF8.GetBytes(key.ToString());
                vs[i] = Encoding.UTF8.GetBytes(pairs[key].ToString());
            }
            client.HMSet(hashId, ks, vs);
        }
    }

    public class ListItem : IAdd
    {
        public string listId;
        public string value;
        public ListItem(string listId, string value)
        {
            this.listId = listId;
            this.value = value;
        }
        public void Add(RedisClient client)
        {
            client.LPush(listId, Encoding.UTF8.GetBytes(value));
        }
    }

    public class SetItem : IAdd
    {
        public string setId;
        public string value;
        public SetItem(string setId, string value)
        {
            this.setId = setId;
            this.value = value;
        }

        public void Add(RedisClient client)
        {
            client.SAdd(setId, Encoding.UTF8.GetBytes(value));
        }
    }

    public class ZSetItem : IAdd
    {
        public string setId;
        public double score;
        public string value;
        public ZSetItem(string setId, double score, string value)
        {
            this.setId = setId;
            this.score = score;
            this.value = value;
        }
        public void Add(RedisClient client)
        {
            client.ZAdd(setId, score, Encoding.UTF8.GetBytes(value));
        }
    }
}

7. Add event binding to the form

using ServiceStack.Redis;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RedisDemo
{
    public partial class MainForm : Form
    {
        readonly RedisUtil util = new RedisUtil();

        public MainForm()
        {
            InitializeComponent();

            try
            {
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message+"\n"+exception.StackTrace, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            comboBox_Type.SelectedIndex = 0;
        }

        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            try
            {
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message + "\n" + exception.StackTrace, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void Button_Start_Click(object sender, EventArgs e)
        {
            try
            {
                if (util.Start())
                {
                    toolStripStatusLabel.Text = "redis服务端开启成功";
                }
                else
                {
                    toolStripStatusLabel.Text = "redis服务端开启失败";
                }
            }
            catch (Exception exception)
            {
                toolStripStatusLabel.Text = "redis服务端开启失败";
                MessageBox.Show(exception.Message + "\n" + exception.StackTrace, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void Button_Close_Click(object sender, EventArgs e)
        {
            try
            {
                if (util.Close())
                {
                    toolStripStatusLabel.Text = "redis服务端关闭成功";
                }
                else
                {
                    toolStripStatusLabel.Text = "redis服务端关闭失败";
                }
            }
            catch (Exception exception)
            {
                toolStripStatusLabel.Text = "redis服务端关闭失败";
                MessageBox.Show(exception.Message + "\n" + exception.StackTrace, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void Button_Connect_Click(object sender, EventArgs e)
        {
            try
            {
                util.Connect();
                toolStripStatusLabel.Text = "redis服务端连接成功";
            }
            catch (Exception exception)
            {
                toolStripStatusLabel.Text = "redis服务端连接失败";
                MessageBox.Show(exception.Message + "\n" + exception.StackTrace, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void Button_Disconnect_Click(object sender, EventArgs e)
        {
            try
            {
                util.Disconnect();
                toolStripStatusLabel.Text = "连接断开成功";
            }
            catch (Exception exception)
            {
                toolStripStatusLabel.Text = "连接断开失败";
                MessageBox.Show(exception.Message + "\n" + exception.StackTrace, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void Button_AllKeyValue_Click(object sender, EventArgs e)
        {
            try
            {
                List<string> result = util.AllKeyValue();
                richTextBox_AllKeyValue.Clear();
                richTextBox_AllKeyValue.AppendText(string.Join("\r\n", result));
                toolStripStatusLabel.Text = "查询所有键值对成功";
            }
            catch (Exception exception)
            {
                toolStripStatusLabel.Text = "查询所有键值对失败";
                MessageBox.Show(exception.Message + "\n" + exception.StackTrace, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void Button_Add_Click(object sender, EventArgs e)
        {
            try
            {
                string type = comboBox_Type.Text.Trim();
                string id = textBox_Key.Text.Trim();
                string value = "";
                switch (type)
                {
                    case "string":
                        value = richTextBox_Value.Text.Trim();
                        StringItem stringItem = new StringItem(id, value);
                        util.Add(stringItem);
                        break;
                    case "hash":
                        string[] ps = richTextBox_Value.Text.Trim().Split(' ');
                        Dictionary<string, string> pairs = new Dictionary<string, string>();
                        for (int i = 0; i < ps.Length; i += 2)
                        {
                            pairs.Add(ps[i], ps[i + 1]);
                        }
                        HashItem hashItem = new HashItem(id, pairs);
                        util.Add(hashItem);
                        break;
                    case "list":
                        value = richTextBox_Value.Text.Trim();
                        ListItem listItem = new ListItem(id, value);
                        util.Add(listItem);
                        break;
                    case "set":
                        value = richTextBox_Value.Text.Trim();
                        SetItem setItem = new SetItem(id, value);
                        util.Add(setItem);
                        break;
                    case "zset":
                        value = richTextBox_Value.Text.Trim();
                        ZSetItem zSetItem = new ZSetItem(id, 0, value);
                        util.Add(zSetItem);
                        break;
                }
                toolStripStatusLabel.Text = "添加键值对成功";
            }
            catch (Exception exception)
            {
                toolStripStatusLabel.Text = "添加键值对失败";
                MessageBox.Show(exception.Message + "\n" + exception.StackTrace, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void Button_Search_Click(object sender, EventArgs e)
        {
            try
            {
                string key = textBox_Key.Text.Trim();
                string value = util.Search(key);
                richTextBox_AllKeyValue.Text = value;
                toolStripStatusLabel.Text = "查询键值对成功";
            }
            catch (Exception exception)
            {
                toolStripStatusLabel.Text = "查询键值对失败";
                MessageBox.Show(exception.Message + "\n" + exception.StackTrace, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void Button_Delete_Click(object sender, EventArgs e)
        {
            try
            {
                string key = textBox_Key.Text.Trim();
                util.Delete(key);
                toolStripStatusLabel.Text = "删除键值对成功";
            }
            catch (Exception exception)
            {
                toolStripStatusLabel.Text = "删除键值对失败";
                MessageBox.Show(exception.Message + "\n" + exception.StackTrace, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}

 8. I have uploaded the project to Code Cloud [ Interaction between CSharp and Redis: Simple interaction with Redis database using C#, familiar with the use of Redis ], students who need it can download it by themselves, for reference only

Guess you like

Origin blog.csdn.net/qq_36694133/article/details/128573005