【个人博客搭建】(15)Redis缓存使用

1、下载nuget包:StackExchange.Redis; 并引用

复制代码
using StackExchange.Redis;

2、配置信息

cs 复制代码
  /* Redis缓存配置 */
  "Redis": {
    "Enabled": true,
    "ConnectionString": "127.0.0.1:6379,password=123456"
  }

3、配置模型

cs 复制代码
  public class RedisConfig
  {
      public bool Enabled { get; set; }
      public string ConnectionString { get; set; }

  }

4、编写帮助类

cs 复制代码
    public class RedisHelper
    {
        private static bool enabled = AppSettings.app(new string[] { "Redis", "Enabled" }).ToUpper() == "TRUE" ? true : false;
        private static string connectionString = AppSettings.app(new string[] { "Redis", "ConnectionString" });

        private static ConnectionMultiplexer redis;
        private static IDatabase db;

        private static bool isRun = false;

        static RedisHelper()
        {
            if (enabled)
            {
                if (IsRedisRunning())
                {
                    // 创建连接
                    redis = ConnectionMultiplexer.Connect(connectionString);
                    db = redis.GetDatabase();
                }
            }
            else
            {
                isRun = false;
            }

        }

        /// <summary>
        /// 创建模型
        /// </summary>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        static RedisConfig GetRedisConfig()
        {
            if (string.IsNullOrWhiteSpace(connectionString))
            {
                throw new Exception("未获取到配置的Redis连接字符串信息!请检查");
            }

            var redisConfig = new RedisConfig()
            {
                Enabled = enabled,
                ConnectionString = connectionString,
            };
            return redisConfig;
        }

        /// <summary>
        /// 判断Redis是否在运行
        /// </summary>
        /// <returns></returns>
        static bool IsRedisRunning()
        {
            try
            {
                // 创建Redis连接
                ConnectionMultiplexer connection = ConnectionMultiplexer.Connect(connectionString);

                // 获取Redis数据库实例
                IDatabase db = connection.GetDatabase();

                // 创建GUID、随机数
                Random random = new Random();
                var testValue = Guid.NewGuid().ToString() + "|" + random.Next(0, 100).ToString();

                // 执行一个简单的SET命令
                db.StringSet("testKey", testValue);

                // 执行一个简单的GET命令
                string value = db.StringGet("testKey");

                // 关闭连接
                connection.Close();

                // 如果能够成功执行SET和GET命令,则认为Redis正在运行
                isRun = true;
                return value == testValue;
            }
            catch (Exception ex)
            {
                // 发生异常,可能是Redis未启动或连接失败
                Console.WriteLine("Error: Redis运行失败。" + ex.Message);
                return false;
            }
        }





        #region 增删改查 (启动 && 在运行)


        // 添加数据
        public static void Add(string key, string value)
        {
            if (isRun)
            {
                db.StringSet(key, value);
            }
        }

        // 查询数据
        public static string Get(string key)
        {
            if (isRun)
            {
                return db.StringGet(key);
            }
            return "";
        }

        // 更新数据
        public static void Update(string key, string value)
        {
            if (isRun)
            {
                db.StringSet(key, value);
            }
        }

        // 删除数据
        public static void Delete(string key)
        {
            if (isRun)
            {
                db.KeyDelete(key);
            }
        }


        #endregion

    }

帮助类里边有对Redis是否运行进行了一个判断,防止不使用的兄弟在不使用该功能的是否不会出错。

还可以考虑在需要但是没运行时添加日志记录,或者使用其他类似于队列等后续处理

5、测试。

我们可以在用户登录的时候进行缓存token信息。(后续会对其进行过期处理)

cs 复制代码
var token = JwtHelper.GenerateToken(jwtClaim);
RedisHelper.Add("Login:" + para.UserName, token);
return ApiResultHelper.Success(token);

使用":"划分文件夹。Login为文件夹名称。

6、结果:

正常运行的话是会存入进去的。

不启动或未启动Redis服务时,是不写入的。

7、其他

以上就是对Redis的简单应用了。

在在增删改查的操作中,我们也可以添加一个是否存在key的判断。

相关推荐
理人综艺好会15 分钟前
Redis学习之go-redis
redis·学习·golang
她说彩礼65万16 分钟前
C# params使用
开发语言·c#·log4j
专注VB编程开发20年33 分钟前
C#内存加载dll和EXE是不是差不多,主要是EXE有入口点
数据库·windows·microsoft·c#
GGBondlctrl1 小时前
【Redis】从单机架构到分布式,回溯架构的成长设计美学
分布式·缓存·架构·微服务架构·单机架构
她说彩礼65万2 小时前
C# 反射
java·算法·c#
让梦想疯狂2 小时前
Visual Studio 自动格式化代码
ide·visual studio
code bean2 小时前
【CMake 】[第九篇] 解决 CMake + Visual Studio 中文乱码问题完整指南
ide·visual studio
laocooon5238578862 小时前
C#二次开发中简单块的定义与应用
android·数据库·c#
不穿格子的程序员2 小时前
Redis篇4——Redis深度剖析:内存淘汰策略与缓存的三大“天坑”
数据库·redis·缓存·雪崩·内存淘汰策略
YJlio3 小时前
BgInfo 学习笔记(11.5):多种输出方式(壁纸 / 剪贴板 / 文件)与“更新其他桌面”实战
笔记·学习·c#