using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using StackExchange.Redis;
namespace IoTIntegrationPlatform.Common
{
///
/// redis 帮助类
///
public class RedisHelper
{
private ConnectionMultiplexer redis;
private static string redisConnectStr = string.Empty;
///
///
///
///
public static void SetRedisConnection(string conn)
{
redisConnectStr = conn;
}
private static RedisHelper _Instance;
///
/// redis单例
///
public static RedisHelper Instance
{
get
{
lock (redisConnectStr)
{
if (_Instance == null)
{
if (string.IsNullOrWhiteSpace(redisConnectStr))
{
Logging.Warn("redisConnectStr 未配置");
}
_Instance = new RedisHelper
{
redis = ConnectionMultiplexer.Connect(redisConnectStr)
};
}
return _Instance;
}
}
}
public bool Remove(string key)
{
IDatabase db = redis.GetDatabase();
return db.KeyDelete(key);
}
#region string
///
/// 保存字符串
///
///
///
///
///
public bool StringSet(string key, string value, int TimeSpanSeconds = 0)
{
IDatabase db = redis.GetDatabase();
if (TimeSpanSeconds > 0)
{
return db.StringSet(key, value, TimeSpan.FromSeconds(TimeSpanSeconds));
}
return db.StringSet(key, value);
}
public bool StringSet(string key, string value, TimeSpan? timeSpan)
{
IDatabase db = redis.GetDatabase();
if (timeSpan != null)
{
return db.StringSet(key, value, timeSpan);
}
return db.StringSet(key, value);
}
///
/// 保存实体字符串
///
///
///
///
///
public bool StringSet(string key, T value, int TimeSpanSeconds = 0)
{
IDatabase db = redis.GetDatabase();
if (TimeSpanSeconds > 0)
{
return db.StringSet(key, JsonConvert.SerializeObject(value), TimeSpan.FromSeconds(TimeSpanSeconds));
}
return db.StringSet(key, JsonConvert.SerializeObject(value));
}
///
/// 获取字符串
///
///
///
public string StringGet(string key)
{
IDatabase db = redis.GetDatabase();
return db.StringGet(key);
}
///
/// 获取实体
///
///
///
///
public T StringGet(string key, int TimeSpanSeconds = 0)
{
string result = StringGet(key);
if (!string.IsNullOrWhiteSpace(result))
{
if (TimeSpanSeconds > 0)
{
StringSet(key, result, TimeSpanSeconds);
}
return JsonConvert.DeserializeObject(result);
}
return default;
}
#endregion string
#region List
public long ListRightPush(string key, string value)
{
IDatabase db = redis.GetDatabase();
return db.ListRightPush(key, value);
}
public string ListLeftPop(string key)
{
IDatabase db = redis.GetDatabase();
return db.ListLeftPop(key);
}
public static List GetList(string key)
{
List taskList = new List();
//获取redis保存数据
var redisList = RedisHelper.Instance.StringGet(key);
if (!string.IsNullOrEmpty(redisList))
{
taskList = JsonTools.JsonToT>(redisList);
}
return taskList;
}
#endregion List
}
}