.NET Core Redis的简单使用

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

1、Redis简介

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

2、Redis主要特点

    • Redis支持数据的持久化
    • Redis支持多种数据结构
    • Redis支持数据的备份

    3、Redis的下载安装

    windows版本Redis下载链接:https://github.com/tporadowski/redis/releases

    选择.zip免安装版本可直接通过命令使用。

    image.gif

    在Windows终端(可直接在解压文件夹右键选择[在Windows终端打开])。

    image.gif

    或者cmd控制台进入到Redis的解压文件夹运行指令

    image.gif

    4、Redis的常用指令

    安装服务:redis-server --service-install

    卸载服务:redis-server --service-uninstall

    开启服务:redis-server --service-start

    停止服务:redis-server --service-stop

    服务端启动时重命名:redis-server --service-start --service-name Redis1

    启动客户端:redis-cli

    推出客户端:quit

    1)启动Redis服务

    image.gif

    2)安装Redis服务为本地服务

    image.gif

    3)安装完成,可以设置为自启动也可以手动启动

    image.gif5、Redis在.NET Core的简单使用

    1)新建ASP.NET Core Web API项目

    打开NuGet包管理器安装StackExchange.Redis(注:本demo为VS2022新建,默认提供的天气预报的类和控制器)

    image.gif

    2)新建Redis帮助类

    /// <summary>
    /// Redis帮助类
    /// </summary>
    public class RedisHelper
    {
        public ConnectionMultiplexer redis { get; set; }
        public IDatabase db { get; set; }
        public RedisHelper(string connection)
        {
            redis = ConnectionMultiplexer.Connect(connection);
            db = redis.GetDatabase();
        }
        /// <summary>
        /// 增加/修改
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool SetValue(string key, string value)
        {
            return db.StringSet(key, value);
        }
        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string GetValue(string key)
        {
            return db.StringGet(key);
        }
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public bool DeleteKey(string key)
        {
            return db.KeyDelete(key);
        }
    }

    image.gif

    3)新建返回结果类

    /// <summary>
    /// 返回结果类
    /// </summary>
    public class Result
    {
        /// <summary>
        /// 执行结果
        /// </summary>
        public bool ImplementationResults { get; set; }
        /// <summary>
        /// Value的实时值
        /// </summary>
        public string Value { get; set; }
        /// <summary>
        /// 缓存的Value值
        /// </summary>
        public string CacheValue { get; set; }
        /// <summary>
        /// 错误信息
        /// </summary>
        public string Error { get; set; }
    }

    image.gif

    4)控制器类

    [ApiController]
    [Route("[controller]/[action]")]
    public class WeatherForecastController : ControllerBase 
    {
      public WeatherForecastController() 
      {
      }
      // 连接Redis客户端
      RedisHelper redisHelper = new RedisHelper("127.0.0.1:6379");
      string value = "this is a test redis string";
      Result result = null;
      /// <summary>
      /// 查询
      /// </summary>
      /// <param name="key">key</param>
      /// <returns></returns>
      [HttpGet, HttpPost]
        public string Search(string key) 
      {
        string returnStr = "";
        if (!string.IsNullOrWhiteSpace(key)) 
        {
          string value = redisHelper.GetValue(key);
          if (!string.IsNullOrWhiteSpace(value))
                    returnStr = value; 
                else
                    returnStr = "key的值不存在!";
        } else
                returnStr = "key的值不能为空!";
        return returnStr;
      }
      /// <summary>
      /// 新增
      /// </summary>
      /// <param name="key">key</param>
      /// <returns></returns>
      [HttpGet, HttpPost]
        public Result Insert(string key) 
      {
        result = new Result();
        if (!string.IsNullOrWhiteSpace(key)) 
        {
          bool isInsertSuccess = redisHelper.SetValue(key, value);
          result.ImplementationResults = isInsertSuccess;
          if (isInsertSuccess) 
          {
            // 查询mytestkey的实时值
            var info = Search("mytestkey");
            if (!string.IsNullOrWhiteSpace(info))
                        result.Value = info;
          }
        } else
                result.Error = "key的值不能为空!";
        return result;
      }
      /// <summary>
      /// 修改
      /// </summary>
      /// <param name="key">key</param>
      /// <param name="newValue">新的value值</param>
      /// <returns></returns>
      [HttpGet, HttpPost]
        public Result Update(string key, string newValue) 
      {
        result = new Result();
        if (!string.IsNullOrWhiteSpace(key)) 
        {
          bool isUpdateSuccess = redisHelper.SetValue(key, newValue);
          result.ImplementationResults = isUpdateSuccess;
          // 查询mytestkey的实时值
          var info = Search(key);
          if (!string.IsNullOrWhiteSpace(info))
                    result.Value = info;
        } else
                result.Error = "key的值不能为空!";
        return result;
      }
      /// <summary>
      /// 删除
      /// </summary>
      /// <param name="key"></param>
      /// <returns></returns>
      [HttpGet, HttpPost]
        public Result Delete(string key) 
      {
        result = new Result();
        if (!string.IsNullOrWhiteSpace(key)) 
        {
          // 查询mytestkey的实时值
          var info = Search(key);
          if (!string.IsNullOrWhiteSpace(info))
                    result.Value = info;
          bool isDeleteSuccess = redisHelper.DeleteKey(key);
          result.ImplementationResults = isDeleteSuccess;
          if (isDeleteSuccess) 
          {
            // 查询mytestkey的缓存值
            var infoCache = Search(key);
            if (!string.IsNullOrWhiteSpace(infoCache))
                        result.CacheValue = "缓存值查询结果:" + infoCache;
          }
        } else
                result.Error = "key的值不能为空!";
        return result;
      }
    }

    image.gif

    5)Startup.cs中添加swagger文档注释

    生成带有注释的swagger文档

    public void ConfigureServices(IServiceCollection services) 
    {
      services.AddControllers();
      services.AddSwaggerGen(c =>
                  {
                      c.SwaggerDoc("v1", new OpenApiInfo { Title = "RedisDemo", Version = "v1" });
      var basePath = PlatformServices.Default.Application.ApplicationBasePath;
      var xmlPath = Path.Combine(basePath, "APIHelp.xml");
      c.IncludeXmlComments(xmlPath, true);
        });
    }

    image.gif

    直接在swagger中测试执行

    image.gif

    测试之前要在Redis中添加key的值,下面简单介绍一下Redis可视化软件

    6、Redis可视化软件

    1)RedisDesktopManager(付费软件)

    官网:https://rdm.dev/

    官方GitHub:https://github.com/uglide/RedisDesktopManager

    Windows版本下载链接:https://github.com/lework/RedisDesktopManager-Windows/releases

    1、输入实例名,连接地址和端口号连接到Redis

    image.gif

    2、新建key,可随时Reload刷新查看key及其value的变化

    image.gif

    2) Redis Assistant(免费,推荐)

    下载链接:http://www.redisant.cn/

    使用方法与RedisDesktopManager相同,使用截图如下

    1、输入实例名,连接地址和端口号连接到Redis

    image.gif

    2、新建key,可随时点击左上角工具栏的刷新按钮查看key及其value的变化

    image.gif

    7、附录

    Redis官网链接:https://redis.io/

    Redis官方GitHub:https://github.com/redis/redis/releases

    Redis下载链接:http://download.redis.io/releases/

    以上就是.NET Core Redis的简单使用的介绍,做此记录,如有帮助,欢迎点赞关注收藏!

    相关实践学习
    基于Redis实现在线游戏积分排行榜
    本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
    云数据库 Redis 版使用教程
    云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
    目录
    相关文章
    |
    1月前
    |
    存储 开发框架 JSON
    ASP.NET Core OData 9 正式发布
    【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
    |
    1月前
    |
    存储 消息中间件 NoSQL
    Redis 入门 - C#.NET Core客户端库六种选择
    Redis 入门 - C#.NET Core客户端库六种选择
    59 8
    |
    2月前
    |
    开发框架 监控 前端开发
    在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
    【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
    |
    2月前
    |
    开发框架 .NET 中间件
    ASP.NET Core Web 开发浅谈
    本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
    92 3
    |
    1月前
    |
    开发框架 JavaScript 前端开发
    一个适用于 ASP.NET Core 的轻量级插件框架
    一个适用于 ASP.NET Core 的轻量级插件框架
    |
    2月前
    |
    开发框架 NoSQL .NET
    利用分布式锁在ASP.NET Core中实现防抖
    【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。
    |
    3月前
    |
    开发框架 监控 .NET
    开发者的革新利器:ASP.NET Core实战指南,构建未来Web应用的高效之道
    【8月更文挑战第28天】本文探讨了如何利用ASP.NET Core构建高效、可扩展的Web应用。ASP.NET Core是一个开源、跨平台的框架,具有依赖注入、配置管理等特性。文章详细介绍了项目结构规划、依赖注入配置、中间件使用及性能优化方法,并讨论了安全性、可扩展性以及容器化的重要性。通过这些技术要点,开发者能够快速构建出符合现代Web应用需求的应用程序。
    57 0
    |
    1月前
    |
    消息中间件 缓存 NoSQL
    Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
    【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
    74 6
    |
    6天前
    |
    缓存 NoSQL 关系型数据库
    大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
    本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
    大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
    |
    7天前
    |
    存储 缓存 NoSQL
    【赵渝强老师】基于Redis的旁路缓存架构
    本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
    【赵渝强老师】基于Redis的旁路缓存架构