delphi redisclient测试

打印 上一主题 下一主题

主题 921|帖子 921|积分 2763

  1. unit Unit1;
  2. interface
  3. uses
  4.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  5.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons;
  6. type
  7.   TForm1 = class(TForm)
  8.     Memo1: TMemo;
  9.     BitBtn1: TBitBtn;
  10.     procedure FormCreate(Sender: TObject);
  11.   private
  12.     { Private declarations }
  13.   public
  14.     { Public declarations }
  15.   end;
  16. var
  17.   Form1: TForm1;
  18. implementation
  19. {$R *.dfm}
  20. uses
  21.   Redis.Commons, redis.Command, redis.NetLib.INDY, redis.Client;
  22. var
  23.   redis: IRedisClient;
  24.   cmd: IRedisCommand;
  25. procedure log(msg: string);
  26. begin
  27.   Form1.Memo1.Lines.Add(msg);
  28. end;
  29. procedure TForm1.FormCreate(Sender: TObject);
  30.   procedure addMsg;
  31.   begin
  32.     if not redis.EXISTS('myStream') then
  33.     begin
  34.       var xaddCmd := NewRedisCommand('XADD').Add('myStream').Add('*').Add('name').Add('jjw');
  35.       var ret := redis.ExecuteWithStringResult(xaddCmd);
  36.       if ret.HasValue then
  37.         Log(ret.Value);
  38.     end;
  39.   end;
  40.   procedure getGroups;
  41.   begin
  42.     cmd := NewRedisCommand('XINFO').Add('GROUPS').Add('myStream');     //redis 无法处理
  43.     var ret := redis.ExecuteAndGetMatrix(cmd);
  44.     if ret.HasValue then
  45.     begin
  46.       var c := Length(ret.Value);
  47.       var v := ret.Value[0];
  48.       for var I := 0 to Length(v.Value)-1 do
  49.         log(v.Value[I].Value);
  50.     end;
  51.   end;
  52.   procedure clearGroup;
  53.   begin
  54.     cmd := NewRedisCommand('XGROUP').Add('DESTROY').Add('myStream').Add('myGroup');     //会清空未读,未确认的消息
  55.     var ret := redis.ExecuteWithStringResult(cmd);
  56.   end;
  57.   procedure createGroup;
  58.   begin
  59.     var createGroupCmd := NewRedisCommand('XGROUP').Add('CREATE').Add('myStream').Add('myGroup').Add('0');  // $:最新消息, 即未读过的。  0:从最后一条读
  60.     var ret := redis.ExecuteWithStringResult(createGroupCmd);
  61.     if ret.HasValue then
  62.       Log(ret.Value);
  63.   end;
  64.   procedure readMsg;
  65.   begin
  66.     cmd := NewRedisCommand('XREADGROUP').Add('GROUP').Add('myGroup').Add('cm').Add('COUNT').Add(2).Add('STREAMS').Add('myStream').Add('>');  //0,未ACK(确认)的未读消息   > 未读过的消息
  67.     var val := redis.ExecuteAndGetRESPArray(cmd);
  68.     if val<>nil then
  69.       memo1.Text := val.ToJSON(); //[["myStream",[["1704960677439-0",["name","haha","age","100"]]]]]
  70. //    Memo1.Text := val.ToString; //[["myStream",[["1704960677439-0",["name","haha","age","100"]]]]]
  71. //    var y1 := val[0].ArrayValue[0].Value;  //myStream
  72. //    Log(val[0].Items[1].Items[0].Items[0].Value);  //1704960677439-0
  73. //    Log(val[0].Items[1].Items[0].Items[1].Items[0].Value);  //name
  74.   end;
  75. begin
  76.   redis := NewRedisClient('192.168.88.129');
  77.   getGroups;
  78.   addMsg;
  79.   try
  80.     // if not ExistsGroup(groupName) then  //若不判断,捕获异常也可以。
  81.     //   createGroup;
  82.   except
  83.     ;
  84.   end;
  85.   readMsg;
  86. end;
  87. end.
复制代码
注:
或IRedisClient接口中无ExecuteAndGetMatrix方法需要自行添加。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

麻花痒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表