Docker最全教程——Redis容器化以及排行榜實戰(十三)

雪雁發表於2019-02-20

前言

容器教程的路還很長,筆者儘量根據實踐來不斷地完善。由於在編寫的過程中還會有完善和補充,後續可能會以番外來補充。

接下來會分享TeamCity、樹莓派等內容,節奏可能會有點跳脫。

另外,長沙.NET 社群已經初步成立,有興趣的朋友可以加群參與互動和交流,具體見magiccodes公眾號選單,如無法加入,請聯絡客服。

 

Redis容器化

Redis是一個開源的、支援網路、可基於記憶體亦可持久化的日誌型、高效能的Key-Value資料庫,並提供多種語言的API。其支援儲存的value型別相對很多,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set ——有序集合)和hash(雜湊型別)。這些資料型別都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。

官網地址:https://redis.io/

 

Redis 與其他 key - value 快取產品有以下三個特點:

· Redis支援資料的持久化,可以將記憶體中的資料儲存在磁碟中,重啟的時候可以再次載入進行使用。

· Redis不僅僅支援簡單的key-value型別的資料,同時還提供list,set,zset,hash等資料結構的儲存。

· Redis支援資料的備份,即master-slave模式的資料備份。

  

優勢

· 效能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。

· 豐富的資料型別 – Redis支援二進位制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料型別操作。

· 原子 – Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支援事務,即原子性,通過MULTI和EXEC指令包起來。

· 豐富的特性 – Redis還支援 publish/subscribe, 通知, key過期等等特性。

  

映象說明

官方映象:https://hub.docker.com/_/redis

  

執行Redis映象

Powershell:

docker run --name myRedis `

  -p 6379:6379 `

  -v d:/temp/data/redis:/data `

  -d redis

 

使用redis-cli

進入redis-cli:

docker exec -it myRedis redis-cli

 

設定一個key-value,比如key為name,value為test:

檢視value:

 

提供智慧提示:

 

使用Redis Desktop Manager管理Redis

Redis Desktop Manager是一個開源的跨平臺的redis桌面管理工具。

官網地址:https://redisdesktop.com/

使用起來比較簡單,首先我們需要新增連線:

 

接下來,就可以訪問我們剛建立的Redis資料庫了:

 

又好又快地實現排行榜

Redis的應用場景很多,鍵值對大家經常用,這個我們就不多講了,這裡我們做一個排行榜實踐來分享給大家。

 

使用redis ci

排行榜我們需要使用到Redis的有序集合。使用這種資料型別,可以又快又好的來實現我們的排行榜,比如玩家分數排行。這裡我們使用Redis-ci來實現一個簡單的排行測試。

這裡,我們需要熟悉一個命令——ZINCRBY。Redis Zincrby 命令可以對有序集合中指定成員的分數加上增量值,增量值可以為負數(即讓分數減去相應的值),如下所示:

ZINCRBY rank_test 1 "aa"

其中,rank_test為key,1為增量值,“aa”為值。如果key不存在則會自動建立。全部命令如下所示:

 

通過以上命令,我們建立了有序集合rank_test以及多個值和分數。接下來,我們可以通過ZRANGE命令來檢視所有資料:

ZRANGE rank_test 0 -1 withscores

Redis Zrange 返回有序集中,指定區間內的成員。其中成員的位置按分數值遞增(從小到大)來排序,如果我們需要按照分數從大到小排序,則需新增WITHSCORES。如下圖所示:

 

如果我們需要獲取前3條資料,根據分數排名,則可以執行以下命令:

ZREVRANGE rank_test 0 2 withscores

 

我們可以使用Redis Desktop Manager工具檢視我們剛才新增的資料:

 

整個排行榜實現非常簡單,是否Get到了呢?

利用容器來做實踐,省心不費力哈!

 

.NET Core實踐

在.NET Core中,使用Redis非常便捷,我們可以使用以下Nuget包:

StackExchange.Redis

 

 

官方Github地址:https://github.com/StackExchange/StackExchange.Redis

也可以使用Microsoft.Extensions.Caching.Redis:

 

 

以下是相關關鍵程式碼:

1. 獲取資料庫連線

ConnectionMultiplexer.Connect(configuration["RedisCache:ConnectionString"]);

 

2. 獲取資料庫物件

RedisConnection.GetDatabase();  //通過ConnectionMultiplexer物件獲取

 

3. 新增有序集合

RedisDb.SortedSetIncrementAsync("Rank_Test", " Test", 1); //引數依次為key、value和分數

 

4. 根據分數從大到小獲取前10

RedisDb.SortedSetRangeByRankWithScoresAsync("Rank_Test", 0, 9, StackExchange.Redis.Order.Descending);

 

如上所示,我們可以非常簡單地應用於我們的.NET Core專案。又好又快地實現排行榜!

 

相關文章