【个人博客搭建】(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的判断。

相关推荐
Hello.Reader42 分钟前
Redis热点数据管理全解析:从MySQL同步到高效缓存的完整解决方案
redis·mysql·缓存
向宇it2 小时前
【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理
开发语言·unity·c#·编辑器·游戏引擎
麦香--老农2 小时前
windows 钉钉缓存路径不能修改 默认C盘解决方案
缓存·钉钉
yngsqq2 小时前
一键打断线(根据相交点打断)——CAD c# 二次开发
windows·microsoft·c#
C++忠实粉丝2 小时前
Redis 介绍和安装
数据库·redis·缓存
丰云3 小时前
一个简单封装的的nodejs缓存对象
缓存·node.js
Oneforlove_twoforjob3 小时前
【Java基础面试题025】什么是Java的Integer缓存池?
java·开发语言·缓存
泰伦闲鱼3 小时前
nestjs:GET REQUEST 缓存问题
服务器·前端·缓存·node.js·nestjs
TENET信条3 小时前
day53 第十一章:图论part04
开发语言·c#·图论
ClouGence3 小时前
Redis 到 Redis 数据迁移同步
数据库·redis·缓存