一 redis是一種支援多種資料結構的鍵值對資料庫
redis預設是不能外網訪問的
把redis部署到本地請忽視下面
設定防火牆埠例外
更改redis.conf 檔案
bind 127.0.0.1
protected-mode yes
更改為
# bind 127.0.0.1
protected-mode no
然後重啟redis服務,
1.2 redis支援的資料型別:string、list、set、sortedset、geo(redis 3.2以上版本),注意不同方法寫入的值不能用混了,比如有寫list的方法寫入的值用獲取字串的方法去獲取就有問題了。
1.3 redis的優點:
支援多種複雜型別的資料結構
高命中的資料是執行在記憶體中的,資料最終還是可以儲存到硬碟中,伺服器重啟後資料不會丟失
伺服器是單執行緒的,來自所有客戶端的所有命令都是序列執行的,不用擔心併發修改的問題
支援訊息訂閱/通知機制,可以用作訊息佇列
key/value 最大長度允許512m
1.4 redis的缺點:
redis是單執行緒的,因此單個redis的例項只能使用伺服器的乙個cpu核,不能充分發揮伺服器的效能
二 在 .net中操作redis
2.1 在 .net中主要使用兩個開源的元件來操作redis
1. stackexchange.redis:依賴的元件少,操作接近原生的redis操作
2. servicestack.redis:依賴的元件較多,封裝的程度較高
nuget命令安裝元件 install-package stackexchange.redis
2.2 操作字串型別的資料
//建立乙個連線,寫入乙個字元型資料然後讀取public async taskindex()
return view();
}
//string型別可以用作計數器public async taskindex()
return view();
}
2.3 操作list型別資料
public async taskindex()//往集合右邊pop資料pop讀取了資料後資料會從集合中移除(訊息佇列)
redisvalue b = db.listrightpop("list1");
//讀取集合中全部資料,不會將資料移除
redisvalue c =await db.listrangeasync("list1");
}return view();
}
2.5 hash
value 又是乙個「鍵值對集合」或者值是另外乙個 dictionary。
2.6 sortedset型別的資料
如果對於資料遍歷順序有要求,可以使用 sortedset,他會按照打分來進行遍歷。
public async taskindex()for (int i = 0; i < 3; i++)
for (int i = 0; i <6; i++)
sortedsetentry d= db.sortedsetrangebyrankwithscores("resou");
foreach (var item in d)
//根據排序返回值,可以根據序號查詢其中一部分;
//redisvalue sortedsetrangebyrank(rediskey key, long start = 0, long stop = -1, order order = order.ascending)
//根據排序返回值,可以只返回 start-stop 這個範圍;
//redisvalue sortedsetrangebyscore(rediskey key, double start = double.negativeinfinity, double stop = double.positiveinfinity, exclude exclude = exclude.none, order order = order.ascending, long skip = 0, long take = -1)
}return view();
}
2.5 geo資料型別的基本操作
geo 是 redis 3.2 版本後新增的資料型別,用來儲存興趣點(poi,point of interest)的座標資訊。 可以實現計算兩 poi 之間的距離、獲取乙個點周邊指定距離的 poi。
public async taskindex()}return view();
}
三 redis批量操作
如果一次性執行多個redis操作很多那麼會很慢,可以使用批量操作。
主要有兩種方式:
1) 幾乎所有的操作都支援陣列型別,這樣就可以一次性操作多條資料:比如 geoadd(rediskey key, geoentry values)、sortedsetadd(rediskey key, sortedsetentry values)
2) 如果一次性的操作不是簡單的同型別操作,那麼就要使用批量模式:
ibatch batch = db.createbatch(); db.geoadd("shopsgeo1", new geoentry(116.34039, 39.94218, "1")); db.stringset("abc", "123"); batch.execute();
會把當前連線的 createbatch()、execute()之間的操作一次性提交給伺服器。
你所不知到的C 之 巨集的用法
嚴格的說,巨集並不是c 語言的組成部分。巨集是一種文字替換語言,用在c c 的預編譯系統中。巨集能在一定程度上簡化 巨集主要有 include,define,if else elseif endif和 line等一些語法組成。巨集在c c 中是不可或缺的。比如 include指令。在增強可移植性上也...
C語言練習之判斷是否為素數
題目要求 輸入乙個整數n,判斷他是否為素數 質數 分析 採用的演算法是,讓n除以i,如果n能被2 n 1 之中的任何乙個整數整除,則表示n肯定不是素數,不必再繼續被後面的整數除,因此,可以提前結束迴圈。如下 include stdio.h void main if i 跳出迴圈後判斷是因為1跳出的迴...
C語言入門之判斷是否為質數
c語言永遠不會過時 其實學程式設計關鍵是學習其思想,如果你精通了一門,再去學其他的時候也很容易上手。c不會過時的,尤其是在unix linux操作平台上,學好c是必須的。c跟c 在很多方面也是相容的,c是c 的基礎。再者c能從很大的程度上幫你了解計算機的發展史,資料結構等方面的知識,很多軟體 甚至作...