本次封裝redis應用,用的是免費的servicestack,通過nuget查詢應用,該demo需要特別應用的還有newtonsoft.json、unity,均是最新版本便可
demo通過redis資料庫提供者(rediscachedatabaseprovider),redis配置類(rediscacheoptions),redis基本功能類(rediscachebase),這裡的rediscacheoptions歸屬配置,我這裡將它寫成靜態類。
該類是redis資料庫配置,像連線資料庫字串,特定字元字首,因為redis可以做到分布式,所以不同的redis端,用不同的字首名,還有要連線的資料庫編號,預設0-16
連線資料庫字串
private static stringgetdefaultconnectionstring()
returnconnstr.connectionstring;
特定字首名
private static stringgetredissyscustomkey()
returnredissyscustomkey;
連線資料庫編號
private static intgetdefaultdatabaseid()
returndatabaseid;
irediscachedatabaseprovider
因為這裡簡單用到ioc,所以新增irediscachedatabaseprovider介面,裡面提供getinstance()與getdatabase()兩個方法
此類對外開放getinstance和getdatabase兩個方法,其中getinstance返回的例項做到了單例,返回connectionmultiplexer型別資料(連線資料庫例項);getdatabase返回連線的資料庫,基於此開始做一些具體操作。
在建構函式中延遲建立connectionmultiplexer類,rediscacheoptions.connectionstring取得連線資料庫字串
publicrediscachedatabaseprovider()
_connectionmultiplexer= new lazy(createconnectionmultiplexer);
}privateconnectionmultiplexer createconnectionmultiplexer()
publicconnectionmultiplexer getinstance()
return_instance;
獲取connectionmultiplexer類
privateconnectionmultiplexer getconnectionmultiplexer()
this._disposed = true;
}public voiddispose()
dispose(true);
gc.suppressfinalize(this);
以上便是基本的redis操作的公共部分,以下舉乙個存放key-value格式的資料,用rediscachestringservice實現
rediscachestringservice
該類繼承rediscachebase基類,建構函式傳入irediscachedatabaseprovider型別資料,以簡單的存入key-value,通過key獲取value值,讓key自增為例
存入key-value值
public bool stringset(string key, string value, timespan? expiry = default(timespan?))
key=addsyscustomkey(key);return base.redis.stringset(key, value, expiry);
通過key獲取value值
public string stringget(stringkey)
key=addsyscustomkey(key);return base.redis.stringget(key);
讓key對應的值自增
public double stringincrement(string key, double val = 1)
key=addsyscustomkey(key);return base.redis.stringincrement(key, val);
具體操作
iunitycontainer container = newunitycontainer();
container.registertype();
irediscachedatabaseprovider rediscachedatabaseprovider= container.resolve();using (rediscachestringservice service=newrediscachestringservice(rediscachedatabaseprovider))
service.keyfulsh();
service.stringset("age123", 55);var f= service.redistransaction(x =>);if(f)
console.writeline(service.stringget("sunqiang"));
console.writeline(service.stringget("age"));
通過unity容器,構造出我們想要的rediscachedatabaseprovider
以上便是demo的大概過程,這裡有專門的redis資料庫配置類,專門提供redis資料例項類,還有redis功能操作的基類,分工明確,這個demo其實還可以再改進一些,比如,在構造rediscachestringservice類時,不必明式依賴rediscachedatabaseprovider,在rediscachestringservice類裡面明確依賴,不必反映到此類的外面。
redis訪問,redis mysql操作
1,存字串 name name value 張三 cache.setex name,30,value aa cache.get name print aa.decode 2.刪除某個key key user 1 cache.delete key 3,從sql取出,存入redis,並讀取 rds re...
redis mysql快取機制 Redis快取機制
redis介紹 redis是一款記憶體快取記憶體資料庫 資料模型為 key value,非關係型資料庫使用的儲存資料的格式 可持久化 將記憶體資料在寫入之後按照一定格式儲存在磁碟檔案中,宕機 斷電後可以重啟redis時讀取磁碟中檔案恢復快取資料 分布式 當前任務被多個節點切分處理,叫做分布式處理乙個...
Redis MySQL冷熱資料交換
場景 某 需要對其專案做乙個投票系統,投票專案上線後一小時之內預計有100萬使用者進行投票,希望使用者投票完就能看到實時的投票情況 這個場景可以使用redis mysql冷熱資料交換來解決。何為冷熱資料交換?冷資料 之前使用的資料,熱資料 當前使用的資料。交換 將redis中的資料週期的儲存到mys...