JavaScript DOMContentLoaded事件案例詳解
Redis
redis是一種非關係型資料庫(關係型資料庫即SQL server,MySQL等),但多用於快取技術.因為它是一種記憶體告訴快取資料庫,儲存資料的方式為Key-value,即鍵值對.而且redis還支援多種資料型別,如:string、list、set、zset(sorted set)、hash。
redis特點:
①redis以記憶體作為儲存的介質,讀寫速率極高,遠超過資料庫,
②redis跟memcache不同,redis儲存的資料是持久化的,不會因為斷電重啟造成的資料丟失.(reids的儲存分為記憶體儲存,磁碟儲存和log檔案三部分,重啟後,redis從磁碟重新將資料載入到記憶體中,再通過配置檔案對其進行配置,持久化的原因)
③redis可以配置叢集,就像一些大公司的伺服器一樣,它可以建立多個redis用來快取,而且redis不在客戶端,也不再服務端,是一個獨立的部分
redis兩種檔案格式:
①全量資料:是把記憶體中的資料寫入磁碟,便於下次讀取檔案進行夾雜
②增量請求:是將記憶體中的資料序列化為操作請求,用於讀取檔案進行replay得到資料,序列化的操作包括SET,RPUSH,SADD,ZADD
Redis的安裝:
包地址:https://files.cnblogs.com/files/lbjlbj/Redis3.7z
執行->cmd->CD C:\redis(C:\redis CD 進入到碟符(記得有空格),上面那個解壓後把它改名為redis,放到了C盤,也可以放其他盤
再開一個控制檯,同樣:CD C:\redis redis-cli.exe-h127.0.0.1-p6379 setmyKeyabc(myKey即Key,abc即value,set存) getmyKey(get讀)
set auth 密碼名,是用來設定密碼.(如果忘記了密碼:redis資料夾下redis.windows-service.conf記事本開啟CTRL+F requirepass 即可)
redis在C#中的實際用法:
******在使用redis快取時,須先啟動伺服器,CD C:\redis redis-server.exeredis.windows.conf
dll檔案:https://files.cnblogs.com/files/lbjlbj/dll.7z
可能會存在ConfigurationManager會報錯,還需自行搜尋新增引用,
奉上一個封裝好的Helper類
using StackExchange.Redis; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; namespace ConsoleApp1 { /// <summary> /// Redis 操作類 /// </summary> public class RedisHelper { /// <summary> /// 連線字串 /// </summary> private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["RedisConnectionString"].ConnectionString; /// <summary> /// 鎖 /// </summary> private readonly object _lock = new object(); /// <summary> /// 連線物件 /// </summary> private volatile IConnectionMultiplexer _connection; /// <summary> /// 資料庫 /// </summary> private IDatabase _db; public RedisHelper() { _connection = ConnectionMultiplexer.Connect(ConnectionString); _db = GetDatabase(); } /// <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); } return _connection; } /// <summary> /// 獲取資料庫 /// </summary> /// <param name="db"></param> /// <returns></returns> public IDatabase GetDatabase(int? db = null) { return GetConnection().GetDatabase(db ?? -1); } /// <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); _db.StringSet(key, entryBytes, expiresIn); } /// <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); } } }
AppConfig中配置:
<connectionStrings> <add name="RedisConnectionString" connectionString="localhost"/> </connectionStrings>
最後功能實現:
class Program { static void Main(string[] args) { var s = "a"; //RedisCacheHelper.Add("abc",s,DateTime.Now.AddDays(1)); //Console.WriteLine("ok"); //Console.WriteLine(RedisCacheHelper.Get<string>("abc")); new RedisHelper().Set("abc", s, 10); Console.WriteLine("ok"); Console.ReadKey(); } }