Redis初探与.net core2.0控制台调度程序

一、项目背景:

A地和B地各有一台服务器,B地有几万条数据要定时传过来,通过对象集合序列化和反序列化到A地的数据库太慢了,就引入了redis。因为B地的服务器IP不固定,所以也不适合使用api。流程如下:

二、Redis

1、安装

操作系统:centos 7,文件传输用Xshell 6这里不做赘述

1、下载安装包:

wgethttp://download.redis.io/releases/redis-4.0.6.tar.gz

如果提示wget command not found那么执行命令:yum -y install wget

2、解压:

tar -zxvf redis-4.0.6.tar.gz

(因为没注意到路径,文件放在了/root目录下,之后没有做修改)

3、yum安装gcc依赖

Yum install gcc

4、跳转到redis解压目录下

cd ./redis-4.0.6

5、编译安装

make MALLOC=libc

转到解压目录的src文件夹下并执行安装

cd ./src && make install

执行安装之后,会在/usr/local/bin目录下生成以下文件:

6、测试是否安装成功

在src目录下执行./redis-server

redis安装成功。但是这种启动方式需要一直打开窗口,我们把redis配置为后台启动。按ctrl+c关闭窗口。

redis.conf中

daemonize设置yes或者no区别

daemonize:yes:redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。

daemonize:no:当daemonize选项设置成no时,当前界面将进入redis的命令行界面,exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。

-------------------------------------------------------------------------------

7、修改redis.conf文件

在/root/redis-4.0.6目录下找到redis.conf

将daemonize no修改为daemonize yes

8、指定redis.conf文件启动

./redis-server /root/redis-4.0.6/redis.conf

9、查看redis进程

ps -aux|grep redis

杀死进程

Kill -9 2400

10、设置开机启动

1)在/etc目录下新建redis目录

将/root/redis-4.0.6/redis.conf复制一份到/etc/redis目录下,并且将文件命名为6379.conf

2)将redis的启动脚本复制一份放到/etc/init.d目录下

cp /root/redis-4.0.6/utils/redis_init_script /etc/init.d/redisd

3)切换到/etc/init.d目录下

在redisd文件中添加如下两行

# chkconfig: 2345 90 10

# description: Redis is a persistent key-value database

执行命令:chkconfig redisd on

4)启动

service redisd start

出现这种问题的话执行如下操作:

redis-server /etc/redis/6379.conf

在/var/run下面会生成如下文件

5)关闭

service redisd stop

现在可以开机启动了

2、Redis开启远程访问

防火墙开放6379端口

firewall-cmd --zone=public --add-port=6379/tcp --permanent

修改/etc/redis/6379.conf

找到bind 127.0.0.1并注释掉

将protected-mode yes改成protected-mode no

重启后,用redis desktop manager测试一下

3、卸载Redis

1、停止Redis服务

查看redis服务是否正在运行:

Ps aux|grep redis

停止服务:

redis-cli shutdown

2、删除/usr/local/bin下面的几个redis-.....文件,这是在make的时候生成的文件。

3、删除解压后的文件目录和所有文件。

三、发送数据到redis

我们使用VS 2017编辑器,.net core 2.0以上的版本,这里因为需求顺便把调度程序也一并写下,关于调度的具体介绍,可以参考https://www.cnblogs.com/miskis/p/8487634.html。

新建一个控制台程序

NuGet添加Quartz中间件

添加ServiceStack.Redis中间件

测试数据表如下:

为了以后数据库迁移方便,数据库名、表名、字段名建议使用小写

往里边插个15万条数据

declare @num int

set @num = 150000

while @num>0

begin

insert into person values('name',@num)

set @num = @num-1

End

应用程序文件结构如下

其中Config.xml文件如下:

SqlHelper读取配置文件如下:

为方便演示,直接在program.cs上定义了一个工作类,要实现IJob接口。

在Program.cs中定义了一个调度工作的方法

privatestaticasyncTask RunProgram()

{

try

{

vardirectory = System.IO.Directory.GetCurrentDirectory();

XDocument configXml = XDocument.Load(directory +"/Config.xml");

varsec = configXml.Descendants("intervalseconds")

.Select(p => p.Attribute("val").Value)

.FirstOrDefault();

stringsecStr = Convert.ToString(sec);

intsecInt = Convert.ToInt32(secStr);

NameValueCollection props =newNameValueCollection

{

};

StdSchedulerFactory factory =newStdSchedulerFactory(props);

IScheduler scheduler =awaitfactory.GetScheduler();

// 启动任务调度器

awaitscheduler.Start();

// 定义一个 Job

IJobDetail job = JobBuilder.Create()

.WithIdentity("job1","group1")

.Build();

ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()

.WithIdentity("trigger1")// 给任务一个名字

.StartAt(DateTime.Now)// 设置任务开始时间

.ForJob("job1","group1")//给任务指定一个分组

.WithSimpleSchedule(x => x

.WithIntervalInSeconds(secInt)// .WithIntervalInHours //.WithIntervalInMinutes

.RepeatForever())

.Build();

// 等待执行任务

awaitscheduler.ScheduleJob(job, trigger);

}

catch(SchedulerException se)

{

awaitConsole.Error.WriteLineAsync(se.ToString());

}

}

最后执行的Main函数如下:

发布成文件:

直接发布会发现自己写的配置文件Config.xml没有发布出来

右键Config.xml,点击属性

在“复制到输出目录”一栏选择“始终复制”

点击确定,再发布就ok了。

然后用cmd测试一下

程序运行ok~

按ctrl+c可退出

之后这程序可以放到Linux上用supervisor进行托管,这样就不用一直开着窗口了。

四、从Redis读取数据

程序中同样要引入中间件ServiceStack.Redis

示例代码:

varredisManger =newRedisManagerPool("127.0.0.1:6379");

varclient = redisManger.GetClient();

List

getList = client.Get

>("personList");//personList是redis存放时的键

示例代码:

链接:https://pan.baidu.com/s/1xIs5Ebm1rWBQzq_2KR6lBw 密码:4zft

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180626G0G2S800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励