csredis 看网上评论中说到没有被限制,但是这个东西到底如何使用?没有找到一个可以确认的方式。
使用方式一
注入依赖
services.AddScoped<Dis.IServices.ICsRedisBase, Dis.Services.CsRedisBase>();
在其他注入依赖的构造函数里面声明一下,然后调用下对应的操作方法 get set 等等,可以对csredis 的方法封装一下
/// <summary>
///
/// </summary>
public class User : Dis.IServices.IUser
{
ICsRedisBase _csRedisBase ;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="cacheService"></param>
public Configsys(ICsRedisBase csRedisBase)
{
_csRedisBase = csRedisBase;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public Entity.User GetList()
{
string Hkey = "demo";
string Key = "SN0001";
string Str = _csRedisBase.Hget(Hkey,Key);
if(Str == ""){
return null;
}
Entity.User item = JsonHelper.FromJson<Entity.User>(Str)
return item ;
}
}
问题来了。。。
csredis 的初始化连接在那里打开???
csRedisBase 这个是我封装的一个类,写了一个方法。在 Startup.cs 中的,Configure 中进行初始化数据库连接
每次像上面这样使用,就会打开连接,我一个页面用了6次查询,结果一下刷新多出6个连接 ,崩溃啊,
6 ,12,18 .... 看着都耐受
使用方式2
把csRedisBase 改成静态类,构造函数中初始化数据库连接
public class CsRedisBase
{
/// <summary>
///
/// </summary>
protected static CSRedis.CSRedisClient rds;
static CSRedis.CSRedisClient GetClient()
{
return rds;
}
/// <summary>
///
/// </summary>
static CsRedisBase() {
rds = new CSRedis.CSRedisClient(Utility.AppConfigHelper.DBValue(new string[] { "RedisCaching", "Server" }));//获取连接字符串);
RedisHelper.Initialization(rds);
}
/// <summary>
///
/// </summary>
/// <param name="Key"></param>
/// <param name="Field"></param>
/// <returns></returns>
public static long HDel(string Key, string[] Field) {
return rds.HDel(Key, Field);
}
/// <summary>
///
/// </summary>
/// <param name="Key"></param>
/// <param name="Field"></param>
/// <returns></returns>
public static long HDel(string Key, string Field)
{
return rds.HDel(Key, Field);
}
/// <summary>
///
/// </summary>
/// <param name="Key"></param>
/// <param name="Field"></param>
/// <returns></returns>
public static bool HExists(string Key, string Field) {
return rds.HExists(Key, Field);
}
/// <summary>
///
/// </summary>
/// <param name="key"></param>
/// <param name="field"></param>
/// <param name="value"></param>
/// <returns></returns>
public static bool HSet(string key, string field, object value)
{
return rds.HSet(key, field, value);
}
/// <summary>
///
/// </summary>
/// <param name="key"></param>
/// <param name="field"></param>
/// <returns></returns>
public static string HGet(string key, string field)
{
return rds.HGet(key, field);
}
/// <summary>
///
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static Dictionary<string, string> HGetAll(string key)
{
return rds.HGetAll(key);
}
/// <summary>
/// 获取哈希表中字段的数量
/// </summary>
/// <param name="key">不含prefix前辍</param>
/// <returns></returns>
public static long HLen(string key)
{
return rds.HLen(key);
}
/// <summary>
///
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static long Del(string[] key)
{
return rds.Del(key);
}
}
反正是好用了 ,连接不增多了,但是固定6个了, 其实感觉也是有点问题,说不上来,
csredis 打开方式,(我感觉这个是对的)
public void ConfigureServices(IServiceCollection services){
var RedisCaching =((ConfigurationSection)Configuration.GetSection("RedisCaching:ConnectionString")).Value;
// 注册Redis
var csredis = new CSRedis.CSRedisClient(RedisCaching);
RedisHelper.Initialization(csredis);
services.AddSingleton<ICsRedisCache, CsRedisCache>();
}
/// <summary>
///
/// </summary>
public interface ICsRedisCache
{
/// <summary>
///
/// </summary>
/// <param name="Key"></param>
/// <param name="Field"></param>
/// <returns></returns>
long HDel(string Key, string[] Field);
}
public class CsRedisCache : ICsRedisCache
{
/// <summary>
///
/// </summary>
/// <param name="Key"></param>
/// <param name="Field"></param>
/// <returns></returns>
public long HDel(string Key, string[] Field)
{
return RedisHelper.HDel(Key, Field);
}
}
调用RedisHelper中的方法;这次连接数正常了