C# 簡單操作緩存數據庫Redis


一、安裝

Nuget包管理器添加StackExchange.Redis的引用

 

二、寫入

/// <summary>
/// 向Redis寫入
/// </summary>
/// <param name="key">鍵值</param>
/// <param name="value"></param>
/// <param name="date">過期日期</param>
public static void SetString(string key,string value,DateTime? date = null)
{
    //ConnectionMultiplexer.Connect("Localhost:6379,password=123456"))
    using (var redis = ConnectionMultiplexer.Connect("Localhost"))
    {
        //寫入
        var db = redis.GetDatabase();
        db.StringSet("key", "123456");
        //設置過期日期
        if (date != null)
        {
            DateTime time = DateTime.Now.AddSeconds(20);
            db.KeyExpire("key", time);
        }
        var result = db.StringGet("key");
    }
}

 

三、讀取

/// <summary>
/// 讀取redis的內容
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string GetString(string key)
{
    using (var redis = ConnectionMultiplexer.Connect("Localhost"))
    {
        //讀取
        var db = redis.GetDatabase();
        var result = db.StringGet(key);
        return result;
    }
}

 

四、Redis封裝類

using ServiceStack.Redis;
using Newtonsoft.Json;
  1     /// <summary>
  2     /// Redis 操作類
  3     /// </summary>
  4     public class RedisHelper
  5     {
  6         /// <summary>
  7         /// 連接字符串
  8         /// </summary>
  9         private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["RedisConnectionString"].ConnectionString;
 10         /// <summary>
 11         /// 12         /// </summary>
 13         private readonly object _lock = new object();
 14         /// <summary>
 15         /// 連接對象
 16         /// </summary>
 17         private volatile IConnectionMultiplexer _connection;
 18         /// <summary>
 19         /// 數據庫
 20         /// </summary>
 21         private IDatabase _db;
 22         public RedisHelper()
 23         {
 24             _connection = ConnectionMultiplexer.Connect(ConnectionString);
 25             _db = GetDatabase();
 26         }
 27         /// <summary>
 28         /// 獲取連接
 29         /// </summary>
 30         /// <returns></returns>
 31         protected IConnectionMultiplexer GetConnection()
 32         {
 33             if (_connection != null && _connection.IsConnected)
 34             {
 35                 return _connection;
 36             }
 37             lock (_lock)
 38             {
 39                 if (_connection != null && _connection.IsConnected)
 40                 {
 41                     return _connection;
 42                 }
 43 
 44                 if (_connection != null)
 45                 {
 46                     _connection.Dispose();
 47                 }
 48                 _connection = ConnectionMultiplexer.Connect(ConnectionString);
 49             }
 50 
 51             return _connection;
 52         }
 53         /// <summary>
 54         /// 獲取數據庫
 55         /// </summary>
 56         /// <param name="db"></param>
 57         /// <returns></returns>
 58         public IDatabase GetDatabase(int? db = null)
 59         {
 60             return GetConnection().GetDatabase(db ?? -1);
 61         }
 62         /// <summary>
 63         /// 設置
 64         /// </summary>
 65         /// <param name="key"></param>
 66         /// <param name="data"></param>
 67         /// <param name="cacheTime">時間</param>
 68         public virtual void Set(string key, object data, int cacheTime)
 69         {
 70             if (data == null)
 71             {
 72                 return;
 73             }
 74             var entryBytes = Serialize(data);
 75             var expiresIn = TimeSpan.FromMinutes(cacheTime);
 76 
 77             _db.StringSet(key, entryBytes, expiresIn);
 78         }
 79         /// <summary>
 80         /// 根據鍵獲取值
 81         /// </summary>
 82         /// <typeparam name="T"></typeparam>
 83         /// <param name="key"></param>
 84         /// <returns></returns>
 85         public virtual T Get<T>(string key)
 86         {
 87 
 88             var rValue = _db.StringGet(key);
 89             if (!rValue.HasValue)
 90             {
 91                 return default(T);
 92             }
 93 
 94             var result = Deserialize<T>(rValue);
 95 
 96             return result;
 97         }
 98         /// <summary>
 99         /// 反序列化
100         /// </summary>
101         /// <typeparam name="T"></typeparam>
102         /// <param name="serializedObject"></param>
103         /// <returns></returns>
104         protected virtual T Deserialize<T>(byte[] serializedObject)
105         {
106             if (serializedObject == null)
107             {
108                 return default(T);
109             }
110             var json = Encoding.UTF8.GetString(serializedObject);
111             return JsonConvert.DeserializeObject<T>(json);
112         }
113         /// <summary>
114         /// 判斷是否已經設置
115         /// </summary>
116         /// <param name="key"></param>
117         /// <returns></returns>
118         public virtual bool IsSet(string key)
119         {
120             return _db.KeyExists(key);
121         }
122         /// <summary>
123         /// 序列化
124         /// </summary>
125         /// <param name="data"></param>
126         /// <returns>byte[]</returns>
127         private byte[] Serialize(object data)
128         {
129             var json = JsonConvert.SerializeObject(data);
130             return Encoding.UTF8.GetBytes(json);
131         }
132     }
View Code

 

五、查看Redis數據

可以通過  Redis Desktop Manager 數據庫管理工具查看。

 

 

 

 

 

 *****************************
 *** Keep learning and growing. ***
 *****************************


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM