• delphiredisclient开源GIT


    delphiredisclient - Redis client for Delphi

    Delphi Redis Client版本2(此分支)与Delphi 10.1 Berlin兼容,更好。警告!如果您使用较旧的Delphi版本,则必须使用适用于Delphi 10 Seattle,XE8,XE7,XE6和XE5的Delphi Redis Client版本1(也适用于旧版本)。

    Delphi REDIS客户端从第一个版本(或左右)开始在移动设备上运行,自从Delphi 10.2东京它也在Linux上工作(测试Ubuntu 16.x LTS)。

    Delphi Redis Client能够发送所有Redis命令并使用内部解析器读取响应。此外,许多流行的命令具有专门的专用方法,这简化了利用率。

    这是用于连接,发送命令和管理Redis服务器的Redis客户端界面。许多方法都是1-1映射到具有相同名称的Redis命令(例如,SET是Redis SET命令的映射)。计划实现某种集成设计模式的高级方法(例如,推送JSONObject,弹出流等)。

    https://github.com/danieleteti/delphiredisclient 

    IRedisClient = interface
        ['{566C20FF-7D9F-4DAC-9B0E-A8AA7D29B0B4}']
        function &SET(const AKey, AValue: string): boolean; overload;
        function &SET(const AKey, AValue: TBytes): boolean; overload;
        function &SET(const AKey: string; AValue: TBytes): boolean; overload;
        function &SET(const AKey: string; AValue: TBytes; ASecsExpire: UInt64): boolean; overload;
        function &SET(const AKey: string; AValue: string; ASecsExpire: UInt64): boolean; overload;
        function SETNX(const AKey, AValue: string): boolean; overload;
        function SETNX(const AKey, AValue: TBytes): boolean; overload;
        function GET(const AKey: string; out AValue: string): boolean; overload;
        function GET(const AKey: TBytes; out AValue: TBytes): boolean; overload;
        function GET(const AKey: string; out AValue: TBytes): boolean; overload;
        function DEL(const AKeys: array of string): Integer;
        function TTL(const AKey: string): Integer;
        function EXISTS(const AKey: string): boolean;
        function MSET(const AKeysValues: array of string): boolean;
        function KEYS(const AKeyPattern: string): TArray<string>;
        function INCR(const AKey: string): NativeInt;
        function DECR(const AKey: string): NativeInt;
        function EXPIRE(const AKey: string; AExpireInSecond: UInt32): boolean;
    
        // strings functions
        function APPEND(const AKey, AValue: TBytes): UInt64; overload;
        function APPEND(const AKey, AValue: string): UInt64; overload;
        function STRLEN(const AKey: string): UInt64;
        function GETRANGE(const AKey: string; const AStart, AEnd: NativeInt): string;
        function SETRANGE(const AKey: string; const AOffset: NativeInt; const AValue: string)
          : NativeInt;
    
        // hash
        function HSET(const AKey, aField: string; AValue: string): Integer; overload;
        procedure HMSET(const AKey: string; aFields: TArray<string>; AValues: TArray<string>);
        function HMGET(const AKey: string; aFields: TArray<string>): TArray<string>;
        function HSET(const AKey, aField: string; AValue: TBytes): Integer; overload;
        function HGET(const AKey, aField: string; out AValue: TBytes): boolean; overload;
        function HGET(const AKey, aField: string; out AValue: string): boolean; overload;
        function HDEL(const AKey: string; aFields: TArray<string>): Integer;
    
        // lists
        function RPUSH(const AListKey: string; AValues: array of string): Integer;
        function RPUSHX(const AListKey: string; AValues: array of string): Integer;
        function RPOP(const AListKey: string; var Value: string): boolean;
        function LPUSH(const AListKey: string; AValues: array of string): Integer;
        function LPUSHX(const AListKey: string; AValues: array of string): Integer;
        function LPOP(const AListKey: string; out Value: string): boolean;
        function LLEN(const AListKey: string): Integer;
        procedure LTRIM(const AListKey: string; const AIndexStart, AIndexStop: Integer);
        function LRANGE(const AListKey: string; IndexStart, IndexStop: Integer)
          : TArray<string>;
        function RPOPLPUSH(const ARightListKey, ALeftListKey: string;
          var APoppedAndPushedElement: string): boolean; overload;
        function BRPOPLPUSH(const ARightListKey, ALeftListKey: string;
          var APoppedAndPushedElement: string; ATimeout: Int32): boolean; overload;
        function BLPOP(const AKeys: array of string; const ATimeout: Int32;
          out Value: TArray<string>): boolean;
        function BRPOP(const AKeys: array of string; const ATimeout: Int32;
          out Value: TArray<string>): boolean;
        function LREM(const AListKey: string; const ACount: Integer;
          const AValue: string): Integer;
    
        // sets
        function SADD(const AKey, AValue: TBytes): Integer; overload;
        function SADD(const AKey, AValue: string): Integer; overload;
        function SREM(const AKey, AValue: TBytes): Integer; overload;
        function SREM(const AKey, AValue: string): Integer; overload;
        function SMEMBERS(const AKey: string): TArray<string>;
        function SCARD(const AKey: string): Integer;
    
        // ordered sets
        function ZADD(const AKey: string; const AScore: Int64; const AMember: string): Integer;
        function ZREM(const AKey: string; const AMember: string): Integer;
        function ZCARD(const AKey: string): Integer;
        function ZCOUNT(const AKey: string; const AMin, AMax: Int64): Integer;
        function ZRANK(const AKey: string; const AMember: string; out ARank: Int64): boolean;
        function ZRANGE(const AKey: string; const AStart, AStop: Int64): TArray<string>;
        function ZRANGEWithScore(const AKey: string; const AStart, AStop: Int64): TArray<string>;
        function ZINCRBY(const AKey: string; const AIncrement: Int64; const AMember: string): string;
    
        // lua scripts
        function EVAL(const AScript: string; AKeys: array of string; AValues: array of string): Integer;
    
        // system
        procedure FLUSHDB;
        procedure SELECT(const ADBIndex: Integer);
        procedure AUTH(const aPassword: string);
    
        // raw execute
        function ExecuteAndGetArray(const RedisCommand: IRedisCommand)
          : TArray<string>;
        function ExecuteWithIntegerResult(const RedisCommand: string)
          : TArray<string>; overload;
        function ExecuteWithIntegerResult(const RedisCommand: IRedisCommand)
          : Int64; overload;
        function ExecuteWithStringResult(const RedisCommand: IRedisCommand): string;
        
        // pubsub
        procedure SUBSCRIBE(const AChannels: array of string;
          ACallback: TProc<string, string>;
          ATimeoutCallback: TRedisTimeoutCallback = nil);
        function PUBLISH(const AChannel: string; AMessage: string): Integer;
        
        // transactions
        function MULTI(ARedisTansactionProc: TRedisTransactionProc): TArray<string>; overload;
        procedure MULTI; overload;
        function EXEC: TArray<string>;
        procedure WATCH(const AKeys: array of string);
    
        procedure DISCARD;
        // non sys
        function Tokenize(const ARedisCommand: string): TArray<string>;
        procedure Disconnect;
        function InTransaction: boolean;
        // client
        procedure ClientSetName(const ClientName: string);
        procedure SetCommandTimeout(const Timeout: Int32);
        function Clone: IRedisClient;
      end;
    

    Delphi Redis Client is not tied to a specific TCP/IP library. Currently it uses INDY but you can implement the IRedisNetLibAdapter and wrap whatever library you like.

      IRedisNetLibAdapter = interface
        ['{2DB21166-2E68-4DC4-9870-5DCCAAE877A3}']
        procedure Connect(const HostName: string; const Port: Word);
        procedure Send(const Value: string);
        procedure Write(const Bytes: TBytes);
        procedure WriteCrLf(const Bytes: TBytes);
        procedure SendCmd(const Values: IRedisCommand);
        function Receive(const Timeout: Int32): string;
        function ReceiveBytes(const ACount: Int64; const Timeout: Int32): System.TArray<System.Byte>;
        procedure Disconnect;
        function LastReadWasTimedOut: boolean;
      end;

    This is a simple demo showing the utilization pattern (using the builtin INDY library support).

    program CmdsSample1;
    
    {$APPTYPE CONSOLE}
    
    {$R *.res}
    
    
    uses
      System.SysUtils,
      Redis.Commons, // Interfaces and types
      Redis.Client, // The client itself
      Redis.NetLib.INDY, // The tcp library used
      Redis.Values; // nullable types for redis commands
    
    var
      lRedis: IRedisClient;
      lValue: TRedisString;
    
    begin
      try
        lRedis := TRedisClient.Create;
        lRedis.Connect;
        lRedis.&SET('firstname', 'Daniele');
        lValue := lRedis.GET('firstname');
        if not lValue.IsNull then
          WriteLn('KEY FOUND! key "firstname" => ', lValue.Value);
        WriteLn('DEL firstname');
        lRedis.DEL(['firstname']); // remove the key
        lValue := lRedis.GET('firstname');
        if lValue.IsNull then
          WriteLn('Key "firstname" doesn''t exist (it''s correct!)')
        else
          WriteLn(lValue.Value); // never printed
    
      except
        on E: Exception do
          WriteLn(E.ClassName, ': ', E.Message);
      end;
      readln; //just to keep the command prompt open
    
    end.

  • 相关阅读:
    分页查询
    web 开发中 405报错
    html 中input标签的name属性
    怎么样利用debug
    bzoj 1314: River过河 优先队列
    bzoj 4004: [JLOI2015]装备购买 拟阵 && 高消
    bzoj 1133: [POI2009]Kon dp
    bzoj 4127: Abs 树链剖分
    bzoj 2406: 矩阵 上下界网络流判定
    再写FFT模板
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/10472924.html
Copyright © 2020-2023  润新知