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方法需要自行添加。
发表评论