Redis Windows环境安装

1、下载Windows 版本 Redis:

    https://github.com/ServiceStack/redis-windows

 

2、 解压文件:

    F:\开源代码学习\01_Redis 打开 目录:F:\开源代码学习\01_Redis\src\msopentech\redis64-2.6.12.1

3、启动Redis

    指向CMD命令:

   

4、测试安装成果:

  新建一个CMD 窗口:

  运行命令:

    

 

 5、讲Redis 加工成 windows :

namespace RedisService
{/// <summary>/// 参考文档:/// http://www.saltwebsites.com/2012/how-run-redis-service-under-windows/// /// sc create Redis start= auto DisplayName= Redis binpath= "\"C:\Program Files\Redis\RedisService.exe\" \"C:\Program Files\Redis\redis.conf\""/// /// </summary>class Program : ServiceBase{const string RedisServer = "redis-server.exe";const string RedisCLI = "redis-cli.exe";static string _path;static int _port;static void Main(string[] args){_path = AppDomain.CurrentDomain.BaseDirectory;if (!File.Exists(Path.Combine(_path, RedisServer)))Exit("Couldn`t find " + RedisServer);if (!File.Exists(Path.Combine(_path, RedisCLI)))Exit("Couldn`t find " + RedisCLI);if (Environment.UserInteractive){SetConsoleCtrlHandler(ConsoleCtrlCheck, true);//Console.CancelKeyPress += (sender, eventArgs) => StopRedis();StartRedis(args.Length == 1 ? args[0] : null);}elseRun(new Program());}protected override void OnStart(string[] args){var arguments = Environment.GetCommandLineArgs();if (arguments.Length > 2)Exit("Too many arguments");base.OnStart(args);StartRedis(arguments.Length == 2 ? arguments[1] : null);}protected override void OnStop(){base.OnStop();StopRedis();}static void StartRedis(string configPath = null){var pi = new ProcessStartInfo(Path.Combine(_path, RedisServer));if (configPath != null){FindPort(configPath);// Workaround for spaces in configuration filename.pi.Arguments = Path.GetFileName(configPath);pi.WorkingDirectory = Path.GetDirectoryName(configPath);}using (var process = new Process { StartInfo = pi }){if (process.Start())if (Environment.UserInteractive)process.WaitForExit();else{}elseExit("Failed to start Redis process");}}private static void FindPort(string path){using (var reader = new StreamReader(path)){string line;while ((line = reader.ReadLine()) != null){if (line.IndexOf("port") == 0){_port = int.Parse(line.Substring(5, line.Length - 5));break;}}if (_port == 0)Exit("Couldn`t find Redis port in config file");}}static void StopRedis(){var pi = new ProcessStartInfo(Path.Combine(_path, RedisCLI)) { Arguments = (_port == 0 ? "" : String.Format("-p {0} ", _port)) + "shutdown" };if (!(new Process { StartInfo = pi }).Start())Exit("Failed to stop Redis process");}static void Exit(string message){if (Environment.UserInteractive){Console.WriteLine(message);Environment.Exit(-1);}else{//File.WriteAllText(Path.Combine(_path, "error.txt"), message);throw new ApplicationException(message);}}[DllImport("Kernel32")]private static extern bool SetConsoleCtrlHandler(HandlerRoutine handler, bool add);// A delegate type to be used as the handler routine // for SetConsoleCtrlHandler.private delegate bool HandlerRoutine(CtrlTypes ctrlType);// An enumerated type for the control messages// sent to the handler routine.private enum CtrlTypes{CTRL_C_EVENT = 0,CTRL_BREAK_EVENT,CTRL_CLOSE_EVENT,CTRL_LOGOFF_EVENT = 5,CTRL_SHUTDOWN_EVENT}private static bool ConsoleCtrlCheck(CtrlTypes ctrlType){StopRedis();return true;}}
}

 

     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hello Blazor:(11)全局截获事件执行

