news 2026/11/6 5:01:15

Day29:Redis 缓存实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day29:Redis 缓存实战

一、今日目标

  1. 安装 Redis(Windows/Linux)
  2. 学会StackExchange.Redis / CSRedis二选一
  3. 封装RedisHelper 通用帮助类(企业标准)
  4. 学会在项目中注入 + 使用缓存
  5. 背会 Redis 高频面试题

二、Redis 安装(超级简单)

Windows(开发用)

直接下载解压运行:https://github.com/tporadowski/redis/releases

redis-server.exe # 启动 redis-cli.exe # 客户端

Linux(部署用)

sudo apt install redis-server systemctl start redis systemctl enable redis

三、.NET 2 大 Redis 客户端(企业真实使用)

1. CSRedis(推荐,简单、稳定、支持高级功能)

Install-Package CSRedisCore

优点:

  • 轻量、API 友好
  • 支持异步、锁、哈希、列表、队列
  • 支持集群、哨兵
  • 企业使用率极高

2. StackExchange.Redis

Install-Package StackExchange.Redis

优点:

  • 官方最主流
  • 性能强

缺点:

  • 容易超时、复杂

四、企业级 RedisHelper 完整封装(直接复制)

位置(DDD 规范)

Infrastructure/ Commons/ Redis/ MyRedisHelper.cs

完整代码(CSRedis 版)

using CSRedis; namespace Admin.NET.Infrastructure.Commons.Redis; /// <summary> /// Redis 帮助类(企业通用) /// </summary> public class MyRedisHelper { private readonly CSRedisClient _redis; public MyRedisHelper(string connectionString) { _redis = new CSRedisClient(connectionString); } #region String public async Task SetAsync<T>(string key, T value, int expireMinutes = 60) { await _redis.SetAsync(key, value, expireMinutes * 60); } public async Task<T> GetAsync<T>(string key) { return await _redis.GetAsync<T>(key); } public async Task<bool> ExistsAsync(string key) { return await _redis.ExistsAsync(key); } public async Task<long> DeleteAsync(string key) { return await _redis.DelAsync(key); } #endregion #region Hash public async Task HashSetAsync<T>(string key, string field, T value) { await _redis.HSetAsync(key, field, value); } public async Task<T> HashGetAsync<T>(string key, string field) { return await _redis.HGetAsync<T>(key, field); } #endregion #region 过期 public async Task ExpireAsync(string key, int expireMinutes) { await _redis.ExpireAsync(key, TimeSpan.FromMinutes(expireMinutes)); } #endregion }

五、Program.cs 中注册(全局单例)

// 注册 Redis var redisConn = builder.Configuration["Redis:ConnectionString"]!; builder.Services.AddSingleton(new MyRedisHelper(redisConn));

appsettings.json 中配置

"Redis": { "ConnectionString": "127.0.0.1:6379,password=,defaultDatabase=0" }

六、使用(Service 中注入)

private readonly MyRedisHelper _redis; public UserService(MyRedisHelper redis) { _redis = redis; } // 存缓存 await _redis.SetAsync("user:1", user, 30); // 取缓存 var user = await _redis.GetAsync<User>("user:1");

七、高频面试题(必背,简历加分)

1. Redis 是什么?为什么快?

  • 内存数据库,读写速度 10w QPS
  • 单线程 + IO 多路复用
  • 内存操作比数据库快 100~1000 倍

2. Redis 缓存使用场景?

  • 接口缓存
  • 菜单 / 权限缓存
  • 登录用户信息
  • 分布式锁
  • 计数器、限流
  • 队列

3. 缓存穿透、击穿、雪崩?

穿透:查不存在的数据 → 数据库压力大

解决方案:缓存空值、布隆过滤器

击穿:热点 Key 过期 → 大量请求打库

解决方案:互斥锁、永不过期

雪崩:大量 Key 同时过期

解决方案:随机过期时间、集群、多级缓存

4. Redis 淘汰策略

volatile-lru、allkeys-lru(企业最常用)

5. 为什么用 Redis 不用内存缓存?

  • 分布式共享缓存
  • 持久化
  • 支持多种数据结构
  • 支持多服务器共享

6. Redis 持久化

RDB(快照)、AOF(日志)


八、今日练习

  1. 安装 Redis
  2. 安装 CSRedisCore
  3. 封装 RedisHelper
  4. 在 UserService / MenuService 加入缓存
  5. 测试:存、取、删除、过期
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/6 5:00:07

Thorium 浏览器安装:选对包、三步装完、附验收清单

Thorium 浏览器安装&#xff1a;选对包、三步装完、附验收清单 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of the RE…

作者头像 李华
网站建设 2026/11/6 4:59:39

安全帽目标检测数据集 两万多张图片 带YOLO标注

数据集获取主页 个人简介 最近在搞安全帽检测项目&#xff0c;最头疼的从来不是调参&#xff0c;而是搞数据。网上那些开源数据集&#xff0c;要么标注稀碎&#xff0c;要么场景单一&#xff0c;真扔进模型里&#xff0c;效果那叫一个感人。 被坑了几次后&#xff0c;心一横…

作者头像 李华
网站建设 2026/11/6 4:52:58

Folia 全屏歌词播放器快速教程:3 种来源、5 步让第一首歌铺满全屏

Folia 全屏歌词播放器快速教程&#xff1a;3 种来源、5 步让第一首歌铺满全屏 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 A multi-platform music player for local files, Navidrome, and online streaming serv…

作者头像 李华
网站建设 2026/11/6 4:50:15

Java 比较器 和 包装类

Java比较器 背景&#xff1a; 在Java中经常会涉及到多个对象的排序问题&#xff0c;那么就涉及到对象之间的比较 Java中的对象, 正常情况下, 只能进行比较 比较对象地址值&#xff0c;是否相同 ! 比较对象地址值&#xff0c;是否相同&#xff0c;取反~ 不能使用 > 或 <…

作者头像 李华
网站建设 2026/11/6 4:46:04

3毛钱的32位MCU:MS32C001B如何击穿8位价格底线

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/6 4:45:58

STM32CubeMX安装配置全攻略:从下载到生成工程避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华