Windows 环境下载、安装、使用(.Net 5.0) Redis 数据库及常见问题的解决
〇、前言
Redis (Remote Dictionary Server 远程字典服务)是一个使用 ANSI C 编写的开源、包含多种数据结构,支持网络、基于内存、可选持久性的键值对存储数据库,是现在最受欢迎的NoSQL数据库之一。
ANSI C 是由美国国家标准协会(ANSI)及国际标准化组织(ISO)推出的关于C语言的标准。ANSI C 主要标准化了现存的实现,同时增加了一些来自 C++ 的内容(主要是函数原型),并支持多国字符集(包括备受争议的三字符序列)。ANSI C 标准同时规定了 C 运行期库例程的标准。
主要应用场景包括:缓存系统(“热点”数据:高频读、低频写)、计数器、消息队列系统、排行榜、社交网络和实时系统。
一、Redis 的下载安装
1. 下载安装包
本文是介绍 Windows 平台,可以选择直接下载 Redis-x64-3.0.504.zip。

2. 配置文件修改
下载的安装包解压后,在文件中找到配置文件:redis.windows.conf,进行编辑。
(若不修改配置文件直接启动服务,则数据库可在任意服务器通过当前服务器的 IP 和 端口 6379 进行访问,安全性较差)
下边列出常用的几个配置:
# 指定 redis 只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求
bind 127.0.0.1
# redis监听的端口号
port 6379
# 数据库的数量,默认使用的数据库是0。可以通过”SELECT 【数据库序号】“命令选择一个数据库,序号从0开始
databases 16
# requirepass 配置可以让用户使用 AUTH 命令来认证密码
# 使用 requirepass 的时候需要注意,因为 redis 太快了,每秒可以认证 15w 次密码
# 简单的密码很容易被攻破,所以最好使用一个更复杂的密码
requirepass passwordmyself_
详细配置可参考:redis配置文件中常用配置详解
3. 启动 Redis 服务
1/4 若不需要配置密码,就可以直接双击 redis-server.exe,启动 Redis 服务,然后用 RedisDesktopManager 客户端测试连接。如下图:
(亦可通过 cmd 命令行启动,通过 cd 进入 Redis 文件夹,输入命令:redis-server.exe 回车即可)
2/4 若修改了 redis.windows.conf 配置文件,就需要启动服务时加上配置文件名,不然配置项不起效。
cmd 命令行输入 redis-server.exe redis.windows.conf 回车。
3/4 将 Redis 添加为系统服务,建议手动修改为自动启动。
cmd 命令行输入 redis-server --service-install redis.windows.conf 回车。
启动服务:redis-server --service-start
停止服务:redis-server --service-stop
删除服务:sc delete servicename
4/4 验证服务
切换到 redis 目录下:redis-cli.exe -h 127.0.0.1 -p 6379
若能如图成功进入 Redis 数据库,就证明数据库可用。

二、.Net 5.0 环境下使用 Redis 数据库生成序列号
本文通过引用 ServiceStack.Redis.dll 来完成程序与数据库的交互。假设要应用到业务环境中,我们选择版本 v3.9.71。
1. 安装需要引用的动态库
相关的动态库共包括三个:ServiceStack.Redis.dll、ServiceStack.Common.dll、ServiceStack.Text.dll。版本都选择 v3.9.71。

2. 关于 Redis 的程序语言
首先我们可以采用方法 IncrementValue(string key) 生成序号,当 key 值不存在时,Redis 会自动创建,并返回 1,后续每调用一次就 +1。
long xuhao = redisClient0.IncrementValue("xuhaolie");

