zoukankan      html  css  js  c++  java
  • Asp.net Core中使用Redis 来保存Session, 读取配置文件

    今天 无意看到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

  • 相关阅读:
    vim encoding
    window线程间通信常用的三种方法
    Python与C之间的相互调用(Python C API及Python ctypes库)
    vim中去掉每一行的^M
    现实点,不要急! [ 公司软件过程改进案例]
    理解TCP/IP协议
    Linux下C/C++帮助手册安装方法 及使用方法
    MySQL主主高可用(keepalive)
    React获取DOM元素ref属性
    一些vue组件库
  • 原文地址:https://www.cnblogs.com/majiang/p/7060328.html
Copyright © 2011-2022 走看看