using Newtonsoft.Json;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;數據庫
namespace ConsoleApp
{
/// <summary>
/// Redis 操做類
/// </summary>
public class RedisHelper
{
/// <summary>
/// 鏈接字符串
/// </summary>
private static readonly string ConnectionString = ConfigurationManager.AppSettings["RedisConnectionString"];json
/// <summary>
/// 鎖
/// </summary>
private readonly object _lock = new object();
/// <summary>
/// 鏈接對象
/// </summary>
private volatile IConnectionMultiplexer _connection;
/// <summary>
/// 數據庫
/// </summary>
private IDatabase _db;app
public RedisHelper()
{
_connection = ConnectionMultiplexer.Connect(ConnectionString);
_db = GetDatabase();
}spa
/// <summary>
/// 獲取鏈接
/// </summary>
/// <returns></returns>
protected IConnectionMultiplexer GetConnection()
{
if (_connection != null && _connection.IsConnected)
{
return _connection;
}
lock (_lock)
{
if (_connection != null && _connection.IsConnected)
{
return _connection;
}對象
if (_connection != null)
{
_connection.Dispose();
}
_connection = ConnectionMultiplexer.Connect(ConnectionString);
}ip
return _connection;
}字符串
/// <summary>
/// 獲取數據庫
/// </summary>
/// <param name="db"></param>
/// <returns></returns>
public IDatabase GetDatabase(int? db = null)
{
//return _connection.GetDatabase(db ?? -1);
return GetConnection().GetDatabase(db ?? -1);
}string
/// <summary>
/// 設置
/// </summary>
/// <param name="key">鍵</param>
/// <param name="data">值</param>
/// <param name="cacheTime">時間</param>
public virtual void Set(string key, object data, int cacheTime)
{
if (data == null)
{
return;
}
var entryBytes = Serialize(data);
var expiresIn = TimeSpan.FromMinutes(cacheTime);io
_db.StringSet(key, entryBytes, expiresIn);
}class
/// <summary>
/// 根據鍵獲取值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public virtual T Get<T>(string key)
{
var rValue = _db.StringGet(key);
if (!rValue.HasValue)
{
return default(T);
}
var result = Deserialize<T>(rValue);
return result;
}
/// <summary>
/// 反序列化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="serializedObject"></param>
/// <returns></returns>
protected virtual T Deserialize<T>(byte[] serializedObject)
{
if (serializedObject == null)
{
return default(T);
}
var json = Encoding.UTF8.GetString(serializedObject);
return JsonConvert.DeserializeObject<T>(json);
}
/// <summary>
/// 判斷是否已經設置
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public virtual bool IsSet(string key)
{
return _db.KeyExists(key);
}
/// <summary>
/// 序列化
/// </summary>
/// <param name="data"></param>
/// <returns>byte[]</returns>
private byte[] Serialize(object data)
{
var json = JsonConvert.SerializeObject(data);
return Encoding.UTF8.GetBytes(json);
}
}
}
<appSettings> <add key="RedisConnectionString" value="127.0.0.1:6379"></add> </appSettings>