〇、前言

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. Protobuf编码规则

    支持类型 该表显示了在 .proto 文件中指定的类型,以及自动生成的类中的相应类型: .proto Type Notes C++ Type Java/Kotlin Type[1] Java/Kotl ...

  2. 【Python基础】集合的基本使用

    Python中的集合是一种无序且唯一的数据结构.集合是通过花括号{}或者set()函数来创建的. 创建集合 s = set() 声明空集合 s = {1,2,3,4,5} 声明非空集合 添加元素 s. ...

  3. 2022-11-07:给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边。 图用一个大小为 n 下标从 0 开始的数组 edges 表示, 节点 i 到

    2022-11-07:给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边. 图用一个大小为 n 下标从 0 开始的数组 edges 表示, 节点 i 到 ...

  4. 2022-08-16:绳子总长度为M, 100 -> M, (6, 100) (7,23) (10,34) -> arr, 每一个长度的绳子对应一个价格,比如(6, 10)表示剪成长度为6的绳子,对应

    2022-08-16:绳子总长度为M, 100 -> M, (6, 100) (7,23) (10,34) -> arr, 每一个长度的绳子对应一个价格,比如(6, 10)表示剪成长度为6 ...

  5. 2022-06-25:给定一个正数n, 表示有0~n-1号任务, 给定一个长度为n的数组time,time[i]表示i号任务做完的时间, 给定一个二维数组matrix, matrix[j] = {a,

    2022-06-25:给定一个正数n, 表示有0~n-1号任务, 给定一个长度为n的数组time,time[i]表示i号任务做完的时间, 给定一个二维数组matrix, matrix[j] = {a, ...

  6. 2022-04-03:k8s安装srs,yaml如何写?

    2022-04-03:k8s安装srs,yaml如何写? 答案2022-04-03: yaml如下: apiVersion: apps/v1 kind: Deployment metadata: la ...

  7. C语言之环形队列

    一.环形队列的优势 环形队列是一种特殊的队列,它可以解决普通队列在使用时空间利用不充分的问题.在环形队列中,当队列满时,队列的尾指针指向队列的起始位置,而不是指向队列的最后一个元素.这样可以在不浪费空 ...

  8. WSGI实现一个WEB服务

  9. 如何将jq动画做出高帧的感觉?(丝滑顺畅)

    前言 我最近在一点一点研究我 博客园 的前端代码,算是边敲边学吧,还算是挺有意思的. 是这样的,之前见过一个效果,就是先显示博客的背景,然后博客主界面缓缓的上升到正确位置,于是乎,干他!开撸代码! 各 ...

  10. C#里的var和dynamic区别到底是什么,你真的搞懂了嘛

    前言 这个var和dynamic都是不确定的初始化类型,但是这两个本质上的不同.不同在哪儿呢?var编译阶段确定类型,dynamic运行时阶段确定类型.这种说法对不对呢?本篇看下 概括 以下详细叙述下 ...