Redis in .NET Core 入门:(1) 安装和主要功能简介

Redis(https://redis.io/), 是一个内存中的数据结构存储系统,它能够用做数据库、缓存和消息中间件。git

 

安装Redis

我不多在开发机中直接装各类数据库,我通常使用Docker,针对Redis也不例外,我仍是使用Docker。github

这是Redis在DockerHub里的地址:https://hub.docker.com/_/redis,里面有文档。redis

启动docker,下载redis镜像:docker pull redisdocker

 

而后运行镜像并发布端口6379:数据库

 

而后运行redis-cli(这是Redis的一个命令行管理工具):缓存

 

进入redis-cli以后,咱们能够设置一个key-value来试试:bash

当你输入的时候,它是有提示的。服务器

经过get key(key为name),能够得到其对应的值。网络

 

准备.NET Core项目

创建一个.NET Core 控制台项目,并安装Redis的.NET Core客户端。数据结构

Redis有不少C#的客户端,这里有个列表:https://redis.io/clients#c

我这使用的是 StackExchange.Redis (https://stackexchange.github.io/StackExchange.Redis/)。

安装StackExchange.Redis

 

使用StackExchange.Redis

ConnectionMultiplexer已经实现了IDisposable接口,之因此没有使用using表达式,是由于该对象应该重复利用的,具体请看文档。

我以前经过redis-cli设置了key为name的值,这里我经过name这个key把相对应的值找出来,并打印在控制台:

若是所示,链接上了数据库,并把值输出到了控制台,OK。

使用C#写入值

这个也没什么特别的,看代码:

 

运行结果:

 

Redis 的数据类型

Redis的主要数据类型有这些:

  • Key:就是key的意思。。。。
  • String:字符串
  • List:有序字符串的集合
  • Hashes:有点像对象,里面能够有若干个字段,字段都有本身的值,字段和值都是字符串类型的。
  • Set:无序惟一字符串的集合
  • Sorted-Set:跟Set很像,可是每个字符串元素都对应一个浮点数值,该数值叫作分数。它里面的元素一般是按照分数来排序的。

 

Redis 如何持久化

一共有两种方式:

  • AOF(Append-only file)
  • RDB(Redis database file)

首先须要知道Redis的操做都是在内存中完成的,由于这样速度快。

AOF

而后你能够启用AOF,它会把每一个操做都记录到系统文件里。因此若是Redis服务器重启了,它会根据AOF这个文件来重建整个数据集。

这个文件会很快就变得很大,可是Redis很聪明,它会使用里面最新版本的数据,并压缩文件到可控大小。

RDB

RDB是Redis的默认模式,它有点像数据库的快照,建立一些时间点的数据,若是发生灾难,你能够从这些数据里进行恢复。

当达到一些条件的时候,例如数据集里面在某段时间内新添加了必定条目的数据,Redis就会把数据作个快照,并写入一个RDB文件。

 

最佳实践是二者都用,使用AOF由于其速度和可用性,使用RDB作灾难恢复。

 

Redis的配置文件

https://raw.githubusercontent.com/antirez/redis/4.0/redis.conf 这是Redis 4.0 的一个标准配置文件。

RDB 快照相关

先看快照部分,也就是和RDB有关的部分:

里面的save 900 1.。。。这部分是指,900秒事后,若是至少1个key改变了,那么就作一个快照。

下面的就是300秒事后,若是10个key改变了,那就作一个快照。。。

这些就是进行快照动做的触发条件。

 

AOF相关

AOF模式默认是不开启的,也就是no。若是想开启,那就改为yes便可。

 

使用自定义配置运行Redis容器

RDB & AOF

把上述文件下载到本地,进行修改:

我添加了一个RDB的条件,5秒内1个Key被修改就会触发快照动做。

 

而后我启用了AOF:

 

首先把以前的容器删除吧,而后再创建一个。

此次创建docker容器的时候须要使用volume:

说明一下:

-v这部分是指volume,redis.conf在我电脑里的位置是:D:\Projects\Redis\redis.conf,因此我把该位文件的位置挂载到了容器里的/usr/local/etc/redis/redis.conf这个地方。

而后运行redis这个镜像,同时运行里面的redis-server,而redis-server的配置文件就是/usr/local/etc/redis/redis.conf。

 

如今这个redis-server运行起来了。

 

再打开一个redis-cli,仍是使用容器:

 

而后我设置一个key的值:

这时就达到了RDB的最后一个条件,因此触发了快照动做。

我就再也不实验了。。。

 

我再打开一下redis容器的bash,而后看一下aof文件是否生成:

能够看到每次操做后aof文件都会更新(里面能够认为就是事务的log)。

 

Master-Slave Replication 主从复制

简单讲一下Redis的主从复制,首先把以前的容器都删掉。。。

而后咱们先创建docker 网络:

 

而后建立redis master的容器,不过首先修改一下redis.conf里的bind地址,原来是127.0.0.1,改成 bind 0.0.0.0:

这样的话其它的ip地址也能够链接过来了。

 

而后建立master容器:

注意里面使用了以前建立的桥接网络。

 

检查一下redis-net这个网络:

能够看到该网络里有一个容器master-redis,其ip为172.20.0.2。

 

而后把redis.conf再复制一份,名字为redis2.conf。

在redis2.conf的Replication部分里,把下面这部分取消注释,并修改成:

注意这个ip地址和master-redis的ip要同样。

 

如今咱们能够运行这个redis的slave容器了:

 

而后咱们能够看到主从复制成功了:

 

打开master的redis-cli:

 

操做一些操做,能够看到master和slave都几乎同步的作了一些动做,也就是主从复制:

 

设置密码

把以前的容器都清理掉。。。

主从复制的master一般须要设置密码,修改redis.conf文件,找到requirepass这部分,取消注释并设置密码:

 

在slave的redis2.conf里,找到masterauth这部分,填写master的密码:

首先我填写一个错误的密码。

而后运行两个容器,看看什么效果:

能够看到提示密码不正确,没法进行复制。

 

而后删掉slave容器,再把redis2.conf的密码修正一下: 

 

而后再运行slave容器:

此次能够看到链接成功了。

 

其它的配置方式

redis-server的命令行参数

如上图,这就对port和replicaof进行配置,而没有使用redis2.conf(因此该命令前面的-v部分也是没有什么做用的)。

 

CONFIG SET

前面咱们使用了自定义的配置文件来运行Redis,可是这样的话须要重启Redis Server。

而若是使用CONFIG SET(https://redis.io/commands/config-set)的话,那就不须要重启redis server直接就能够修改配置,可是这样作不会修改redis.conf等配置文件的。

 

首先须要使用redis-cli,而后进行配置便可,例如:

这就是添加了一个快照的设置:每20秒若是有两个变化就作一个快照。

相关文章
相关标签/搜索