前言
容器教程的路还很长,笔者尽量根据实践来不断地完善。由于在编写的过程中还会有完善和补充,后续可能会以番外来补充。
接下来会分享TeamCity、树莓派等内容,节奏可能会有点跳脱。
另外,长沙.NET 社区已经初步成立,有兴趣的朋友可以加群参与互动和交流.
![8ed029ae28387da09f2ad47be44de36a.png](https://img-blog.csdnimg.cn/img_convert/8ed029ae28387da09f2ad47be44de36a.png)
![da0950e029ff2f342071df48933aaa41.png](https://img-blog.csdnimg.cn/img_convert/da0950e029ff2f342071df48933aaa41.png)
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
![2a165f466f6122b92e50103deb76f7dd.png](https://img-blog.csdnimg.cn/img_convert/2a165f466f6122b92e50103deb76f7dd.png)
使用redis-cli
进入redis-cli:
docker exec -it myRedis redis-cli
![d0e1b7b5a2c17a5b03d8b753c2031ca6.png](https://img-blog.csdnimg.cn/img_convert/d0e1b7b5a2c17a5b03d8b753c2031ca6.png)
设置一个key-value,比如key为name,value为test:
![fe19f283242ceb0ac411a6a4f55cd002.png](https://img-blog.csdnimg.cn/img_convert/fe19f283242ceb0ac411a6a4f55cd002.png)
查看value:
![16e847148fcef8faba704e40b78cc518.png](https://img-blog.csdnimg.cn/img_convert/16e847148fcef8faba704e40b78cc518.png)
提供智能提示:
![fd368564d8652b8ca92726943123d5a5.png](https://img-blog.csdnimg.cn/img_convert/fd368564d8652b8ca92726943123d5a5.png)
![27bc60e016267a1dc615b576021a4ed5.png](https://img-blog.csdnimg.cn/img_convert/27bc60e016267a1dc615b576021a4ed5.png)
使用Redis Desktop Manager管理Redis
Redis Desktop Manager是一个开源的跨平台的redis桌面管理工具。
官网地址:https://redisdesktop.com/
使用起来比较简单,首先我们需要添加连接:
![ea77a3d642414356f5adb8c474d9f222.png](https://img-blog.csdnimg.cn/img_convert/ea77a3d642414356f5adb8c474d9f222.png)
接下来,就可以访问我们刚创建的Redis数据库了:
![cf4d7f0edb5a20e0fe2bb37fbb7833cd.png](https://img-blog.csdnimg.cn/img_convert/cf4d7f0edb5a20e0fe2bb37fbb7833cd.png)
又好又快地实现排行榜
Redis的应用场景很多,键值对大家经常用,这个我们就不多讲了,这里我们做一个排行榜实践来分享给大家。
使用redis ci
排行榜我们需要使用到Redis的有序集合。使用这种数据类型,可以又快又好的来实现我们的排行榜,比如玩家分数排行。这里我们使用Redis-ci来实现一个简单的排行测试。
这里,我们需要熟悉一个命令——ZINCRBY。Redis Zincrby 命令可以对有序集合中指定成员的分数加上增量值,增量值可以为负数(即让分数减去相应的值),如下所示:
ZINCRBY rank_test 1 "aa"
其中,rank_test为key,1为增量值,“aa”为值。如果key不存在则会自动创建。全部命令如下所示:
![ded14b801e8d081fd137dffec54eee75.png](https://img-blog.csdnimg.cn/img_convert/ded14b801e8d081fd137dffec54eee75.png)
通过以上命令,我们创建了有序集合rank_test以及多个值和分数。接下来,我们可以通过ZRANGE命令来查看所有数据:
ZRANGE rank_test 0 -1 withscores
Redis Zrange 返回有序集中,指定区间内的成员。其中成员的位置按分数值递增(从小到大)来排序,如果我们需要按照分数从大到小排序,则需添加WITHSCORES。如下图所示:
![609dd7da11dd82601f4f2b6bcb3154c5.png](https://img-blog.csdnimg.cn/img_convert/609dd7da11dd82601f4f2b6bcb3154c5.png)
如果我们需要获取前3条数据,根据分数排名,则可以执行以下命令:
ZREVRANGE rank_test 0 2 withscores
![87e8ec0ef29f028f8d2ddf168fce9e6d.png](https://img-blog.csdnimg.cn/img_convert/87e8ec0ef29f028f8d2ddf168fce9e6d.png)
我们可以使用Redis Desktop Manager工具查看我们刚才添加的数据:
![2a3dc2bfbd4e3d4df52dad1e1b45421e.png](https://img-blog.csdnimg.cn/img_convert/2a3dc2bfbd4e3d4df52dad1e1b45421e.png)
整个排行榜实现非常简单,是否Get到了呢?
利用容器来做实践,省心不费力哈!
.NET Core实践
在.NET Core中,使用Redis非常便捷,我们可以使用以下Nuget包:
StackExchange.Redis
![3d13d543140fd0eac0f340c11d19b40e.png](https://img-blog.csdnimg.cn/img_convert/3d13d543140fd0eac0f340c11d19b40e.png)
官方Github地址:https://github.com/StackExchange/StackExchange.Redis
也可以使用Microsoft.Extensions.Caching.Redis:
![97e8b1ee78a0623cb4f8a782d0802393.png](https://img-blog.csdnimg.cn/img_convert/97e8b1ee78a0623cb4f8a782d0802393.png)
以下是相关关键代码:
1. 获取数据库连接
ConnectionMultiplexer.Connect(configuration["RedisCache:ConnectionString"]);
2. 获取数据库对象
RedisConnection.GetDatabase(); //通过ConnectionMultiplexer对象获取
3. 添加有序集合
RedisDb.SortedSetIncrementAsync("Rank_Test