日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

用.netcore写一个简单redis驱动,调试windows版本的redis

發(fā)布時(shí)間:2023/12/4 windows 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用.netcore写一个简单redis驱动,调试windows版本的redis 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 下載windows版本的redis

2.開(kāi)發(fā)環(huán)境vs2017 ?新建一個(gè) .net core控制臺(tái)。 ? ? ?

?? private static Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ? ?

? private static BufferedStream buffer = null;

?socket.NoDelay = true;
?socket.SendTimeout = 5000;
?socket.Connect("127.0.0.1", 6379);
?buffer = new BufferedStream(new NetworkStream(socket), 10 * 1024);

3. 現(xiàn)在寫SetString方法,SetString方法我就簡(jiǎn)單的封裝了一下。

  

? ?string set = SetString("test1", "nihao");?

?

4. SendData()方法 

/// <summary>

? ? ? ? /// 拼接發(fā)送數(shù)據(jù)

? ? ? ? /// </summary>

? ? ? ? /// <param name="cmd"></param>

? ? ? ? /// <returns></returns>

? ? ? ? static string SendData(params string[] cmd)

? ? ? ? {

? ? ? ? ? ? StringBuilder sb = new StringBuilder();

? ? ? ? ? ? sb.Append($"*{cmd.Length}\r\n");

? ? ? ? ? ? foreach (var item in cmd)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? sb.Append($"${item.Length}\r\n" + item + "\r\n");

? ? ? ? ? ? }

? ? ? ? ? ? return sb.ToString();

? ? ? ? }

5.GetResponseData()方法。

/// <summary>

? ? ? ? /// 獲取返回?cái)?shù)據(jù)

? ? ? ? /// </summary>

? ? ? ? /// <returns></returns>

? ? ? ? static string GetResponseData()

? ? ? ? {

? ? ? ? ? ? StringBuilder str = new StringBuilder();

? ? ? ? ? ? int read = 0;

? ? ? ? ? ? while ((read = buffer.ReadByte()) != -1)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if (read == '\r')

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? if (read == '\n')

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? str.Append((char)read);

? ? ? ? ? ? }

? ? ? ? ? ? var returnData = str.ToString().Replace("$", "");

? ? ? ? ? ? int lengthCout;

? ? ? ? ? ? if (!int.TryParse(returnData, out lengthCout))

? ? ? ? ? ? {

? ? ? ? ? ? ? ? return str.ToString();

? ? ? ? ? ? }

? ? ? ? ? ? byte[] by1 = new byte[lengthCout];

? ? ? ? ? ? buffer.Read(by1, 0, lengthCout);

? ? ? ? ? ? return Encoding.UTF8.GetString(by1);

? ? ? ? }

6.下面看下GetString方法。 ?

string get = GetString("test1"); ?

?

7.get和set 方法都完成了。我們?cè)诳纯磒assowrd 方法,身份驗(yàn)證。

/// <summary>

? ? ? ? /// AUTH

? ? ? ? /// </summary>

? ? ? ? /// <param name="password"></param>

? ? ? ? /// <returns></returns>

? ? ? ? static string PassWord(string password)

? ? ? ? {

? ? ? ? ? ? string data = SendData("AUTH", password);

? ? ? ? ? ? socket.Send(Encoding.UTF8.GetBytes(data));

? ? ? ? ? ? return GetResponseData();

? ? ? ? }

?8. 現(xiàn)在我們給redis Server 添加密碼來(lái)調(diào)試下,我現(xiàn)在設(shè)置的密碼為123456.

??

9.現(xiàn)在開(kāi)始調(diào)試redis客戶端,我吧PassWord方法注釋了, 錯(cuò)誤提示是,需要身份驗(yàn)證。

  

10.現(xiàn)在取消注釋,添加監(jiān)視,pw和set 都返回+ok ?,get 的值為 nihao。

   

11。現(xiàn)在輸入一個(gè)錯(cuò)誤的密碼試試,比如123456a.

?

12. 我們?cè)诳纯磩h除命令.

/// <summary>

? ? ? ? /// delete命令

? ? ? ? /// </summary>

? ? ? ? /// <param name="key"></param>

? ? ? ? /// <returns></returns>

? ? ? ? static string DeleteKey(string key)

? ? ? ? {

? ? ? ? ? ? string data=SendData("DEL", key);

? ? ? ? ? ? socket.Send(Encoding.UTF8.GetBytes(data));

? ? ? ? ? ? return GetResponseData();

? ? ? ? }

13.過(guò)期時(shí)間方法。 

/// <summary>

? ? ? ? /// 過(guò)期時(shí)間

? ? ? ? /// </summary>

? ? ? ? /// <param name="key"></param>

? ? ? ? /// <returns></returns>

? ? ? ? static string ExpirationTime(string key,int seconds)

? ? ? ? {

? ? ? ? ? ? string data = SendData("EXPIRE", key,seconds.ToString());

? ? ? ? ? ? socket.Send(Encoding.UTF8.GetBytes(data));

? ? ? ? ? ? return GetResponseData();

? ? ? ? }

14.下面我們來(lái)點(diǎn)好玩的,修改get命令的參數(shù)數(shù)量,也相當(dāng)添加一個(gè)安全驗(yàn)證。

下圖是redis 的get命令,我現(xiàn)在改下,?{"get",getCommand,2,"rF",0,NULL,1,1,1,0,0} ,其中的 2 是參數(shù)的數(shù)量,我吧他改成3, get命令就必須傳遞3個(gè)參數(shù)。

  

15. 修改后

?

17.在寫一個(gè)判斷,如果發(fā)送的第三個(gè)參數(shù)不是 wang001 就會(huì)報(bào)錯(cuò)。我們現(xiàn)在來(lái)調(diào)試下。

?

?18.在修改下redis 客戶端的GetString方法,我們修改wang002

  

?

19.現(xiàn)在修改為wang001,現(xiàn)在返回成功了。

?

?20.Set命令是-3 也就是3個(gè)參數(shù)。我吧他改成-4 ?,他這個(gè)參數(shù)數(shù)量是負(fù)數(shù),其實(shí)一樣。

??

set名還需要多修改一個(gè)地方,吧j=3 修改為4。我們來(lái)調(diào)試一把。

?

21.setString()方法,我們還按原來(lái)的不傳遞第四個(gè)參數(shù),直接報(bào)錯(cuò)了。參數(shù)的個(gè)數(shù)錯(cuò)誤。

  

?

?22.現(xiàn)在我們隨便添加一個(gè)參數(shù),在來(lái)調(diào)試一把,現(xiàn)在返回成功了,平且也get到數(shù)據(jù)了。set的第四個(gè)參數(shù)也可以修改redis源碼做個(gè)判斷,增加安全性。

?

23.有興趣的朋友也可以修改其他的命令玩玩,純屬個(gè)人愛(ài)好。

原文地址:http://www.cnblogs.com/myisceo/p/6759831.html


.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注

總結(jié)

以上是生活随笔為你收集整理的用.netcore写一个简单redis驱动,调试windows版本的redis的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。