但是取到序号后,我们会做一系列操作,如果执行操作过程中出现异常,那么生成的序号也就被占用了。
当并发量不大,同时也不想被占用,可以通过新增一个 key-value 的方式,每次操作前取出 value ,操作成功后再将序号 +1 存入。如下例子:
string redishost = configurationRoot["OrderingPara:redishost"];
string redisport = configurationRoot["OrderingPara:redisport"];
string redispass = configurationRoot["OrderingPara:redispass"];
string shunxuhao = string.Empty, hashId = string.Empty;
// 数字代表,实例 redisClient 对应的数据库,默认有 16 个,序号从 0~15
using (RedisClient redisClient = new RedisClient(redishost, redisport, redispass, 0))
{
// GetValuesFromHash:根据 hashId 和 key 取 value
var xuhaolist = redisClient.GetValuesFromHash(hashId, "shunxuhao");
// public List<string> GetValuesFromHash(string hashId, params string[] keys);
if (xuhaolist.Count == 1 && xuhaolist[0]==null)// 未查到 key 为“shunxuhao”的键值对
{
using (RedisClient redisClient1 = new RedisClient(redishost, Convert.ToInt32(redisport), redispass, 1))
{
redisClient1.FlushDb();// 根据业务需要,仅清空 db(1),其他数据库不影响
}
redisClient.SetEntryInHash(hashId, "shunxuhao", "1");// 新增 key 为“shunxuhao”,值为“1”的键值对
xuhaolist = redisClient.GetValuesFromHash(hashId, "shunxuhao");// 新增数据后再查询确认
}
if (xuhaolist.Count == 1 && xuhaolist[0] != null)
{
shunxuh = xuhaolist[0];
}
else
return new Info { code = 1, message = "失败" };
}
// 其他业务操作。。。省略
//顺序号 +1 后,再存入
shunxuh = (Convert.ToInt32(shunxuh)+1).ToString();
using (RedisClient redisClient = new RedisClient(redishost, redisport, redispass, 0))
{
redisClient.SetEntryInHash(hashId, "shunxuhao", shunxuh);
}
string 数据操作举例:
// 新增 key 为“shunxuhao”,值为“1”的键值对
redisClient.SetEntryInHash(hashId, "shunxuhao", "1");
// 获取一个 hash 队列的全部值
var oparajsonlist = redisClient.GetHashValues(hashId);
// 根据 hashId 和 key 取 value
var xuhaolist = redisClient.GetValuesFromHash(hashId, "shunxuhao");
// 删除指定的键值
redisClient.RemoveEntryFromHash(hashId, orderinfo.ID);
// 仅清空 db(0)(某一个数据库),其他数据库不影响
redisClient0.FlushDb();
// 清空全部 db, 慎用!
//redisClient0.FlushAll();
更多数据类型的使用,详见命名空间:ServiceStack.Redis。(引用后可在 VS 中查看)
三、常见问题及解决
1. 6000次/h 调用限制
报错条件:当项目中引用的 ServiceStack.Redis.dll 版本在 v4 及以上,且业务操作比较复杂,就有可能出现如下报错内容:
The free-quota limit on ‘6000 Redis requests per hour‘ has been reached. Please see https://servicestack.net to upgrade to a commercial license.
原因:因为 ServiceStack.Redis.dll 这个官方 Redis 访问组件从 4.0 版本后开始商业化了,添加了调用频率的限制。
解决:如本文第二部分介绍的,将版本降至 v3.9.71,并另外添加两个动态库的引用(ServiceStack.Common.dll、ServiceStack.Text.dll)即可。
当然不同版本的写法也有区别,如下:
// 新版写法 v4 及以后
var redisEndpoint = new RedisEndpoint { Host = "", Password = "", Port = Convert.ToInt32("3679"), Db = 0 };
using (RedisClient redisClient = new RedisClient(redisEndpoint))
{
var strlist = redisClient.GetHashValues("hashId");//新老版本语法相同
}
// 旧版写法 v4 之前
using (RedisClient redisClient = new RedisClient("redishost", Convert.ToInt32("redisport"), "redispass", 0))
{
var strlist = redisClient.GetHashValues("hashId");//新老版本语法相同
}
注:后续遇到其他问题再来,有问题欢迎大家指正或补充。
Windows 环境下载、安装、使用(.Net 5.0) Redis 数据库及常见问题的解决的更多相关文章
- Windows 7下载安装 Visual C++ 6.0(VC6) 全程图解
说实话我也一直没有试过,所以也想当然的认为Win7下就不能安装VC6,压根就100%不兼容?一直使用高版本的VS(如VS2008和现在用的VS2010)的我今天亲身在Win7下安装一次试试. 注:文中 ...
- numpy windows环境下载安装
由于numpy在多个平台下非常流行,以至于习惯WINDOWS环境下的用户可能找不到下载位置,更多的时候会下载到zip文件,然后需要安装编译(自然通不过) 1.http://www.scipy.org/ ...
- Win10环境下载安装MySQL Community 8.0.12
1.下载MySQL Community 8.0.12的免安装版,下载地址:https://dev.mysql.com/downloads/mysql/ 2.解压到D:\Program Files\My ...
- Nginx——在Windows环境下安装
下载 Nginx是开源软件,用户可以访问 http://nginx.org/ 网站获取源码包或Windows二进制文件下载.其中1.13.x版本为开发版本,1.12.0版本为稳定版本.开发版本分支会较 ...
- 在windows环境下安装redis和phpredis的扩展
在windows环境下安装redis和phpredis的扩展 1.首先配置php: 需要在windows的集成环境中找到php的扩展文件夹,ext,然后在网上寻找自己的php对应的.dll文件 比如说 ...
- windows环境下安装yaf框架
windows环境下安装yaf框架 在windows下安装yaf框架 准备工作: php环境(过程略,wamp,xampp,phpstudy都行,php版本大于5.3) git工具(需要从github ...
- ElasticHD Windows环境下安装
ElasticHD Linux环境下安装教程 ElasticHD windows环境下安装教程 习惯了T-SQL 查询,Elasticsearch的DSL查询语法简直就是反人类呀,一 ...
- Nginx——在Windows环境下安装(一)
下载 Nginx是开源软件,用户可以访问 http://nginx.org/ 网站获取源码包或Windows二进制文件下载.其中1.13.x版本为开发版本,1.12.0版本为稳定版本.开发版本分支会较 ...
- JavaWeb入门——在Windows环境下安装Tomcat服务器
JavaWeb入门——在Windows环境下安装Tomcat服务器 摘要:本文主要学习如何在Windows环境中下载并安装Tomcat服务器. 下载 获取安装包 推荐去官网上下载Tomcat: htt ...
- 从零开始Windows环境下安装python+tensorflow
从零开始Windows环境下安装python+tensorflow 2017年07月12日 02:30:47 qq_16257817 阅读数:29173 标签: windowspython机器学习te ...
随机推荐
- P1014 [NOIP1999 普及组] Cantor 表
题目链接:https://www.luogu.com.cn/problem/P1014 有理数可枚举 In 1873 Cantor proved the rational numbers counta ...
- 2023-02-18:ffmpeg是c编写的音视频编解码库,请问用go语言如何调用?例子是03输出版本号。
2023-02-18:ffmpeg是c编写的音视频编解码库,请问用go语言如何调用?例子是03输出版本号. 答案2023-02-18: 用 github.com/moonfdd/ffmpeg-go 这 ...
- 2021-08-29:N * M的棋盘(N和M是输入参数),每种颜色的格子数必须相同的,上下左右的格子算相邻,相邻格子染的颜色必须不同,所有格子必须染色,返回至少多少种颜色可以完成任务。 福大大 答
2021-08-29:N * M的棋盘(N和M是输入参数),每种颜色的格子数必须相同的,上下左右的格子算相邻,相邻格子染的颜色必须不同,所有格子必须染色,返回至少多少种颜色可以完成任务. 福大大 答案 ...
- .NET 通过源码深究依赖注入原理
依赖注入 (DI) 是.NET中一个非常重要的软件设计模式,它可以帮助我们更好地管理和组织组件,提高代码的可读性,扩展性和可测试性.在日常工作中,我们一定遇见过这些问题或者疑惑. Singleton服 ...
- 使用taro+canvas实现微信小程序的图片分享功能
业务场景 二轮充电业务中,用户充电完成后在订单详情页展示订单相关信息,用户点击分享按钮唤起微信小程序分享菜单,将生成的图片海报分享给微信好友或者下载到本地,好友可通过扫描海报中的二维码加群领取优惠. ...
- 在Winform中一分钟入门使用好看性能还好的Blazor Hybrid
在Winform中一分钟入门使用好看性能还好的Blazor Hybrid 安装模板 dotnet new install Masa.Template::1.0.0-rc.2 创建 Winform的Bl ...
- nodejs使用eggjs创建项目,接入influxdb完成单表增删改查
转载请注明出处: 1.Eggjs 特性: Eggjs 是 Node.js 服务端应用开发框架,它提供了一套约定,使开发者能够快速搭建.开发和部署应用.以下是 Egg.js 的一些特性和作用: 框架内置 ...
- 图解三代测序(SMRT Sequencing)
目前主流三代测序平台除了Oxford 家的 Nanopore,还有 Pacific Biosciences(简称 PacBio)公司的 Single Molecule Real-Time(SMRT)S ...
- 拒绝conda, 用virtualenv构建多版本的python开发环境
本文章转载自公众号 "生信码农笔记(ID:bio-coder)",已获得原作者授权. 1. 不喜欢用 conda 特别不喜欢 bioconda, miniconda, Anacon ...
- 文档在线预览(四)将word、txt、ppt、excel、图片转成pdf来实现在线预览
@ 目录 事前准备 1.需要的maven依赖 2.后面用到的工具类代码: 一.word文件转pdf文件(支持doc.docx) 二.txt文件转pdf文件 三.PPT文件转pdf文件(支持ppt.pp ...