- 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[0];
- for var I := 0 to Length(v.Value)-1 do
- log(v.Value[I].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[0].ArrayValue[0].Value; //myStream
- // Log(val[0].Items[1].Items[0].Items[0].Value); //1704960677439-0
- // Log(val[0].Items[1].Items[0].Items[1].Items[0].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方法需要自行添加。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |