• 【C#】Redis在net core下使用教程


    系列文章



    前言

    官方教程:https://www.runoob.com/redis/redis-install.html
    Remote DIctionary Server(Redis远程字典服务器) 是一个由Salvatore Sanfilippo写的key-value存储系统。
    Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
    它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。


    一、Redis 简介

    Redis 与其他 key - value 缓存产品有以下三个特点:

    • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
    • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
    • Redis支持数据的备份,即master-slave模式的数据备份。

    1.1 Redis 优势

    • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
    • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
    • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
      丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

    1.2 Redis与其他key-value存储有什么不同?

    • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。
    • Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
    • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

    二、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 窗口,原来的不要关闭,不然就无法访问服务端了。
    切换到 redis 目录下运行:

    redis-cli.exe -h 127.0.0.1 -p 6379

    设置键值对:

    set myKey abc

    取出键值对:

    get myKey

    在这里插入图片描述
    测试成功

    三、Redis修改帐户密码

    启动服务 redis-server.exe redis.windows.conf
    启动客户端 redis-cli.exe
    查看密码 config get requirepass
    设置密码 config set requirepass system //设置密码为system
    退出 exit
    重新登录-启动客户端 redis-cli.exe
    重新登录-输入密码 auth system
    在这里插入图片描述

    四、Redis写成Windows服务

    每次启动cmd窗口,显得很麻烦,现在我们将其写成Windows服务方便启动。

    redis-server --service-install redis.windows.conf
    在这里插入图片描述
    在这里插入图片描述

    五、.net core - 使用CSRedisCore操作redis

    ServiceStack.Redis 是商业版,免费版有限制;
    StackExchange.Redis 是免费版,但是内核在 .NETCore 运行有问题经常 Timeout,暂无法解决;
    CSRedis于2016年开始支持.NETCore一直迭代至今,实现了低门槛、高性能,和分区高级玩法的.NETCore redis-cli SDK;
    在v3.0版本更新中,CSRedis中的所有方法名称进行了调整,使其和redis-cli保持一致,如果你熟悉redis-cli的命令的话,CSRedis可以直接上手,这样学习成本就降低很多。
    在这里插入图片描述
    创建RedisServer缓存型数据库实例化,连接。

    using CSRedis;
    using YS.Common;
    
    namespace YS.Core
    {
        /// 
        /// 创建RedisServer缓存型数据库
        /// 说明:需要读取配置文件,里面有连接字符串
        /// 
        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"]);
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    RedisCache.cs辅助类,负责执行操作

    
    using SqlSugar;
    using System;
    using System.Collections.Generic;
    
    namespace YS.Core
    {
        /// 
        /// Redis操作方法
        /// 说明:添加键值对、添加json,以及修改删除等
        /// 
        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));
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
  • 相关阅读:
    C语言指针的详细概念
    【Jetson】Jetson TX2 ubuntu18.04安装PyTorch
    RT-Thread Studio增加软件包操作
    猿创征文|基于Java+SpringBoot+vue学生学习平台详细设计实现
    【冲刺 NOIP2022 模拟赛 B 组 Day9】开采矿物【DP】
    Java笔试题总结
    C++入门3——类与对象2(类的6个默认成员函数)
    C# 简单封装异步Socket Server
    【python函数】torch.nn.Embedding函数用法图解
    关于Google推出的AAB,你了解多少
  • 原文地址:https://blog.csdn.net/youcheng_ge/article/details/133072163