Docker最全教程——Redis容器化以及排行榜实战(十三)
前言
容器教程的路还很长,笔者尽量根据实践来不断地完善。由于在编写的过程中还会有完善和补充,后续可能会以番外来补充。
接下来会分享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项目。又好又快地实现排行榜!
转载于:https://www.cnblogs.com/lonelyxmas/p/10405900.html
Docker最全教程——Redis容器化以及排行榜实战(十三)相关推荐
- Docker最全教程——数据库容器化之持久保存数据(十一)
Docker最全教程--数据库容器化之持久保存数据(十一) 原文:Docker最全教程--数据库容器化之持久保存数据(十一) 上一节我们讲述了SQL Server容器化实践(注意,SQL Server ...
- Docker最全教程——MongoDB容器化(十三)
上一节我们讲述了数据库容器化之持久保存数据,本节将讲诉MongoDB容器化实践,并且接下来将逐步讲解其他数据库(MySql.Redis等等)的容器化实践,然后将讲诉一些分布式架构的项目实践.由于实践需 ...
- Docker最全教程——数据库容器化之持久保存数据(十二)
上一节我们讲述了SQL Server容器化实践(注意,SQL Server现在也支持跨平台),本节将讲述如何持久保存数据,并且接下来将逐步讲解其他数据库(MySql.Redis.Mongodb等等)的 ...
- Docker最全教程——数据库容器化(十一)
终于按时完成第二篇.本来准备着手讲一些实践,但是数据库部分没有讲到,部分实践会存在一些问题,于是就有了此篇以及后续--数据库容器化.本篇将从SQL Server容器化实践开始,并逐步讲解其他数据库的容 ...
- docker 虚拟机搭建mongodb一主一从一复制_Docker最全教程——MongoDB容器化(十三)...
上一节我们讲述了数据库容器化之持久保存数据,本节将讲诉MongoDB容器化实践,并且接下来将逐步讲解其他数据库(MySql.Redis等等)的容器化实践,然后将讲诉一些分布式架构的项目实践.由于实践需 ...
- Docker最全教程之使用 Visual Studio Code玩转Docker(二十一)
VS Code是一个年轻的编辑器,但是确实是非常犀利.通过本篇,老司机带你使用VS Code玩转Docker--相信阅读本篇之后,无论是初学者还是老手,都可以非常方便的玩转Docker了!所谓是&qu ...
- Docker最全教程之使用.NET Core推送钉钉消息(二十)
前言 上一篇我们通过实战分享了使用Go推送钉钉消息,由于技痒,笔者现在也编写了一个.NET Core的Demo,作为简单的对照和说明. 最后,由于精力有限,笔者希望有兴趣的朋友可以分享下使用CoreR ...
- Docker最全教程之使用TeamCity来完成内部CI、CD流程(十七)
本篇教程主要讲解基于容器服务搭建TeamCity服务,并且完成内部项目的CI流程配置.教程中也分享了一个简单的CI.CD流程,仅作探讨.不过由于篇幅有限,完整的DevOps,我们后续独立探讨. 为了降 ...
- Docker最全教程之树莓派和Docker(十六)
前言 树莓派(Raspberry Pi)是一台卡片电脑(只有信用卡大小),我们可以使用树莓派做很多事情,比如智能家居的中控.航空器.BT下载器.挖矿机.智能机器人.小型服务器(花生壳+网站)等等. 目 ...
最新文章
- Windows 64位下为wampserver或phpstudy安装Redis扩展
- 「PKUWC2018」随机游走
- 3班的第二次模拟面试
- 清华来了第二位菲尔兹奖得主,是丘成桐力荐的老朋友Caucher Birkar
- 基于python的表情识别_python 实现表情识别
- 视觉SLAM笔记(32) 2D-2D: 对极几何
- [转载] Python开发系列课程(16) - 进程和线程
- MFC之添加PNG,JPG图片
- ipmitool查看内存信息_小技巧:Win7系统中查看电脑内存频率多少的方法
- php粉层,thinkphp 模型分层
- SD与SE的关系,以及异常值
- C语言程序设计 基础知识点
- 洛谷:P1330 封锁阳光大学(二分图染色 + 最小同色点覆盖)
- [OpenGL] L系统 分形树的实现(L-System植物建模)
- 右键打开git bash 找不到应用程序
- React---什么是受控组件、非受控组件
- Mysql出现问题:ERROR 1062 (23000): Duplicate entry ‘‘ for key ‘PRIMARY‘解决方案
- 上联:男足输完日本,输越南
下联:女足赢完越南,赢日本
横批:公仇母报
- 华为mate40计算机,华为Mate40兼容欧米多手机电脑,秒变笔电轻办公
- 头部 CT 图像三维重建
热门文章
- SQL时间格式转换CONVERT_GETDATE()
- vs05b2中给dataset添加表间关系
- 数据科学家技能地铁图
- 机器学习算法小结与收割offer遇到的问题
- sklearn 随机分割数据_sklearn.ensemble.RandomForestClassifier 随机深林参数详解
- html实现静态下来菜单js,JS代码实现静态导航菜单效果要用何主要代码?
- union和union all有什么区别_什么是Python Wheels?为什么要关心它?
- 在python中、列表中的元素可以是_在Python中存储一个列表的元素,在另一个列表中 – 通过引用?...
- linux的du和df命令,du和df命令都是Linux系统的重要工具
- php实现单选和多选功能,input:checkbox多选框实现单选效果跟radio一样