• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Asp.net Core中使用Redis 来保存Session, 读取配置文件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

今天 无意看到Asp.net Core中使用Session  ,首先要使用Session就必须添加Microsoft.AspNetCore.Session包,默认Session是只能存去字节,所以如果你想存取string的,那么还的引入Microsoft.AspNetCore.Http.Extensions包,那么在Startup.cs的ConfigureServices方法里面添加      services.AddSession(); (在 services.AddMvc()之前),在Configure方法添加   app.UseSession(); ( app.UseMvc()之前) 这样就可以使用Session了,默认Session是字节方式,这里我们使用json来序列化对象:

 public static class SessionExtensions
    {
        public static void Set(this ISession session, string key, object value)
        {
            session.SetString(key, JsonConvert.SerializeObject(value));
        }

        public static T Get<T>(this ISession session, string key)
        {
            var value = session.GetString(key);

            return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
        }
    }

使用方式:

var city = new City { ID = 1, CountryCode = "123", Name = "city", District = "District test", Population = " Population test" };
HttpContext.Session.Set("city", city);
var c2 = HttpContext.Session.Get<City>("city");

如何保存到Redis中了?

首先需要添加对应的包Microsoft.Extensions.Caching.Redis,再调用AddDistributedRedisCache如下:

    public void ConfigureServices(IServiceCollection services)
        {
           // string mysqlConnectiong = Configuration.GetConnectionString("MySQL");
            string redisConnectiong = Configuration.GetConnectionString("Redis");
            services.AddSession();
            services.AddDistributedRedisCache(option=>option.Configuration=redisConnectiong);
            services.AddMvc();
        }

配置如下:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "ConnectionStrings": {
    "MySQL": "server=localhost;port=3306;uid=root;pwd=;database=word;charset=utf8;max pool size=1000;",
    "Redis": "127.0.0.1:6379,abortConnect=false,connectRetry=3,connectTimeout=3000,defaultDatabase=1,syncTimeout=3000,version=3.2.1,responseTimeout=3000"
  }
}

这样Session就可以保存到Redis了。

 缓存的使用也很简单

IDistributedCache Cache;
        public ValuesController(IDistributedCache cache) {
            Cache = cache;
        }


 Cache.SetString("test", "Gavin");
            var vc = Cache.GetString("test");

我们在项目类库如何读配置文件

public class ConfigurationManager
    {
        /*
         Microsoft.Extensions.Options.ConfigurationExtensions
         Microsoft.Extensions.Configuration.Abstractions
         Microsoft.AspNetCore.Http.Extensions
  Microsoft.Extensions.DependencyInjection
*/ static IConfiguration Configuration; static ConfigurationManager() { var baseDir = AppContext.BaseDirectory; Configuration = new ConfigurationBuilder() .SetBasePath(baseDir) .Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true }) .Build(); } public static T GetAppSettings<T>(string key) where T : class, new() { var appconfig = new ServiceCollection() .AddOptions() .Configure<T>( Configuration.GetSection(key)) .BuildServiceProvider() .GetService<IOptions<T>>() .Value; return appconfig; } } public class ConnectionStrings { public string MySQL { set; get; } public string Redis { set; get; } }

 单独访问Redis:

public class CityService
    {
        /*
         * StackExchange.Redis
         */
        static IDatabase redis;
        static object lobject = new object();
        public CityService()
        {
            if (redis == null)
            {
                lock (lobject)
                {
                    if (redis == null)
                    {
                        var connection = ConfigurationManager.GetAppSettings<ConnectionStrings>("ConnectionStrings");
                        ConnectionMultiplexer connectionMultiplexer = ConnectionMultiplexer.Connect(connection.Redis);
                        redis = connectionMultiplexer.GetDatabase();
                    }
                }
            }

        }

        public IDatabase Redis { get { return redis; } }
    }

 读取MySql

  public List<City> TestDB()
        {
            /*MySql.Data*/
            List<City> list = new List<City>();
            using (MySqlConnection con = new MySqlConnection(MySqlConnectionStr))
            {
                MySqlCommand cmd = new MySqlCommand("SELECT ID, NAME,CountryCode, District, Population FROM city ;", con);
                con.Open();
                using (MySqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        list.Add(new City
                        {
                            ID = reader.GetInt32("ID"),
                            Name = reader.GetString("NAME"),
                            CountryCode = reader.GetString("CountryCode"),
                            District = reader.GetString("District"),
                            Population = reader.GetString("Population")
                        });
                    }
                }
            }
            return list;
        }

 

参考  ASP.NET Core实现类库项目读取配置文件

  ASP.NET Core实现强类型Configuration读取配置数据

4.3 可配置的分布式缓存(上)

 Asp.net Core 使用Redis存储Session


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NETWebAPI身份验证和授权发布时间:2022-07-10
下一篇:
ASP.NET Core 身份验证(一)发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap