麻花痒 发表于 2024-4-2 10:15:29

delphi redisclient测试

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons;

type
TForm1 = class(TForm)
    Memo1: TMemo;
    BitBtn1: TBitBtn;
    procedure FormCreate(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;


var
Form1: TForm1;

implementation

{$R *.dfm}

uses
Redis.Commons, redis.Command, redis.NetLib.INDY, redis.Client;

var
redis: IRedisClient;
cmd: IRedisCommand;

procedure log(msg: string);
begin
Form1.Memo1.Lines.Add(msg);
end;

procedure TForm1.FormCreate(Sender: TObject);
procedure addMsg;
begin
    if not redis.EXISTS('myStream') then
    begin
      var xaddCmd := NewRedisCommand('XADD').Add('myStream').Add('*').Add('name').Add('jjw');
      var ret := redis.ExecuteWithStringResult(xaddCmd);
      if ret.HasValue then
      Log(ret.Value);
    end;
end;

procedure getGroups;
begin
    cmd := NewRedisCommand('XINFO').Add('GROUPS').Add('myStream');   //redis 无法处理
    var ret := redis.ExecuteAndGetMatrix(cmd);
    if ret.HasValue then
    begin
      var c := Length(ret.Value);
      var v := ret.Value;
      for var I := 0 to Length(v.Value)-1 do
      log(v.Value.Value);
    end;
end;

procedure clearGroup;
begin
    cmd := NewRedisCommand('XGROUP').Add('DESTROY').Add('myStream').Add('myGroup');   //会清空未读,未确认的消息
    var ret := redis.ExecuteWithStringResult(cmd);
end;

procedure createGroup;
begin
    var createGroupCmd := NewRedisCommand('XGROUP').Add('CREATE').Add('myStream').Add('myGroup').Add('0');// $:最新消息, 即未读过的。0:从最后一条读
    var ret := redis.ExecuteWithStringResult(createGroupCmd);
    if ret.HasValue then
      Log(ret.Value);
end;

procedure readMsg;
begin
    cmd := NewRedisCommand('XREADGROUP').Add('GROUP').Add('myGroup').Add('cm').Add('COUNT').Add(2).Add('STREAMS').Add('myStream').Add('>');//0,未ACK(确认)的未读消息   > 未读过的消息
    var val := redis.ExecuteAndGetRESPArray(cmd);
    if val<>nil then
      memo1.Text := val.ToJSON(); //[["myStream",[["1704960677439-0",["name","haha","age","100"]]]]]
//    Memo1.Text := val.ToString; //[["myStream",[["1704960677439-0",["name","haha","age","100"]]]]]
//    var y1 := val.ArrayValue.Value;//myStream
//    Log(val.Items.Items.Items.Value);//1704960677439-0
//    Log(val.Items.Items.Items.Items.Value);//name
end;
begin
redis := NewRedisClient('192.168.88.129');

getGroups;

addMsg;
try
    // if not ExistsGroup(groupName) then//若不判断,捕获异常也可以。
    //   createGroup;
except
    ;
end;
readMsg;
end;

end.注:
或IRedisClient接口中无ExecuteAndGetMatrix方法需要自行添加。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: delphi redisclient测试