C 之Redis所欲為

2022-03-26 05:49:43 字數 2919 閱讀 4167

一 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能從很大的程度上幫你了解計算機的發展史,資料結構等方面的知識,很多軟體 甚至作...