前言在Blazor中&#xff0c;我们使用on{DOM EVENT}"{DELEGATE}"这样的Razor语法在组件标记中指定委托事件处理程序&#xff1a;<button onclick"IncrementCount">Click me</button>但是没有提供解除委托的方法。比如&#xff0c;我们需要在某种…

深度学习会不会被取代?深度学习必看发展史

近年来&#xff0c;随着人工智能时代的来临&#xff0c;数据科学、计算机科学迎来飞速发展&#xff0c;多次引发讨论的人机对战也正是人工智能与人类的对决。从无人驾驶汽车到AlphaGo战胜人类&#xff0c;机器学习成为了当下最热门的技术。而机器学习中一种重要的方法就是深度学…

Xcode6中如何对scrollview进行自动布局(autolayout)

本文转载至 http://www.cocoachina.com/ios/20141011/9871.html XCodeAutolayoutscrollView Xcode6中极大的增强了IB中自动布局的能力&#xff0c;下面就通过对刺儿头scrollview进行一次自动布局实战&#xff0c;看看自动布局在Xcode6中到底值不值得使用。 说 UIScrollView是个…

linux文件读保护,Linux Rootkit实现文件保护

一个非常基础的rootkit&#xff0c;禁止读取指定文件编译系统:CentOS 7uname -r3.10.0-957.21.3-el7.x86_64#include #include #include asmlinkage long(*real_open)(const char __user *filename, int flags, unsigned short mode);unsigned long **syscall_table NULL;char…

python的网页解析器_python 之网页解析器

一、什么是网页解析器 1、网页解析器名词解释 首先让我们来了解下&#xff0c;什么是网页解析器&#xff0c;简单的说就是用来解析html网页的工具&#xff0c;准确的说&#xff1a;它是一个HTML网页信息提取工具&#xff0c;就是从html网页中解析提取出“我们需要的有价值的数据…

写一个聊天辅助程序

Codeprocedure TForm1.Button1Click(Sender: TObject);varhParent,hButton,hMemo: HWND;beginMemo1.SelectAll;//Memo内容全选Memo1.CopyToClipboard;//把Memo中选中的语句拷贝到剪贴板中try//找发送消息的QQ窗口hParent : FindWindow(nil, 发送消息);//然后找回话时用的编辑窗…

真是个狠人!开学第一天,这批小学生的造型刷爆朋友圈!

全世界只有3.14 % 的人关注了爆炸吧知识在史上最长的长假过后杭州一二三年级小学生回到学校忘记座位在哪里、老师姓什么各种有趣故事不断……而在养正小学门口&#xff0c;从入校门开始&#xff0c;大家笑声就不断&#xff0c;别样的开学礼一下刷屏了朋友圈&#xff1a;每个小朋…

C++中如何读取一个数的位数_C语言编写程序求水仙花数

C语言编写程序求水仙花数水仙花数是一个数学问题&#xff0c;其实质是一个三位数&#xff0c;个位数的立方加十位数的立方加百位数的立方之和等于这个三位数本身。例如153&#xff1d;1*1*15*5*53*3*3&#xff0c;即153&#xff1d;112527。这是一个相对较为简单的C程序&#x…

RabbitMQ简介和六种工作模式详解

一、RabbitMQ简介是一个开源的消息代理和队列服务器&#xff0c;用来通过普通协议在完全不同的应用之间共享数据&#xff0c;RabbitMQ是使用Erlang(高并发语言)语言来编写的&#xff0c;并且RabbitMQ是基于AMQP协议的。1.1 AMQP协议Advanced Message Queuing Protocol(高级消息…

为什么男性比女性死得更早,心疼一秒钟!

最近娱乐圈的那些大瓜大家都吃了吗&#xff1f;某明星的运动&#xff1f;黑眼圈&#xff1f;&#xff1f;不免让小编想起之前看的文章 男性为啥比女性“去”的早嗯&#xff0c;有可能是操劳过度 生活太累 咳咳咳咳咳以上均是不负责任猜想吃瓜要谨慎呦????不过这篇报道…

(转)C#网络编程(基本概念和操作) - Part.1

