前言

容器教程的路还很长,笔者尽量根据实践来不断地完善。由于在编写的过程中还会有完善和补充,后续可能会以番外来补充。

接下来会分享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项目。又好又快地实现排行榜!

Docker最全教程——Redis容器化以及排行榜实战(十三)的更多相关文章

  1. Docker最全教程——数据库容器化(十)

    终于按时完成第二篇.本来准备着手讲一些实践,但是数据库部分没有讲到,部分实践会存在一些问题,于是就有了此篇以及后续——数据库容器化.本篇将从SQL Server容器化实践开始,并逐步讲解其他数据库的容 ...

  2. Docker最全教程——数据库容器化之持久保存数据(十一)

    上一节我们讲述了SQL Server容器化实践(注意,SQL Server现在也支持跨平台),本节将讲述如何持久保存数据,并且接下来将逐步讲解其他数据库(MySql.Redis.Mongodb等等)的 ...

  3. Docker最全教程——MongoDB容器化(十二)

    MongoDB容器化 MongoDB是一个免费的.开源的.跨平台分布式面向文档存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和 ...

  4. Docker最全教程

    摘自雪雁大佬的博客,地址:https://www.cnblogs.com/codelove/default.html 目录: Docker最全教程——从理论到实战(一) Docker最全教程——从理论 ...

  5. Docker最全教程之使用Node.js搭建团队技术文档站(二十三)

    前言 各种编程语言均有其优势和生态,有兴趣的朋友完全可以涉猎多门语言.在平常的工作之中,也可以尝试选择相对适合的编程语言来完成相关的工作. 在团队技术文档站搭建这块,笔者尝试了许多框架,最终还是选择了 ...

  6. Docker最全教程——从理论到实战(七)

    在本系列教程中,笔者希望将必要的知识点围绕理论.流程(工作流程).方法.实践来进行讲解,而不是单纯的为讲解知识点而进行讲解.也就是说,笔者希望能够让大家将理论.知识.思想和指导应用到工作的实际场景和实 ...

  7. Docker最全教程——从理论到实战(六)

    托管到腾讯云容器服务 托管到腾讯云容器服务,我们的公众号“magiccodes”已经发布了相关的录屏教程,大家可以结合本篇教程一起查阅.   自建还是托管? 在开始之前,我们先来讨论一个问题——是自建 ...

  8. Docker最全教程——从理论到实战(二十二)

    前言 最近正在抽时间编写k8s的相关教程,很是费时,等相关内容初步完成后,再和大家分享.对于k8s,还是上云更为简单.稳定并且节省成本,因此我们需要对主流云服务的容器服务进行了解,以便更好地应用于生产 ...

  9. Docker最全教程——从理论到实战(十一)

    前言 容器教程的路还很长,笔者尽量根据实践来不断地完善.由于在编写的过程中还会有完善和补充,后续可能会以番外来补充. 接下来会分享TeamCity.树莓派等内容,节奏可能会有点跳脱. 另外,长沙.NE ...

随机推荐

  1. PyCOn2013大会笔记

    DAE的设计 By洪强宁 hongon@douban.com 3个aaS服务都不能模块化灵活组合服务 DAE的起因:代码横向拆分模块化,重用基础设施 最佳实践对新App复用    Scale SA D ...

  2. 基类包括字段“ScriptManager1”,但其类型(System.Web.UI.ScriptManager)与控件(System.Web.UI.ScriptManager)的类型不兼容

    首先说下原先的情况,就是原本老项目的Web解决方案是使用.net framework 2.0的老版本, 所以机器也安装过Microsoft ASP.NET 2.0 AJAX Extensions..A ...

  3. C#语言中的XmlSerializer类的XmlSerializer.Deserialize (Stream)方法举例详解

    包含由指定的 XML 文档反序列化 Stream. 命名空间:   System.Xml.Serialization程序集:  System.Xml(位于 System.Xml.dll) 注意: 反序 ...

  4. require/exports 和 import/export 区别

    零.区别 1.require/exports 是 CommonJS 的标准,适用范围如 Node.js 2.import/export 是 ES6 的标准,适用范围如 React 一.间接获取对象 ( ...

  5. jdk和tomcat环境配置

    一.安装JDK和Tomcat 1,安装JDK:直接运行jdk-7-windows-i586.exe可执行程序,默认安装即可. 备注:路径可以其他盘符,不建议路径包含中文名及特殊符号. 2.安装Tomc ...

  6. hashmap,hashTable concurrentHashMap 是否为线程安全,区别,如何实现的

    线程安全类 在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的.在jdk1.2之后,就出现许许多多非线程安全的类. 下面是这些线程安全的同步的类: vector:就比arraylist多 ...

  7. Java学习导航

    由于最近在系统的重新学习Java,为了便于日后复习,给个人博客中Java内容做一个目录. Java基础:Java虚拟机(JVM) Java基础:内存模型 Java基础:JVM垃圾回收算法 Java基础 ...

  8. 关于引用(python中的伪指针)的理解

    # 总结:个人理解,引用不可变的的变量时,随着改变会指向新的地址 # 引用可变的变量时,位置不会随着变量改变而改变 a = 1 b = a print(b) a = 2 # 指向了新的内存地址 pri ...

  9. python爬虫入门(四)利用多线程爬虫

    多线程爬虫 先回顾前面学过的一些知识 1.一个cpu一次只能执行一个任务,多个cpu同时可以执行多个任务2.一个cpu一次只能执行一个进程,其它进程处于非运行状态3.进程里包含的执行单元叫线程,一个进 ...

  10. 【读英文文档】Whetting Your Appetite(刺激你的食欲)

    如果你有很多工作是通过计算机来完成的,那么你一定希望其中的很多事情能够自动地实现.比方说,你希望在文本文件中实现查找和替换的功能,以某一种机制实现照片的重命名以及重新排序的功能,一个小型的数据库甚至是 ...