〇、前言

Redis (Remote Dictionary Server 远程字典服务)是一个使用 ANSI C 编写的开源、包含多种数据结构,支持网络、基于内存、可选持久性的键值对存储数据库,是现在最受欢迎的NoSQL数据库之一。

ANSI C 是由美国国家标准协会(ANSI)及国际标准化组织(ISO)推出的关于C语言的标准。ANSI C 主要标准化了现存的实现,同时增加了一些来自 C++ 的内容(主要是函数原型),并支持多国字符集(包括备受争议的三字符序列)。ANSI C 标准同时规定了 C 运行期库例程的标准。

主要应用场景包括:缓存系统(“热点”数据:高频读、低频写)、计数器、消息队列系统、排行榜、社交网络和实时系统

一、Redis 的下载安装

1. 下载安装包

  github 地址 点击跳转

  本文是介绍 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 数据库及常见问题的解决的更多相关文章

  1. Windows 7下载安装 Visual C++ 6.0(VC6) 全程图解

    说实话我也一直没有试过,所以也想当然的认为Win7下就不能安装VC6,压根就100%不兼容?一直使用高版本的VS(如VS2008和现在用的VS2010)的我今天亲身在Win7下安装一次试试. 注:文中 ...

  2. numpy windows环境下载安装

    由于numpy在多个平台下非常流行,以至于习惯WINDOWS环境下的用户可能找不到下载位置,更多的时候会下载到zip文件,然后需要安装编译(自然通不过) 1.http://www.scipy.org/ ...

  3. Win10环境下载安装MySQL Community 8.0.12

    1.下载MySQL Community 8.0.12的免安装版,下载地址:https://dev.mysql.com/downloads/mysql/ 2.解压到D:\Program Files\My ...

  4. Nginx——在Windows环境下安装

    下载 Nginx是开源软件,用户可以访问 http://nginx.org/ 网站获取源码包或Windows二进制文件下载.其中1.13.x版本为开发版本,1.12.0版本为稳定版本.开发版本分支会较 ...

  5. 在windows环境下安装redis和phpredis的扩展

    在windows环境下安装redis和phpredis的扩展 1.首先配置php: 需要在windows的集成环境中找到php的扩展文件夹,ext,然后在网上寻找自己的php对应的.dll文件 比如说 ...

  6. windows环境下安装yaf框架

    windows环境下安装yaf框架 在windows下安装yaf框架 准备工作: php环境(过程略,wamp,xampp,phpstudy都行,php版本大于5.3) git工具(需要从github ...

  7. ElasticHD Windows环境下安装

    ElasticHD Linux环境下安装教程        ElasticHD windows环境下安装教程   习惯了T-SQL 查询,Elasticsearch的DSL查询语法简直就是反人类呀,一 ...

  8. Nginx——在Windows环境下安装(一)

    下载 Nginx是开源软件,用户可以访问 http://nginx.org/ 网站获取源码包或Windows二进制文件下载.其中1.13.x版本为开发版本,1.12.0版本为稳定版本.开发版本分支会较 ...

  9. JavaWeb入门——在Windows环境下安装Tomcat服务器

    JavaWeb入门——在Windows环境下安装Tomcat服务器 摘要:本文主要学习如何在Windows环境中下载并安装Tomcat服务器. 下载 获取安装包 推荐去官网上下载Tomcat: htt ...

  10. 从零开始Windows环境下安装python+tensorflow

    从零开始Windows环境下安装python+tensorflow 2017年07月12日 02:30:47 qq_16257817 阅读数:29173 标签: windowspython机器学习te ...

随机推荐

  1. 下载与安装Node.js

    下载与安装Node.js 1.下载安装包 Node.js 官方网站下载:https://nodejs.org/en/ 2.安装 这边安装就直接next 安装好后它会自动配置好环境变量 这是我们来到命令 ...

  2. Python爬取微信小程序实战(通用)

    背景介绍 最近遇到一个需求,大致就是要获取某个小程序上的数据.心想小程序本质上就是移动端加壳的浏览器,所以想到用Python去获取数据.在网上学习了一下如何实现后,记录一下我的实现过程以及所踩过的小坑 ...

  3. Java网络编程----通过实现简易聊天工具来聊聊NIO

    前文我们说过了BIO,今天我们聊聊NIO.NIO 是什么?NIO官方解释它为New lO,由于其特性我们也称之为,Non-Blocking IO.这是jdk1.4之后新增的一套IO标准.为什么要用NI ...

  4. 2023-05-25:给定一个正整数 x,我们将会写出一个形如 x (op1) x (op2) x (op3) x ... 的表达式 其中每个运算符 op1,op2,… 可以是加、减、乘、除之一 例如

    2023-05-25:给定一个正整数 x,我们将会写出一个形如 x (op1) x (op2) x (op3) x ... 的表达式 其中每个运算符 op1,op2,- 可以是加.减.乘.除之一 例如 ...

  5. 图解VirtualBox安装CentOS 7

    VirtualBox简介 VirtualBox是由德国InnoTek软件公司出品的虚拟机软件,现在则由甲骨文公司进行开发,是甲骨文公司xVM虚拟化平台技术的一部分. VirtualBox提供用户在32 ...

  6. OSI7层模型和TCP/IP模型

    前言 在计算机网络领域中,OSI7层模型和TCP/IP模型是两个重要的概念.本文将对这两个模型进行介绍和比较,让大家了解它们的区别和联系. 目录 前言 OSI7层模型 TCP/IP模型 OSI7层模型 ...

  7. 阿里云ASK试用心得(避坑贴)

    前言 常年BP阿里云的各种服务,今天却被阿里云给上了一课,这一套组合拳把我安排的明明白白,血亏50大洋,算是提前为各位大佬排坑了,预祝大家中秋快乐 目的 最近阿里云首页放出了免费试用的活动,本着不用白 ...

  8. 反转链表 Java版 图文并茂思路分析带答案(力扣第206题)

    反转链表 力扣第206题 我们不只是简单的学习(背诵)一个数据结构,而是要分析他的思路,以及为什么要有不同的指针等等 非递归方式: 思路分析:首先要链表有个头指针没有任何问题 然后,我们要将1的下一个 ...

  9. 非常简单好用实用的轮播图swiper banner组件

    非常简单好用实用的轮播图swiper banner组件; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12786 效果图如下: ...

  10. 容器基础-- namespace,Cgoup 和 UnionFS

    Namespace 什么是 Namespace ? 这里的 "namespace" 指的是 Linux namespace 技术,它是 Linux 内核实现的一种隔离方案.简而言之 ...