源码下载&#xff1a;http://www.tracefact.net/SourceCode/Network-Part1-2.rar C#网络编程(基本概念和操作) - Part.1 引言 C#网络编程系列文章计划简单地讲述网络编程方面的基础知识&#xff0c;由于本人在这方面功力有限&#xff0c;所以只能提供一些初步的入门知识&#x…

jwt如何防止token被窃取_在吗?认识一下JWT(JSON Web Token)?

什么是JSON Web Token &#xff1f;官网介绍&#xff1a;JSON Web Token(JWT)是一个开放标准(RFC 7519)&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于在各方之间安全地将信息作为JSON对象传输。由于此信息是经过数字签名的&#xff0c;因此可以被验证和信任。可…

8月日更,我的困难与感悟

8月份参加了掘金的日更活动&#xff0c;坚持每天写技术文章进行分享&#xff0c;现在活动结束了&#xff0c;来复盘下这一个月来我的困难与感悟。8月日更其实刚开始我是不想参加这个活动的&#xff0c;最近确实比较忙&#xff0c;不管是工作还是自己的私事&#xff0c;都不允许…

那些神一样的学习技巧,专治各种不服!

▲ 点击查看著名的俄国生理学家曾反复对自己的学生提过这个要求&#xff1a;“应当先学会观察&#xff0c;观察。不学会观察&#xff0c;你就永远当不了科学家。”鲁迅也曾这样教导&#xff1a;“如果要创作&#xff0c;第一要观察。”在《神探夏洛克》中&#xff0c;有这么一段…

kafka 怎么样连接图形化界面_图形化编程有多简单,点亮LED不到一分钟

Arduino编程在所有单片机当中应该说是最简单的了&#xff0c;但是还可以更加简单。比如说图形化编程&#xff0c;图形化编程真正让Arduino大众化了&#xff0c;因为谁都可以通过图形化编程方式来制作自己需要的小玩意。啃萝卜关于图形化编程软件有很多&#xff0c;我独宠啃萝卜…

linux驱动内核哪个文件夹,linux设备驱动归纳总结(一):内核的相关基础概念...

linux设备驱动归纳总结(一)&#xff1a;内核的相关基础概念1. 内核与 linux 设备驱动的作用与关系内核&#xff1a;用于管理软硬件资源&#xff0c;并提供运行环境。如分配 4G 虚拟空间等。linux 设备驱动&#xff1a;是连接硬件和内核之间的桥梁。linux 系统按个人理解可按下划…

怪不得超市不让带宠物...

1 难怪超市不让带狗啊▼2 医学生的聊天记录过于硬核▼3 你身边的外卖小哥头盔上都顶着什么呢&#xff1f;▼4 表妹非要把猫脸P到蜜蜂身上▼5 其实主要还是看脸脸到位了&#xff0c;祖安小公举问题都不大▼6 就你们这个送别方式我觉得他是回不来了......▼7 妹妹沦为工具…

自定义控件复选框和单选框的实现

我们先实现单个按钮&#xff0c;为了复用&#xff0c;不管单选还是复选按钮都是使用同一个类来实现&#xff0c;为了区别单选还是复选&#xff0c;我们用一个自定义枚举类型CheckButtonStyle属性style来区别&#xff0c;当其值设置为CheckButtonStyleDefault或CheckButtonStyle…

单文件组件的组件传值_移动端组件化架构(下)

我的组件化方案对于项目架构来说&#xff0c;一定要建立于业务之上来设计架构。不同的项目业务不同&#xff0c;组件化方案的设计也会不同&#xff0c;应该设计最适合公司业务的架构。架构设计以我之前公司项目为例&#xff0c;项目是一个地图导航应用&#xff0c;业务层之下的…

为什么圆是360度?超颠覆的解释

圆为什么有360度&#xff1f;为什么不是300度呢&#xff1f;古文明时期人类把很多不能解释的自然现象归结为“天意”真的有天意吗&#xff1f;我们把圆分成等份&#xff0c;奇迹出现了.....依次等分下去&#xff0c;结果一样...任何被分成等分的角度的所有数字之和为9现在我们来…