随笔 - 435  文章 - 0  评论 - 111  阅读 - 62万 

安装Microsoft.Extensions.Caching.Redis.Core

       NuGet中搜索Microsoft.Extensions.Caching.Redis.Core并安装,此NuGet包是对Caching的拓展,即可以更换Caching存储介质

image

appsettings.json配置Redis连接字符串

       appsettings.json配置Redis连接字符串(相当于web.config里面配置appsetting节点),注意:添加位置要在Logging上面

复制代码
{ "ConnectionStrings": { 
    "RedisConnection": "127.0.0.1:6379,password=xxxxxxxxx"
  },
"Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}
复制代码

 

Startup.cs的ConfigureServices方法中添加引用

复制代码
public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();
            services.AddDistributedRedisCache(option =>
            {       
                   //redis 数据库连接字符串
                   option.Configuration = Configuration.GetConnectionString("RedisConnection");
                   //redis 实例名
                   option.InstanceName = "master";
              });
              services.AddSession();


          }
复制代码

 页面运行HttpContext.Session.GetString("key"),然后用Redis管理工具RedisDesktopManager查询Session是否入库。

 

每个客户端 InstanceName+ Guid (这个不是session的ID), 数据存储在Hash类型里的data, 不能在调试模式访问. 

hash的data是16进制的字符串,不是中文,怎么显示呢?

网上找了一下

1. 先打开命令行cmd
2. 运行chcp 65001
3.  在命令行标题栏上点击右键,选择"属性"->"字体",将字体修改为True Type字体"Lucida Console",然后点击确定
4. redis-cli.exe -a password --raw

但是对于hash里的data还是没有用

 hash里sldexp 应该是过期时间,默认是20分钟, 但这个值是微秒吗? 好像多了个零. 因为20*60*1000*1000= 1200,000,000

 

当有多台机器Web server的时候,session不会同步。

 

session其实是根据cookie的一个值来取的,而这个值得不同是因为.net core对其做了数据保护(data Protection) 

数据保护会调用机器自身的一个key值,该key值每台机器都不一样,因此最终造成cookie的值也不一样

 

为了解决这个问题。.Net Core团队提供了包将秘钥保存到redis中

添加包引用Microsoft.AspNetCore.DataProtection.Redis


修改startup文件如下

复制代码
var redis = ConnectionMultiplexer.Connect("192.168.1.132:6379");
            services.AddDataProtection()
                .SetApplicationName("session_application_name")
                .PersistKeysToRedis(redis, "DataProtection-Keys");
            services.AddDistributedRedisCache(option =>
            {
                //redis 数据库连接字符串
                option.Configuration = "192.168.1.132:6379";
                //redis 实例名
                option.InstanceName = "master";
            });
            services.AddSession();
复制代码

 

 

 

posted on   Gu  阅读(612)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
历史上的今天:
2012-07-09 产品要不要做先回答的10个问题
点击右上角即可分享
微信分享提示