c#总结最近的几项重要代码
java的代碼就不說了,畢竟不是我的主業(yè)。
1.c#數(shù)據(jù)庫連接池Hikari.
? ?(1)動態(tài)加載各類數(shù)據(jù)庫驅(qū)動
? (2)支持簡單配置文件
(3)支持按照名稱多數(shù)據(jù)庫調(diào)用
(4)使用簡潔
?單數(shù)據(jù)庫使用:
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.LoadConfig("Hikari.txt");
HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig); 獲取連接:
hikariDataSource.GetConnection();
連接池管理類獲取
ManagerPool.Instance.GetDbConnection(MySql);
項目地址:
https://github.com/jinyuttt/Hikari.git 2.c#數(shù)據(jù)庫封裝DBQuerySharp
(1)各類數(shù)據(jù)庫均有,功能齊備
(2)有SQL,NoSQL樣例,完善了封裝
(3)封裝成了服務(wù)化模型。擴(kuò)展使用和優(yōu)化
(4)有查詢的緩存優(yōu)化樣例。
整個包括了SQL數(shù)據(jù)庫(連接池任意配置),本地KV數(shù)據(jù)庫(berkeleydb),本地SQL數(shù)據(jù)庫(Sqlite),內(nèi)存SQL數(shù)據(jù)庫(Sqlite),內(nèi)存NOSQL數(shù)據(jù)庫(redis),內(nèi)存KV存儲(LRU緩存)
(5)相關(guān)項目
1.sqilte 2.berkeleydb 3.一般數(shù)據(jù)庫使用(通過Hikari) 4.redis ? 包含其他項目: 1.序列化 2.通信 3.自定義數(shù)據(jù)庫連接池
項目地址:
https://github.com/jinyuttt/DBQuerySharp.git 3.本地緩存JYCache
? (1)完全本地?fù)QK-V緩存
(2)實現(xiàn)FIFO,LRU,LFU策略
使用示例:
CacheConfig config = new CacheConfig();
config.CacheTime = 1800;//(時間都是秒)
config.Policy = CachePolicy.FIFO;//設(shè)置消失策略
ICache<int,int> cache=CacheFactory<int, int>.Create(config);
cache.CacheRemoveListener += Cache_CacheRemoveListener;
cache.Add(1, 1,10);//單獨設(shè)置key保持10秒
項目地址:
https://github.com/jinyuttt/JYCache.git 4.Hash一直負(fù)載均衡LoadBalanceHash
? (1)實現(xiàn)Hash一致算法。算法原理網(wǎng)上搜索很多,我就不說了。只需要搜索“Hash一致”
(2)這方面我不擅長,主要是參閱網(wǎng)友的東西。我的封裝包括了2個項目。一個是網(wǎng)上原理KetamaHash .
? (3)主要參閱:https://www.cnblogs.com/daizhj/archive/2010/08/24/1807324.html;
? ? ? ? ? ? ? ? ? ? ? ??https://blog.csdn.net/cywosp/article/details/23397179/
?(4)代碼說明
?參考網(wǎng)上的代碼就不說了,一模一樣。主要是MD5+SortedList.
這里說我測試的另外一個組合。MurmurHash+SortedList.這個是充分驗證了效率的。
MurmurHash算法比較快,網(wǎng)上多少MD5.用法基本可以一樣,但是我沒有使用原來進(jìn)行分組了。底層存儲我測試了SortedDictionary,SortedList以及自定義紅黑樹(gi網(wǎng)友的,可以使用)。他們的主要問題都是在獲取Key右側(cè)最近的節(jié)點。都沒有提供現(xiàn)成的。所以測試很慢。
最后測試MurmurHash+SortedList.但是多了一層封裝。我將其SortedList與紅黑樹合并(也可以直接自己封裝一個類結(jié)構(gòu),項目中也有樣例)。在初始化時,數(shù)據(jù)添加到紅黑樹中。然后通過UpdateSort快速遍歷,將數(shù)據(jù)導(dǎo)入SortedList存儲使用,這樣就啟用了其中為Hash一致封裝的功能TialNode.但是這里不能使用網(wǎng)上的方法,用linq查詢,太慢。我在內(nèi)部直接使用二分法進(jìn)行搜索。后面說原因。采用這種辦法會很快,而且直接返回最右側(cè)的一個值。這里強(qiáng)調(diào)一個問題,不能使用多線程分片查詢,更加慢。經(jīng)過測試,每個線程都是一樣的時間,和應(yīng)該線程直接查詢一樣的時間使用。都是很短的時間大約一個線程30-800(比毫秒還小的那個單位)。我測試使用的分片方法任然在,但是不能使用。這個可能和數(shù)據(jù)量有關(guān),一個線程的數(shù)據(jù)量沒有千萬級就不要測試了,二分法的方法已經(jīng)夠快了,一次干掉一般的數(shù)據(jù),沒有幾次就結(jié)束了。
最后說說碰上的一個小問題:比較SortedDictionary, SortedList。我推薦一篇文章,是我自己查閱源碼(net core)之后,認(rèn)為這篇文章是真實的。博文地址:https://blog.csdn.net/ma_jiang/article/details/78600043。我比較認(rèn)可。也正是由于2者的結(jié)構(gòu),所以我最后采用SortedList來實現(xiàn)Hash一致。
? 關(guān)于這個問題說2點:SortedList內(nèi)存小,而且是線性數(shù)組實現(xiàn)的Key與value。SortedDictionary則是二叉樹。查詢一個是二分法,一個是二叉樹。另外一個困惑是,我采用紅黑樹搜索居然達(dá)不到它們2者的速度,我感覺奇怪。后面我再繼續(xù)測試吧。
項目地址:
https://github.com/jinyuttt/LoadBalanceHash.git ?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/jinyu20180311/p/10386297.html
總結(jié)
以上是生活随笔為你收集整理的c#总结最近的几项重要代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1元红包换雪诺亏吗
- 下一篇: 移动端丨-webkit-overflow