zoukankan      html  css  js  c++  java
  • Basic Tutorials of Redis(9) -First Edition RedisHelper

      After learning the basic opreation of Redis,we should take some time to summarize the usage.

    And I wrote my first edition RedisHelper.Here is the code:

      The Interface IRedis:

      1     public interface IRedis
      2     {
      3         ITransaction GetTransaction(int db = 0, bool isRead = false);
      4 
      5         #region String
      6         #region get
      7         /// <summary>
      8         /// get the string value
      9         /// </summary>
     10         /// <param name="key">the key of value</param>
     11         /// <param name="flag">behaviour</param>
     12         /// <param name="db">index of database</param>
     13         /// <returns></returns>
     14         RedisValue Get(string key, CommandFlags flag = CommandFlags.None, int db = 0);
     15         /// <summary>
     16         /// get the string value(Asynchronous)
     17         /// </summary>
     18         /// <param name="key">the key of value</param>
     19         /// <param name="flag">behaviour</param>
     20         /// <param name="db">index of database</param>
     21         /// <returns></returns>
     22         Task<RedisValue> GetAsync(string key, CommandFlags flag = CommandFlags.None, int db = 0);
     23         /// <summary>
     24         /// get the entity by deserialization
     25         /// </summary>
     26         /// <param name="key">the key of value</param>
     27         /// <param name="flag">behaviour</param>
     28         /// <param name="db">index of database</param>
     29         /// <returns></returns>
     30         T Get<T>(string key, CommandFlags flags = CommandFlags.None, int db = 0);
     31         /// <summary>
     32         /// get the entity by deserialization(Asynchronous)
     33         /// </summary>
     34         /// <param name="key">the key of value</param>
     35         /// <param name="flag">behaviour</param>
     36         /// <param name="db">index of database</param>
     37         /// <returns></returns>
     38         Task<T> GetAsync<T>(string key, CommandFlags flags = CommandFlags.None, int db = 0);
     39         #endregion
     40 
     41         #region set
     42         /// <summary>
     43         /// set value to key
     44         /// </summary>
     45         /// <param name="key">the key</param>
     46         /// <param name="value">the value of the key</param>
     47         /// <param name="expiry">time to expiry</param>
     48         /// <param name="when">when this operation should be performed</param>
     49         /// <param name="flags">behaviour</param>
     50         /// <param name="db">index of database</param>
     51         /// <returns></returns>
     52         RedisValue Set(string key, string value, TimeSpan? expiry = default(TimeSpan?), When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0);
     53         /// <summary>
     54         /// set value to key(Asynchronous)
     55         /// </summary>
     56         /// <param name="key">the key</param>
     57         /// <param name="value">the value of the key</param>
     58         /// <param name="expiry">time to expiry</param>
     59         /// <param name="when">when this operation should be performed</param>
     60         /// <param name="flags">behaviour</param>
     61         /// <param name="db">index of database</param>
     62         /// <returns></returns>
     63         Task<bool> SetAsync(string key, string value, TimeSpan? expiry = default(TimeSpan?), When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0);
     64         #endregion
     65 
     66         #region mget
     67         /// <summary>
     68         /// get multi values 
     69         /// </summary>
     70         /// <param name="keys">the keys of the values</param>
     71         /// <param name="flags">behaviour</param>
     72         /// <param name="db">index of database</param>
     73         /// <returns></returns>
     74         IList<RedisValue> MGet(List<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0);
     75         /// <summary>
     76         /// get multi values(Asynchronous)
     77         /// </summary>
     78         /// <param name="keys">the keys of the values</param>
     79         /// <param name="flags">behaviour</param>
     80         /// <param name="db">index of database</param>
     81         /// <returns></returns>
     82         Task<RedisValue[]> MGetAsync(List<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0);
     83         #endregion
     84 
     85         #region mset
     86         /// <summary>
     87         /// set multi values
     88         /// </summary>
     89         /// <param name="kvs">key-values</param>
     90         /// <param name="when">when this operation should be performed</param>
     91         /// <param name="flags">behaviour</param>
     92         /// <param name="db">index of database</param>
     93         /// <returns></returns>
     94         bool MSet(List<KeyValuePair<RedisKey, RedisValue>> kvs, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0);
     95         /// <summary>
     96         /// set multi values(Asynchronous)
     97         /// </summary>
     98         /// <param name="kvs">key-values</param>
     99         /// <param name="when">when this operation should be performed</param>
    100         /// <param name="flags">behaviour</param>
    101         /// <param name="db">index of database</param>
    102         /// <returns></returns>
    103         Task<bool> MSetAsync(List<KeyValuePair<RedisKey, RedisValue>> kvs, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0);
    104         #endregion
    105 
    106         #region incr incrby incrbyfloat decr decrby
    107         /// <summary>
    108         /// handle the numeric value
    109         /// </summary>
    110         /// <param name="key">key</param>
    111         /// <param name="amount">value to increase or decrease</param>
    112         /// <param name="flags">behaviour</param>
    113         /// <param name="db">index of database</param>
    114         /// <returns></returns>
    115         double IncrOrDecrBy(RedisKey key, double value, CommandFlags flags = CommandFlags.None, int db = 0);
    116         /// <summary>
    117         /// handle the numeric value(Asynchronous)
    118         /// </summary>
    119         /// <param name="key">key</param>
    120         /// <param name="amount">value to increase or decrease</param>
    121         /// <param name="flags">behaviour</param>
    122         /// <param name="db">index of database</param>
    123         /// <returns></returns>
    124         Task<double> IncrOrDecrByAsync(RedisKey key, double value, CommandFlags flags = CommandFlags.None, int db = 0);
    125         #endregion
    126 
    127         #region append
    128         /// <summary>
    129         /// append value to the key
    130         /// </summary>
    131         /// <param name="key">key</param>
    132         /// <param name="value">value to append</param>
    133         /// <param name="flags">behaviour</param>
    134         /// <param name="db">index of database</param>
    135         /// <returns></returns>
    136         long Append(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0);
    137         /// <summary>
    138         /// append value to the key(Asynchronous)
    139         /// </summary>
    140         /// <param name="key">key</param>
    141         /// <param name="value">value to append</param>
    142         /// <param name="flags">behaviour</param>
    143         /// <param name="db">index of database</param>
    144         /// <returns></returns>
    145         Task<long> AppendAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0);
    146         #endregion
    147 
    148         #region strlen
    149         /// <summary>
    150         /// get the value's length by the key
    151         /// </summary>
    152         /// <param name="key">key</param>
    153         /// <param name="flags">behaviour</param>
    154         /// <param name="db">index of database</param>
    155         /// <returns></returns>
    156         long StrLen(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    157         /// <summary>
    158         /// get the value's length by the key(Asynchronous)
    159         /// </summary>
    160         /// <param name="key">key</param>
    161         /// <param name="flags">behaviour</param>
    162         /// <param name="db">index of database</param>
    163         /// <returns></returns>
    164         Task<long> StrLenAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    165         #endregion
    166         #endregion
    167 
    168         #region Hash
    169         #region hget
    170         /// <summary>
    171         /// get the value of key's field
    172         /// </summary>
    173         /// <param name="key">key</param>
    174         /// <param name="field">field of key</param>
    175         /// <param name="flags">behaviour</param>
    176         /// <param name="db">index of database</param>
    177         /// <returns></returns>
    178         Task<RedisValue> HGetAsync(RedisKey key, RedisValue field, CommandFlags flags = CommandFlags.None, int db = 0);
    179         /// <summary>
    180         /// get the value of key's field(Asynchronous)
    181         /// </summary>
    182         /// <param name="key">key</param>
    183         /// <param name="field">field of key</param>
    184         /// <param name="flags">behaviour</param>
    185         /// <param name="db">index of database</param>
    186         /// <returns></returns>
    187         RedisValue HGet(RedisKey key, RedisValue field, CommandFlags flags = CommandFlags.None, int db = 0);
    188         #endregion
    189 
    190         #region hset
    191         /// <summary>
    192         /// set the field and value of the key
    193         /// </summary>
    194         /// <param name="key">key</param>
    195         /// <param name="field">field of the key</param>
    196         /// <param name="value">value of the field</param>
    197         /// <param name="when">when this operation should be performed</param>
    198         /// <param name="flags">behaviour</param>
    199         /// <param name="db">index of database</param>
    200         /// <returns></returns>
    201         bool HSet(RedisKey key, RedisValue field, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0);
    202         /// <summary>
    203         /// set the field and value of the key
    204         /// </summary>
    205         /// <param name="key">key</param>
    206         /// <param name="field">field of the key</param>
    207         /// <param name="value">value of the field</param>
    208         /// <param name="when">when this operation should be performed</param>
    209         /// <param name="flags">behaviour</param>
    210         /// <param name="db">index of database</param>
    211         /// <returns></returns>
    212         Task<bool> HSetAsync(RedisKey key, RedisValue field, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0);
    213         #endregion
    214 
    215         #region hmget
    216         /// <summary>
    217         /// get multi values of key's fields
    218         /// </summary>
    219         /// <param name="key">key</param>
    220         /// <param name="fields">fields of key</param>
    221         /// <param name="flags">behaviour</param>
    222         /// <param name="db">index of database</param>
    223         /// <returns></returns>
    224         IList<RedisValue> HMGet(RedisKey key, List<RedisValue> fields, CommandFlags flags = CommandFlags.None, int db = 0);
    225         /// <summary>
    226         /// get multi values of key's fields(Asynchronous)
    227         /// </summary>
    228         /// <param name="key">key</param>
    229         /// <param name="fields">fields of key</param>
    230         /// <param name="flags">behaviour</param>
    231         /// <param name="db">index of database</param>
    232         /// <returns></returns>
    233         Task<RedisValue[]> HMGetAsync(RedisKey key, List<RedisValue> fields, CommandFlags flags = CommandFlags.None, int db = 0);
    234         #endregion
    235 
    236         #region hmset
    237         /// <summary>
    238         /// set multi values of key's fields
    239         /// </summary>
    240         /// <param name="key">key</param>
    241         /// <param name="entry">name/value pair</param>
    242         /// <param name="flags">behaviour</param>
    243         /// <param name="db">index of database</param>
    244         void HMSet(RedisKey key, List<HashEntry> entry, CommandFlags flags = CommandFlags.None, int db = 0);
    245         /// <summary>
    246         /// set multi values of key's fields(Asynchronous)
    247         /// </summary>
    248         /// <param name="key">key</param>
    249         /// <param name="entry">name/value pair</param>
    250         /// <param name="flags">behaviour</param>
    251         /// <param name="db">index of database</param>
    252         Task HMSetAsync(RedisKey key, List<HashEntry> entry, CommandFlags flags = CommandFlags.None, int db = 0);
    253         #endregion
    254 
    255         #region hkeys
    256         /// <summary>
    257         /// get all the fields of the key
    258         /// </summary>
    259         /// <param name="key">key</param>
    260         /// <param name="flags">behaviour</param>
    261         /// <param name="db">index of database</param>
    262         /// <returns></returns>
    263         IList<RedisValue> HKeys(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    264         /// <summary>
    265         /// get all the fields of the key(Asynchronous)
    266         /// </summary>
    267         /// <param name="key">key</param>
    268         /// <param name="flags">behaviour</param>
    269         /// <param name="db">index of database</param>
    270         /// <returns></returns>
    271         Task<RedisValue[]> HKeysAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    272         #endregion
    273 
    274         #region hvals
    275         /// <summary>
    276         /// get all the values of key's fields
    277         /// </summary>
    278         /// <param name="key">key</param>
    279         /// <param name="flags">behaviour</param>
    280         /// <param name="db">index of database</param>
    281         /// <returns></returns>
    282         IList<RedisValue> HVals(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    283         /// <summary>
    284         /// get all the values of key's fields(Asynchronous)
    285         /// </summary>
    286         /// <param name="key">key</param>
    287         /// <param name="flags">behaviour</param>
    288         /// <param name="db">index of database</param>
    289         /// <returns></returns>
    290         Task<RedisValue[]> HValsAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    291         #endregion
    292 
    293         #region hincr hincrby hincrbyfloat
    294         /// <summary>
    295         /// handle the numeric value
    296         /// </summary>
    297         /// <param name="key">key</param>
    298         /// <param name="hashField">field of key</param>
    299         /// <param name="amount">value to increase or decrease</param>
    300         /// <param name="flags">behaviour</param>
    301         /// <param name="db">index of database</param>
    302         /// <returns></returns>
    303         double HIncrOrDecrBy(RedisKey key, RedisValue hashField, double amount = 1, CommandFlags flags = CommandFlags.None, int db = 0);
    304         /// <summary>
    305         /// handle the numeric value(Asynchronous)
    306         /// </summary>
    307         /// <param name="key">key</param>
    308         /// <param name="hashField">field of key</param>
    309         /// <param name="amount">value to increase or decrease</param>
    310         /// <param name="flags">behaviour</param>
    311         /// <param name="db">index of database</param>
    312         /// <returns></returns>
    313         Task<double> HIncrOrDecrByAsync(RedisKey key, RedisValue hashField, double amount = 1, CommandFlags flags = CommandFlags.None, int db = 0);
    314         #endregion
    315 
    316         #region hexists
    317         /// <summary>
    318         /// whether a field exists in the key
    319         /// </summary>
    320         /// <param name="key">key</param>
    321         /// <param name="hashField">field of key</param>
    322         /// <param name="flags">behaviour</param>
    323         /// <param name="db">index of database</param>
    324         /// <returns></returns>
    325         bool HExists(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = 0);
    326         /// <summary>
    327         /// whether a field exists in the key(Asynchronous)
    328         /// </summary>
    329         /// <param name="key">key</param>
    330         /// <param name="hashField">field of key</param>
    331         /// <param name="flags">behaviour</param>
    332         /// <param name="db">index of database</param>
    333         /// <returns></returns>
    334         Task<bool> HExistsAsync(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = 0);
    335         #endregion
    336 
    337         #region hdel
    338         /// <summary>
    339         /// delete the field from the key
    340         /// </summary>
    341         /// <param name="key">key</param>
    342         /// <param name="hashField">field of key</param>
    343         /// <param name="flags">behaviour</param>
    344         /// <param name="db">index of database</param>
    345         /// <returns></returns>
    346         bool HDel(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = 0);
    347         /// <summary>
    348         /// delete the field from the key(Asynchronous)
    349         /// </summary>
    350         /// <param name="key">key</param>
    351         /// <param name="hashField">field of key</param>
    352         /// <param name="flags">behaviour</param>
    353         /// <param name="db">index of database</param>
    354         /// <returns></returns>
    355         Task<bool> HDelAsync(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = 0);
    356         /// <summary>
    357         /// delete fields from the key
    358         /// </summary>
    359         /// <param name="key">key</param>
    360         /// <param name="hashFields">fields of key</param>
    361         /// <param name="flags">behaviour</param>
    362         /// <param name="db">index of database</param>
    363         /// <returns></returns>
    364         long HDel(RedisKey key, IList<RedisValue> hashFields, CommandFlags flags = CommandFlags.None, int db = 0);
    365         /// <summary>
    366         /// delete fields from the key(Asynchronous)
    367         /// </summary>
    368         /// <param name="key">key</param>
    369         /// <param name="hashFields">fields of key</param>
    370         /// <param name="flags">behaviour</param>
    371         /// <param name="db">index of database</param>
    372         /// <returns></returns>
    373         Task<long> HDelAsync(RedisKey key, IList<RedisValue> hashFields, CommandFlags flags = CommandFlags.None, int db = 0);
    374         #endregion
    375         #endregion
    376 
    377         #region List
    378 
    379         #region lpush
    380         /// <summary>
    381         /// insert the value to the head of list
    382         /// </summary>
    383         /// <param name="key">key</param>
    384         /// <param name="value">node's value</param>
    385         /// <param name="when">when this operation should be performed</param>
    386         /// <param name="flags">behaviour</param>
    387         /// <param name="db">index of database</param>
    388         /// <returns></returns>
    389         long LPush(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0);
    390         /// <summary>
    391         /// insert the value to the head of list(Asynchronous)
    392         /// </summary>
    393         /// <param name="key">key</param>
    394         /// <param name="value">node's value</param>
    395         /// <param name="when">when this operation should be performed</param>
    396         /// <param name="flags">behaviour</param>
    397         /// <param name="db">index of database</param>
    398         /// <returns></returns>
    399         Task<long> LPushAsync(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0);
    400         #endregion
    401 
    402         #region rpush
    403         /// <summary>
    404         /// insert the value to the tail of list
    405         /// </summary>
    406         /// <param name="key">key</param>
    407         /// <param name="value">node's value</param>
    408         /// <param name="when">when this operation should be performed</param>
    409         /// <param name="flags">behaviour</param>
    410         /// <param name="db">index of database</param>
    411         /// <returns></returns>
    412         long RPush(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0);
    413         /// <summary>
    414         /// insert the value to the tail of list(Asynchronous)
    415         /// </summary>
    416         /// <param name="key">key</param>
    417         /// <param name="value">node's value</param>
    418         /// <param name="when">when this operation should be performed</param>
    419         /// <param name="flags">behaviour</param>
    420         /// <param name="db">index of database</param>
    421         /// <returns></returns>
    422         Task<long> RPushAsync(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0);
    423         #endregion
    424 
    425         #region lpop
    426         /// <summary>
    427         /// removes the first element of the list
    428         /// </summary>
    429         /// <param name="key">key</param>
    430         /// <param name="flags">behaviour</param>
    431         /// <param name="db">index of database</param>
    432         /// <returns></returns>
    433         RedisValue LPop(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    434         /// <summary>
    435         /// removes the first element of the list(Asynchronous)
    436         /// </summary>
    437         /// <param name="key">key</param>
    438         /// <param name="flags">behaviour</param>
    439         /// <param name="db">index of database</param>
    440         /// <returns></returns>
    441         Task<RedisValue> LPopAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    442         #endregion
    443 
    444         #region lrem
    445         /// <summary>
    446         ///  removes the first count occurrences of elements equal to value from the list
    447         /// </summary>
    448         /// <param name="key">key</param>
    449         /// <param name="value">value</param>
    450         /// <param name="count">amount of the node's value equal to the value</param>
    451         /// <param name="flags">behaviour</param>
    452         /// <param name="db">index of database</param>
    453         /// <returns></returns>
    454         long LRem(RedisKey key, RedisValue value, long count = 0, CommandFlags flags = CommandFlags.None, int db = 0);
    455         /// <summary>
    456         ///  removes the first count occurrences of elements equal to value from the list(Asynchronous)
    457         /// </summary>
    458         /// <param name="key">key</param>
    459         /// <param name="value">value</param>
    460         /// <param name="count">amount of the node's value equal to the value</param>
    461         /// <param name="flags">behaviour</param>
    462         /// <param name="db">index of database</param>
    463         /// <returns></returns>
    464         Task<long> LRemAsync(RedisKey key, RedisValue value, long count = 0, CommandFlags flags = CommandFlags.None, int db = 0);
    465         #endregion
    466 
    467         #region lrange
    468         /// <summary>
    469         /// get the specified elements of the list stored at key
    470         /// </summary>
    471         /// <param name="key">key</param>
    472         /// <param name="start">start index</param>
    473         /// <param name="stop">stop index</param>
    474         /// <param name="flags">behaviour</param>
    475         /// <param name="db">index of database</param>
    476         /// <returns></returns>
    477         IList<RedisValue> LRange(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = 0);
    478         /// <summary>
    479         /// get the specified elements of the list stored at key(Asynchronous)
    480         /// </summary>
    481         /// <param name="key">key</param>
    482         /// <param name="start">start index</param>
    483         /// <param name="stop">stop index</param>
    484         /// <param name="flags">behaviour</param>
    485         /// <param name="db">index of database</param>
    486         /// <returns></returns>
    487         Task<RedisValue[]> LRangeAsync(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = 0);
    488         #endregion
    489 
    490         #region llen
    491         /// <summary>
    492         /// get the length of the list
    493         /// </summary>
    494         /// <param name="key">key</param>
    495         /// <param name="flags">behaviour</param>
    496         /// <param name="db">index of database</param>
    497         /// <returns></returns>
    498         long LLen(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    499         /// <summary>
    500         /// get the length of the list(Asynchronous)
    501         /// </summary>
    502         /// <param name="key">key</param>
    503         /// <param name="flags">behaviour</param>
    504         /// <param name="db">index of database</param>
    505         /// <returns></returns>
    506         Task<long> LLenAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    507         #endregion
    508 
    509         /// <summary>
    510         ///  get the element at index index in the list
    511         /// </summary>
    512         /// <param name="key">key</param>
    513         /// <param name="index">index</param>
    514         /// <param name="flags">behaviour</param>
    515         /// <param name="db">index of database</param>
    516         /// <returns></returns>
    517         RedisValue LIndex(RedisKey key, long index, CommandFlags flags = CommandFlags.None, int db = 0);
    518         /// <summary>
    519         ///  get the element at index index in the list(Asynchronous)
    520         /// </summary>
    521         /// <param name="key">key</param>
    522         /// <param name="index">index</param>
    523         /// <param name="flags">behaviour</param>
    524         /// <param name="db">index of database</param>
    525         /// <returns></returns>
    526         Task<RedisValue> LIndexAsync(RedisKey key, long index, CommandFlags flags = CommandFlags.None, int db = 0);
    527 
    528         #region LInsert
    529         /// <summary>
    530         /// inserts value in the list stored at key either before or after the reference value pivot.
    531         /// </summary>
    532         /// <param name="key"></param>
    533         /// <param name="pivot"></param>
    534         /// <param name="value"></param>
    535         /// <param name="flags"></param>
    536         /// <param name="isAfter"></param>
    537         /// <param name="db"></param>
    538         /// <returns></returns>
    539         long LInsert(RedisKey key, RedisValue pivot, RedisValue value, CommandFlags flags = CommandFlags.None, bool isAfter = false, int db = 0);
    540         /// <summary>
    541         /// inserts value in the list stored at key either before or after the reference value pivot.
    542         /// </summary>
    543         /// <param name="key"></param>
    544         /// <param name="pivot"></param>
    545         /// <param name="value"></param>
    546         /// <param name="flags"></param>
    547         /// <param name="isAfter"></param>
    548         /// <param name="db"></param>
    549         /// <returns></returns>
    550         Task<long> LInsertAsync(RedisKey key, RedisValue pivot, RedisValue value, CommandFlags flags = CommandFlags.None, bool isAfter = false, int db = 0);
    551         #endregion
    552 
    553         #endregion
    554 
    555         #region Set
    556         #region sadd
    557         /// <summary>
    558         /// add a member to a set
    559         /// </summary>
    560         /// <param name="key">key of set</param>
    561         /// <param name="value">value of the key</param>
    562         /// <param name="flags">behaviour</param>
    563         /// <param name="db">index of database</param>
    564         /// <returns></returns>
    565         bool SAdd(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0);
    566         /// <summary>
    567         /// add a member to a set(Asynchronous)
    568         /// </summary>
    569         /// <param name="key">key of set</param>
    570         /// <param name="value">value of the key</param>
    571         /// <param name="flags">behaviour</param>
    572         /// <param name="db">index of database</param>
    573         /// <returns></returns>
    574         Task<bool> SAddAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0);
    575         /// <summary>
    576         /// add multi members to a set
    577         /// </summary>
    578         /// <param name="key">key of set</param>
    579         /// <param name="values">values of the key</param>
    580         /// <param name="flags">behaviour</param>
    581         /// <param name="db">index of database</param>
    582         /// <returns></returns>
    583         long SAdd(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = 0);
    584         /// <summary>
    585         /// add multi members to a set(Asynchronous)
    586         /// </summary>
    587         /// <param name="key">key of set</param>
    588         /// <param name="values">values of the key</param>
    589         /// <param name="flags">behaviour</param>
    590         /// <param name="db">index of database</param>
    591         /// <returns></returns>
    592         Task<long> SAddAsync(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = 0);
    593         #endregion
    594 
    595         #region sismember
    596         /// <summary>
    597         /// whether member is a member of the set 
    598         /// </summary>
    599         /// <param name="key">key of set</param>
    600         /// <param name="value">value</param>
    601         /// <param name="flags">behaviour</param>
    602         /// <param name="db">index of database</param>
    603         /// <returns></returns>
    604         bool SIsMember(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0);
    605         /// <summary>
    606         /// whether member is a member of the set (Asynchronous)
    607         /// </summary>
    608         /// <param name="key">key of set</param>
    609         /// <param name="value">value</param>
    610         /// <param name="flags">behaviour</param>
    611         /// <param name="db">index of database</param>
    612         /// <returns></returns>
    613         Task<bool> SIsMemberAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0);
    614         #endregion
    615 
    616         #region smembers
    617         /// <summary>
    618         /// get all the members of the set 
    619         /// </summary>
    620         /// <param name="key">key of set</param>
    621         /// <param name="flags">behaviour</param>
    622         /// <param name="db">index of database</param>
    623         /// <returns></returns>
    624         IList<RedisValue> SMembers(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    625         /// <summary>
    626         /// get all the members of the set(Asynchronous) 
    627         /// </summary>
    628         /// <param name="key">key of set</param>
    629         /// <param name="flags">behaviour</param>
    630         /// <param name="db">index of database</param>
    631         /// <returns></returns>
    632         Task<RedisValue[]> SMembersAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    633         #endregion
    634 
    635         #region spop
    636         /// <summary>
    637         /// Removes a random elements from the set
    638         /// </summary>
    639         /// <param name="key">key of set</param>
    640         /// <param name="flags">behaviour</param>
    641         /// <param name="db">index of database</param>
    642         /// <returns></returns>
    643         RedisValue SPop(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    644         /// <summary>
    645         /// Removes a random elements from the set(Asynchronous)
    646         /// </summary>
    647         /// <param name="key">key of set</param>
    648         /// <param name="flags">behaviour</param>
    649         /// <param name="db">index of database</param>
    650         /// <returns></returns>
    651         Task<RedisValue> SPopAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    652         #endregion
    653 
    654         #region srem
    655         /// <summary>
    656         /// Remove the specified members from the set
    657         /// </summary>
    658         /// <param name="key">key of the set</param>
    659         /// <param name="value">member to remove</param>
    660         /// <param name="flags">behaviour</param>
    661         /// <param name="db">index of database</param>
    662         /// <returns></returns>
    663         bool SRem(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0);
    664         /// <summary>
    665         /// Remove the specified members from the set(Asynchronous)
    666         /// </summary>
    667         /// <param name="key">key of the set</param>
    668         /// <param name="value">member to remove</param>
    669         /// <param name="flags">behaviour</param>
    670         /// <param name="db">index of database</param>
    671         /// <returns></returns>
    672         Task<bool> SRemAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0);
    673         /// <summary>
    674         /// Remove the specified members from the set
    675         /// </summary>
    676         /// <param name="key">key of the set</param>
    677         /// <param name="value">member to remove</param>
    678         /// <param name="flags">behaviour</param>
    679         /// <param name="db">index of database</param>
    680         /// <returns></returns>
    681         long SRem(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = 0);
    682         /// <summary>
    683         /// Remove the specified members from the set(Asynchronous)
    684         /// </summary>
    685         /// <param name="key">key of the set</param>
    686         /// <param name="value">member to remove</param>
    687         /// <param name="flags">behaviour</param>
    688         /// <param name="db">index of database</param>
    689         /// <returns></returns>
    690         Task<long> SRemAsync(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = 0);
    691         #endregion
    692 
    693         #region scard
    694         /// <summary>
    695         /// get the number of elements in the set
    696         /// </summary>
    697         /// <param name="key">key of set</param>
    698         /// <param name="flags">behaviour</param>
    699         /// <param name="db">index of database</param>
    700         /// <returns></returns>
    701         long SCard(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    702         /// <summary>
    703         /// get the number of elements in the set(Asynchronous)
    704         /// </summary>
    705         /// <param name="key">key of set</param>
    706         /// <param name="flags">behaviour</param>
    707         /// <param name="db">index of database</param>
    708         /// <returns></returns>
    709         Task<long> SCardAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0);
    710         #endregion
    711 
    712         #region sinter
    713         /// <summary>
    714         /// get the members of the set resulting from the intersection of all the given sets.
    715         /// </summary>
    716         /// <param name="keys">keys</param>
    717         /// <param name="flags">behaviour</param>
    718         /// <param name="db">index of database</param>
    719         /// <returns></returns>
    720         IList<RedisValue> SInter(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0);
    721         /// <summary>
    722         /// get the members of the set resulting from the intersection of all the given sets.(Asynchronous)
    723         /// </summary>
    724         /// <param name="keys">keys</param>
    725         /// <param name="flags">behaviour</param>
    726         /// <param name="db">index of database</param>
    727         /// <returns></returns>
    728         Task<RedisValue[]> SInterAsync(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0);
    729         #endregion
    730 
    731         #region sdiff
    732         /// <summary>
    733         /// get the members of the set resulting from the difference between the first set and all the successive sets.
    734         /// </summary>
    735         /// <param name="keys">keys</param>
    736         /// <param name="flags">behaviour</param>
    737         /// <param name="db">index of database</param>
    738         /// <returns></returns>
    739         IList<RedisValue> SDiff(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0);
    740         /// <summary>
    741         /// get the members of the set resulting from the difference between the first set and all the successive sets.(Asynchronous)
    742         /// </summary>
    743         /// <param name="keys">keys</param>
    744         /// <param name="flags">behaviour</param>
    745         /// <param name="db">index of database</param>
    746         /// <returns></returns>
    747         Task<RedisValue[]> SDiffAsync(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0);
    748         #endregion
    749 
    750         #region sunion
    751         /// <summary>
    752         /// get the members of the set resulting from the union of all the given sets.
    753         /// </summary>
    754         /// <param name="keys">keys</param>
    755         /// <param name="flags">behaviour</param>
    756         /// <param name="db">index of database</param>
    757         /// <returns></returns>
    758         IList<RedisValue> SUnion(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0);
    759         /// <summary>
    760         /// get the members of the set resulting from the union of all the given sets.(Asynchronous)
    761         /// </summary>
    762         /// <param name="keys">keys</param>
    763         /// <param name="flags">behaviour</param>
    764         /// <param name="db">index of database</param>
    765         /// <returns></returns>
    766         Task<RedisValue[]> SUnionAsync(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0);
    767         #endregion
    768         #endregion
    769 
    770         #region SortedSet
    771         #region zadd
    772         /// <summary>
    773         /// Adds a member with the score to the sorted set stored at key
    774         /// </summary>
    775         /// <param name="key">key</param>
    776         /// <param name="member">member</param>
    777         /// <param name="score">score</param>
    778         /// <param name="flags">behaviour</param>
    779         /// <param name="db">index of database</param>
    780         /// <returns></returns>
    781         bool ZAdd(RedisKey key, RedisValue member, double score, CommandFlags flags = CommandFlags.None, int db = 0);
    782         /// <summary>
    783         /// Adds a member with the score to the sorted set stored at key(Asynchronous)
    784         /// </summary>
    785         /// <param name="key">key</param>
    786         /// <param name="member">member</param>
    787         /// <param name="score">score</param>
    788         /// <param name="flags">behaviour</param>
    789         /// <param name="db">index of database</param>
    790         /// <returns></returns>
    791         Task<bool> ZAddAsync(RedisKey key, RedisValue member, double score, CommandFlags flags = CommandFlags.None, int db = 0);
    792         /// <summary>
    793         /// Adds members with scores to the sorted set stored at key
    794         /// </summary>
    795         /// <param name="key">key</param>
    796         /// <param name="values">sortedset entity</param>        
    797         /// <param name="flags">behaviour</param>
    798         /// <param name="db">index of database</param>
    799         /// <returns></returns>
    800         long ZAdd(RedisKey key, IList<SortedSetEntry> values, CommandFlags flags = CommandFlags.None, int db = 0);
    801         /// <summary>
    802         /// Adds members with scores to the sorted set stored at key(Asynchronous)
    803         /// </summary>
    804         /// <param name="key">key</param>
    805         /// <param name="values">sortedset entity</param>        
    806         /// <param name="flags">behaviour</param>
    807         /// <param name="db">index of database</param>
    808         /// <returns></returns>
    809         Task<long> ZAddAsync(RedisKey key, IList<SortedSetEntry> values, CommandFlags flags = CommandFlags.None, int db = 0);
    810         #endregion 
    811 
    812         #region zrem
    813         /// <summary>
    814         /// Removes a member from the sorted set stored at key
    815         /// </summary>
    816         /// <param name="key">key</param>
    817         /// <param name="member">member</param>
    818         /// <param name="flags">behaviour</param>
    819         /// <param name="db">index of database</param>
    820         /// <returns></returns>
    821         bool ZRem(RedisKey key, RedisValue member, CommandFlags flags = CommandFlags.None, int db = 0);
    822         /// <summary>
    823         /// Removes a member from the sorted set stored at key(Async)
    824         /// </summary>
    825         /// <param name="key">key</param>
    826         /// <param name="member">member</param>
    827         /// <param name="flags">behaviour</param>
    828         /// <param name="db">index of database</param>
    829         /// <returns></returns>
    830         Task<bool> ZRemAsync(RedisKey key, RedisValue member, CommandFlags flags = CommandFlags.None, int db = 0);        
    831         /// <summary>
    832         /// Removes members from the sorted set stored at key
    833         /// </summary>
    834         /// <param name="key">key</param>
    835         /// <param name="members">members</param>
    836         /// <param name="flags">behaviour</param>
    837         /// <param name="db">index of database</param>
    838         /// <returns></returns>
    839         long ZRem(RedisKey key, IList<RedisValue> members, CommandFlags flags = CommandFlags.None, int db = 0);        
    840         /// <summary>
    841         /// Removes members from the sorted set stored at key(Asynchronous)
    842         /// </summary>
    843         /// <param name="key">key</param>
    844         /// <param name="members">members</param>
    845         /// <param name="flags">behaviour</param>
    846         /// <param name="db">index of database</param>
    847         /// <returns></returns>
    848         Task<long> ZRemAsync(RedisKey key, IList<RedisValue> members, CommandFlags flags = CommandFlags.None, int db = 0);
    849         #endregion
    850 
    851         #region zrange
    852         IList<RedisValue> ZRange(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = 0);
    853 
    854         Task<RedisValue[]> ZRangeAsync(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = 0);
    855         #endregion
    856 
    857         #region zrevrange
    858         IList<RedisValue> ZRevRange(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = 0);
    859 
    860         Task<RedisValue[]> ZRevRangeAsync(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = 0);
    861         #endregion
    862 
    863         #region zincrby
    864         double ZIncrby(RedisKey key, RedisValue member, double value = 1, CommandFlags flags = CommandFlags.None, int db = 0);
    865 
    866         Task<double> ZIncrbyAsync(RedisKey key, RedisValue member, double value = 1, CommandFlags flags = CommandFlags.None, int db = 0);        
    867         #endregion
    868         #endregion
    869 
    870         #region pub/sub
    871         void Subscribe(RedisChannel channel, Action<RedisChannel, RedisValue> handle, CommandFlags flags = CommandFlags.None, bool isRead = false);
    872 
    873         long Publish(RedisChannel channel, RedisValue value, CommandFlags flags = CommandFlags.None, bool isRead = false);
    874 
    875         void UnSubscrribe(RedisChannel channel, Action<RedisChannel, RedisValue> handle, CommandFlags flags = CommandFlags.None, bool isRead = false);
    876         #endregion
    877     }

      The Implementation are as follow:

       1 using Microsoft.Extensions.Configuration;
       2 using Newtonsoft.Json;
       3 using StackExchange.Redis;
       4 using System;
       5 using System.Collections.Generic;
       6 using System.IO;
       7 using System.Linq;
       8 using System.Threading.Tasks;
       9 
      10 namespace Redis01
      11 {
      12     public class RedisHelper : IRedis
      13     {
      14         private static IConfigurationRoot GetConnStr()
      15         {
      16             var builder = new ConfigurationBuilder();
      17             builder.SetBasePath(Directory.GetCurrentDirectory());
      18             builder.AddJsonFile("appsettings.json");
      19             var config = builder.Build();
      20             return config;
      21         }
      22 
      23         private Lazy<ConnectionMultiplexer> _writeConn = new Lazy<ConnectionMultiplexer>(() =>
      24         {
      25             return ConnectionMultiplexer.Connect(GetConnStr().GetValue<string>("RedisConfig:MasterServer"));
      26         });
      27 
      28         private Lazy<ConnectionMultiplexer> _readConn = new Lazy<ConnectionMultiplexer>(() =>
      29         {
      30             return ConnectionMultiplexer.Connect(GetConnStr().GetValue<string>("RedisConfig:SlaveServer"));
      31         });
      32 
      33         public ConnectionMultiplexer WriteConn
      34         {
      35             get { return _writeConn.Value; }
      36         }
      37 
      38         public ConnectionMultiplexer ReadConn
      39         {
      40             get { return _readConn.Value; }
      41         }
      42 
      43         private IDatabase GetDatabase(int db = 0, bool isRead = false)
      44         {
      45             return isRead ?
      46                    ReadConn.GetDatabase(db) :
      47                    WriteConn.GetDatabase(db);
      48         }
      49 
      50 
      51         private ISubscriber GetSubscriber(bool isRead = false, object asyncState = null)
      52         {
      53             return isRead ?
      54                    ReadConn.GetSubscriber(asyncState) :
      55                    WriteConn.GetSubscriber(asyncState);
      56         }
      57 
      58         public ITransaction GetTransaction(int db = 0, bool isRead = false)
      59         {
      60             return GetDatabase(db).CreateTransaction();
      61         }
      62 
      63         #region string
      64         /// <summary>
      65         /// get the string value
      66         /// </summary>
      67         /// <param name="key">the key of value</param>
      68         /// <param name="flag">behaviour</param>
      69         /// <param name="db">index of database</param>
      70         /// <returns></returns>
      71         public RedisValue Get(string key, CommandFlags flag = CommandFlags.None, int db = 0)
      72         {
      73             return GetDatabase(db, true).StringGet(key, flag);
      74         }
      75         /// <summary>
      76         /// get the string value(Asynchronous)
      77         /// </summary>
      78         /// <param name="key">the key of value</param>
      79         /// <param name="flag">behaviour</param>
      80         /// <param name="db">index of database</param>
      81         /// <returns></returns>
      82         public Task<RedisValue> GetAsync(string key, CommandFlags flag = CommandFlags.None, int db = 0)
      83         {
      84             return GetDatabase(db, true).StringGetAsync(key, flag);
      85         }
      86 
      87         /// <summary>
      88         /// set value to key
      89         /// </summary>
      90         /// <param name="key">the key</param>
      91         /// <param name="value">the value of the key</param>
      92         /// <param name="expiry">time to expiry</param>
      93         /// <param name="when">when this operation should be performed</param>
      94         /// <param name="flags">behaviour</param>
      95         /// <param name="db">index of database</param>
      96         /// <returns></returns>
      97         public RedisValue Set(string key, string value, TimeSpan? expiry = default(TimeSpan?), When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0)
      98         {
      99             return GetDatabase(db).StringSet(key, value, expiry, when, flags);
     100         }
     101         /// <summary>
     102         /// set value to key(Asynchronous)
     103         /// </summary>
     104         /// <param name="key">the key</param>
     105         /// <param name="value">the value of the key</param>
     106         /// <param name="expiry">time to expiry</param>
     107         /// <param name="when">when this operation should be performed</param>
     108         /// <param name="flags">behaviour</param>
     109         /// <param name="db">index of database</param>
     110         /// <returns></returns>
     111         public Task<bool> SetAsync(string key, string value, TimeSpan? expiry = default(TimeSpan?), When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0)
     112         {
     113             return GetDatabase(db).StringSetAsync(key, value, expiry, when, flags);
     114         }
     115 
     116         /// <summary>
     117         /// get the entity by deserialization
     118         /// </summary>
     119         /// <param name="key">the key of value</param>
     120         /// <param name="flag">behaviour</param>
     121         /// <param name="db">index of database</param>
     122         /// <returns></returns>
     123         public T Get<T>(string key, CommandFlags flags = CommandFlags.None, int db = 0)
     124         {
     125             try
     126             {
     127                 return JsonConvert.DeserializeObject<T>(GetDatabase(db, true).StringGet(key, flags));
     128             }
     129             catch (Exception ex)
     130             {
     131                 return default(T);
     132             }
     133         }
     134         /// <summary>
     135         /// get the entity by deserialization(Asynchronous)
     136         /// </summary>
     137         /// <param name="key">the key of value</param>
     138         /// <param name="flag">behaviour</param>
     139         /// <param name="db">index of database</param>
     140         /// <returns></returns>
     141         public Task<T> GetAsync<T>(string key, CommandFlags flags = CommandFlags.None, int db = 0)
     142         {
     143             try
     144             {
     145                 var res = GetDatabase(db, true).StringGetAsync(key, flags);
     146                 return JsonConvert.DeserializeObject<Task<T>>(res.ToString());
     147             }
     148             catch (Exception ex)
     149             {
     150                 return default(Task<T>);
     151             }
     152         }
     153 
     154         /// <summary>
     155         /// get multi values 
     156         /// </summary>
     157         /// <param name="keys">the keys of the values</param>
     158         /// <param name="flags">behaviour</param>
     159         /// <param name="db">index of database</param>
     160         /// <returns></returns>
     161         public IList<RedisValue> MGet(List<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0)
     162         {
     163             return GetDatabase(db, true).StringGet(keys.ToArray(), flags);
     164         }
     165         /// <summary>
     166         /// get multi values(Asynchronous)
     167         /// </summary>
     168         /// <param name="keys">the keys of the values</param>
     169         /// <param name="flags">behaviour</param>
     170         /// <param name="db">index of database</param>
     171         /// <returns></returns>
     172         public Task<RedisValue[]> MGetAsync(List<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0)
     173         {
     174             return GetDatabase(db, true).StringGetAsync(keys.ToArray(), flags);
     175         }
     176 
     177         /// <summary>
     178         /// set multi values
     179         /// </summary>
     180         /// <param name="kvs">key-values</param>
     181         /// <param name="when">when this operation should be performed</param>
     182         /// <param name="flags">behaviour</param>
     183         /// <param name="db">index of database</param>
     184         /// <returns></returns>
     185         public bool MSet(List<KeyValuePair<RedisKey, RedisValue>> kvs, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0)
     186         {
     187             return GetDatabase(db).StringSet(kvs.ToArray(), when, flags);
     188         }
     189         /// <summary>
     190         /// set multi values(Asynchronous)
     191         /// </summary>
     192         /// <param name="kvs">key-values</param>
     193         /// <param name="when">when this operation should be performed</param>
     194         /// <param name="flags">behaviour</param>
     195         /// <param name="db">index of database</param>
     196         /// <returns></returns>
     197         public Task<bool> MSetAsync(List<KeyValuePair<RedisKey, RedisValue>> kvs, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0)
     198         {
     199             return GetDatabase(db).StringSetAsync(kvs.ToArray(), when, flags);
     200         }
     201 
     202         /// <summary>
     203         /// handle the numeric value
     204         /// </summary>
     205         /// <param name="key">key</param>
     206         /// <param name="amount">value to increase or decrease</param>
     207         /// <param name="flags">behaviour</param>
     208         /// <param name="db">index of database</param>
     209         /// <returns></returns>
     210         public double IncrOrDecrBy(RedisKey key, double amount, CommandFlags flags = CommandFlags.None, int db = 0)
     211         {
     212             return GetDatabase(db).StringIncrement(key, amount, flags);
     213         }
     214         /// <summary>
     215         /// handle the numeric value(Asynchronous)
     216         /// </summary>
     217         /// <param name="key">key</param>
     218         /// <param name="amount">value to increase or decrease</param>
     219         /// <param name="flags">behaviour</param>
     220         /// <param name="db">index of database</param>
     221         /// <returns></returns>
     222         public Task<double> IncrOrDecrByAsync(RedisKey key, double value, CommandFlags flags = CommandFlags.None, int db = 0)
     223         {
     224             return GetDatabase(db).StringIncrementAsync(key, value, flags);
     225         }
     226 
     227         /// <summary>
     228         /// append value to the key
     229         /// </summary>
     230         /// <param name="key">key</param>
     231         /// <param name="value">value to append</param>
     232         /// <param name="flags">behaviour</param>
     233         /// <param name="db">index of database</param>
     234         /// <returns></returns>
     235         public long Append(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0)
     236         {
     237             return GetDatabase(db).StringAppend(key, value, flags);
     238         }
     239         /// <summary>
     240         /// append value to the key(Asynchronous)
     241         /// </summary>
     242         /// <param name="key">key</param>
     243         /// <param name="value">value to append</param>
     244         /// <param name="flags">behaviour</param>
     245         /// <param name="db">index of database</param>
     246         /// <returns></returns>
     247         public Task<long> AppendAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0)
     248         {
     249             return GetDatabase(db).StringAppendAsync(key, value, flags);
     250         }
     251 
     252         /// <summary>
     253         /// get the value's length by the key
     254         /// </summary>
     255         /// <param name="key">key</param>
     256         /// <param name="flags">behaviour</param>
     257         /// <param name="db">index of database</param>
     258         /// <returns></returns>
     259         public long StrLen(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     260         {
     261             return GetDatabase(db).StringLength(key, flags);
     262         }
     263         /// <summary>
     264         /// get the value's length by the key(Asynchronous)
     265         /// </summary>
     266         /// <param name="key">key</param>
     267         /// <param name="flags">behaviour</param>
     268         /// <param name="db">index of database</param>
     269         /// <returns></returns>
     270         public Task<long> StrLenAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     271         {
     272             return GetDatabase(db).StringLengthAsync(key, flags);
     273         }
     274         #endregion
     275 
     276         #region Hash
     277         /// <summary>
     278         /// get the value of key's field
     279         /// </summary>
     280         /// <param name="key">key</param>
     281         /// <param name="field">field of key</param>
     282         /// <param name="flags">behaviour</param>
     283         /// <param name="db">index of database</param>
     284         /// <returns></returns>
     285         public RedisValue HGet(RedisKey key, RedisValue field, CommandFlags flags = CommandFlags.None, int db = 0)
     286         {
     287             return GetDatabase(db, true).HashGet(key, field, CommandFlags.None);
     288         }
     289         /// <summary>
     290         /// get the value of key's field(Asynchronous)
     291         /// </summary>
     292         /// <param name="key">key</param>
     293         /// <param name="field">field of key</param>
     294         /// <param name="flags">behaviour</param>
     295         /// <param name="db">index of database</param>
     296         /// <returns></returns>
     297         public Task<RedisValue> HGetAsync(RedisKey key, RedisValue field, CommandFlags flags = CommandFlags.None, int db = 0)
     298         {
     299             return GetDatabase(db, true).HashGetAsync(key, field, CommandFlags.None);
     300         }
     301 
     302         /// <summary>
     303         /// set the field and value of the key
     304         /// </summary>
     305         /// <param name="key">key</param>
     306         /// <param name="field">field of the key</param>
     307         /// <param name="value">value of the field</param>
     308         /// <param name="when">when this operation should be performed</param>
     309         /// <param name="flags">behaviour</param>
     310         /// <param name="db">index of database</param>
     311         /// <returns></returns>
     312         public bool HSet(RedisKey key, RedisValue field, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0)
     313         {
     314             return GetDatabase(db).HashSet(key, field, value, When.Always, CommandFlags.None);
     315         }
     316         /// <summary>
     317         /// set the field and value of the key
     318         /// </summary>
     319         /// <param name="key">key</param>
     320         /// <param name="field">field of the key</param>
     321         /// <param name="value">value of the field</param>
     322         /// <param name="when">when this operation should be performed</param>
     323         /// <param name="flags">behaviour</param>
     324         /// <param name="db">index of database</param>
     325         /// <returns></returns>
     326         public Task<bool> HSetAsync(RedisKey key, RedisValue field, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0)
     327         {
     328             return GetDatabase(db).HashSetAsync(key, field, value, When.Always, CommandFlags.None);
     329         }
     330 
     331         /// <summary>
     332         /// get multi values of key's fields
     333         /// </summary>
     334         /// <param name="key">key</param>
     335         /// <param name="fields">fields of key</param>
     336         /// <param name="flags">behaviour</param>
     337         /// <param name="db">index of database</param>
     338         /// <returns></returns>
     339         public IList<RedisValue> HMGet(RedisKey key, List<RedisValue> fields, CommandFlags flags = CommandFlags.None, int db = 0)
     340         {
     341             return GetDatabase(db, true).HashGet(key, fields.ToArray(), flags);
     342         }
     343         /// <summary>
     344         /// get multi values of key's fields(Asynchronous)
     345         /// </summary>
     346         /// <param name="key">key</param>
     347         /// <param name="fields">fields of key</param>
     348         /// <param name="flags">behaviour</param>
     349         /// <param name="db">index of database</param>
     350         /// <returns></returns>
     351         public Task<RedisValue[]> HMGetAsync(RedisKey key, List<RedisValue> fields, CommandFlags flags = CommandFlags.None, int db = 0)
     352         {
     353             return GetDatabase(db, true).HashGetAsync(key, fields.ToArray(), flags);
     354         }
     355 
     356         /// <summary>
     357         /// set multi values of key's fields
     358         /// </summary>
     359         /// <param name="key">key</param>
     360         /// <param name="entry">name/value pair</param>
     361         /// <param name="flags">behaviour</param>
     362         /// <param name="db">index of database</param>
     363         public void HMSet(RedisKey key, List<HashEntry> entry, CommandFlags flags = CommandFlags.None, int db = 0)
     364         {
     365             GetDatabase(db).HashSet(key, entry.ToArray(), flags);
     366         }
     367         /// <summary>
     368         /// set multi values of key's fields(Asynchronous)
     369         /// </summary>
     370         /// <param name="key">key</param>
     371         /// <param name="entry">name/value pair</param>
     372         /// <param name="flags">behaviour</param>
     373         /// <param name="db">index of database</param>
     374         public Task HMSetAsync(RedisKey key, List<HashEntry> entry, CommandFlags flags = CommandFlags.None, int db = 0)
     375         {
     376             return GetDatabase(db).HashSetAsync(key, entry.ToArray(), flags);
     377         }
     378 
     379         /// <summary>
     380         /// get all the fields of the key
     381         /// </summary>
     382         /// <param name="key">key</param>
     383         /// <param name="flags">behaviour</param>
     384         /// <param name="db">index of database</param>
     385         /// <returns></returns>
     386         public IList<RedisValue> HKeys(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     387         {
     388             return GetDatabase(db, true).HashKeys(key, flags).ToList();
     389         }
     390         /// <summary>
     391         /// get all the fields of the key(Asynchronous)
     392         /// </summary>
     393         /// <param name="key">key</param>
     394         /// <param name="flags">behaviour</param>
     395         /// <param name="db">index of database</param>
     396         /// <returns></returns>
     397         public Task<RedisValue[]> HKeysAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     398         {
     399             return GetDatabase(db, true).HashKeysAsync(key, flags);
     400         }
     401 
     402         /// <summary>
     403         /// get all the values of key's fields
     404         /// </summary>
     405         /// <param name="key">key</param>
     406         /// <param name="flags">behaviour</param>
     407         /// <param name="db">index of database</param>
     408         /// <returns></returns>
     409         public IList<RedisValue> HVals(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     410         {
     411             return GetDatabase(db, true).HashValues(key, flags).ToList();
     412         }
     413         /// <summary>
     414         /// get all the values of key's fields(Asynchronous)
     415         /// </summary>
     416         /// <param name="key">key</param>
     417         /// <param name="flags">behaviour</param>
     418         /// <param name="db">index of database</param>
     419         /// <returns></returns>
     420         public Task<RedisValue[]> HValsAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     421         {
     422             return GetDatabase(db, true).HashValuesAsync(key, flags);
     423         }
     424 
     425         /// <summary>
     426         /// handle the numeric value
     427         /// </summary>
     428         /// <param name="key">key</param>
     429         /// <param name="hashField">field of key</param>
     430         /// <param name="amount">value to increase or decrease</param>
     431         /// <param name="flags">behaviour</param>
     432         /// <param name="db">index of database</param>
     433         /// <returns></returns>
     434         public double HIncrOrDecrBy(RedisKey key, RedisValue hashField, double amount = 1, CommandFlags flags = CommandFlags.None, int db = 0)
     435         {
     436             return GetDatabase(db).HashIncrement(key, hashField, amount, flags);
     437         }
     438         /// <summary>
     439         /// handle the numeric value(Asynchronous)
     440         /// </summary>
     441         /// <param name="key">key</param>
     442         /// <param name="hashField">field of key</param>
     443         /// <param name="amount">value to increase or decrease</param>
     444         /// <param name="flags">behaviour</param>
     445         /// <param name="db">index of database</param>
     446         /// <returns></returns>
     447         public Task<double> HIncrOrDecrByAsync(RedisKey key, RedisValue hashField, double amount = 1, CommandFlags flags = CommandFlags.None, int db = 0)
     448         {
     449             return GetDatabase(db).HashIncrementAsync(key, hashField, amount, flags);
     450         }
     451 
     452         /// <summary>
     453         /// whether a field exists in the key
     454         /// </summary>
     455         /// <param name="key">key</param>
     456         /// <param name="hashField">field of key</param>
     457         /// <param name="flags">behaviour</param>
     458         /// <param name="db">index of database</param>
     459         /// <returns></returns>
     460         public bool HExists(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = 0)
     461         {
     462             return GetDatabase(0, true).HashExists(key, hashField, flags);
     463         }
     464         /// <summary>
     465         /// whether a field exists in the key(Asynchronous)
     466         /// </summary>
     467         /// <param name="key">key</param>
     468         /// <param name="hashField">field of key</param>
     469         /// <param name="flags">behaviour</param>
     470         /// <param name="db">index of database</param>
     471         /// <returns></returns>
     472         public Task<bool> HExistsAsync(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = 0)
     473         {
     474             return GetDatabase(0, true).HashExistsAsync(key, hashField, flags);
     475         }
     476 
     477         /// <summary>
     478         /// delete the field from the key
     479         /// </summary>
     480         /// <param name="key">key</param>
     481         /// <param name="hashField">field of key</param>
     482         /// <param name="flags">behaviour</param>
     483         /// <param name="db">index of database</param>
     484         /// <returns></returns>
     485         public bool HDel(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = 0)
     486         {
     487             return GetDatabase(db).HashDelete(key, hashField, flags);
     488         }
     489         /// <summary>
     490         /// delete the field from the key(Asynchronous)
     491         /// </summary>
     492         /// <param name="key">key</param>
     493         /// <param name="hashField">field of key</param>
     494         /// <param name="flags">behaviour</param>
     495         /// <param name="db">index of database</param>
     496         /// <returns></returns>
     497         public Task<bool> HDelAsync(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = 0)
     498         {
     499             return GetDatabase(db).HashDeleteAsync(key, hashField, flags);
     500         }
     501         /// <summary>
     502         /// delete fields from the key
     503         /// </summary>
     504         /// <param name="key">key</param>
     505         /// <param name="hashFields">fields of key</param>
     506         /// <param name="flags">behaviour</param>
     507         /// <param name="db">index of database</param>
     508         /// <returns></returns>
     509         public long HDel(RedisKey key, IList<RedisValue> hashFields, CommandFlags flags = CommandFlags.None, int db = 0)
     510         {
     511             return GetDatabase(db).HashDelete(key, hashFields.ToArray(), flags);
     512         }
     513         /// <summary>
     514         /// delete fields from the key(Asynchronous)
     515         /// </summary>
     516         /// <param name="key">key</param>
     517         /// <param name="hashFields">fields of key</param>
     518         /// <param name="flags">behaviour</param>
     519         /// <param name="db">index of database</param>
     520         /// <returns></returns>
     521         public Task<long> HDelAsync(RedisKey key, IList<RedisValue> hashFields, CommandFlags flags = CommandFlags.None, int db = 0)
     522         {
     523             return GetDatabase(db).HashDeleteAsync(key, hashFields.ToArray(), flags);
     524         }
     525         #endregion
     526 
     527         #region List
     528         /// <summary>
     529         /// insert the value to the head of list
     530         /// </summary>
     531         /// <param name="key">key</param>
     532         /// <param name="value">node's value</param>
     533         /// <param name="when">when this operation should be performed</param>
     534         /// <param name="flags">behaviour</param>
     535         /// <param name="db">index of database</param>
     536         /// <returns></returns>
     537         public long LPush(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0)
     538         {
     539             return GetDatabase(db).ListLeftPush(key, value, when, flags);
     540         }
     541         /// <summary>
     542         /// insert the value to the head of list(Asynchronous)
     543         /// </summary>
     544         /// <param name="key">key</param>
     545         /// <param name="value">node's value</param>
     546         /// <param name="when">when this operation should be performed</param>
     547         /// <param name="flags">behaviour</param>
     548         /// <param name="db">index of database</param>
     549         /// <returns></returns>
     550         public Task<long> LPushAsync(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0)
     551         {
     552             return GetDatabase(db).ListLeftPushAsync(key, value, when, flags);
     553         }
     554 
     555         /// <summary>
     556         /// insert the value to the tail of list
     557         /// </summary>
     558         /// <param name="key">key</param>
     559         /// <param name="value">node's value</param>
     560         /// <param name="when">when this operation should be performed</param>
     561         /// <param name="flags">behaviour</param>
     562         /// <param name="db">index of database</param>
     563         /// <returns></returns>
     564         public long RPush(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0)
     565         {
     566             return GetDatabase(db).ListRightPush(key, value, when, flags);
     567         }
     568         /// <summary>
     569         /// insert the value to the tail of list(Asynchronous)
     570         /// </summary>
     571         /// <param name="key">key</param>
     572         /// <param name="value">node's value</param>
     573         /// <param name="when">when this operation should be performed</param>
     574         /// <param name="flags">behaviour</param>
     575         /// <param name="db">index of database</param>
     576         /// <returns></returns>
     577         public Task<long> RPushAsync(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = 0)
     578         {
     579             return GetDatabase(db).ListRightPushAsync(key, value, when, flags);
     580         }
     581 
     582         /// <summary>
     583         /// removes the first element of the list
     584         /// </summary>
     585         /// <param name="key">key</param>
     586         /// <param name="flags">behaviour</param>
     587         /// <param name="db">index of database</param>
     588         /// <returns></returns>
     589         public RedisValue LPop(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     590         {
     591             return GetDatabase(db).ListLeftPop(key, flags);
     592         }
     593         /// <summary>
     594         /// removes the first element of the list(Asynchronous)
     595         /// </summary>
     596         /// <param name="key">key</param>
     597         /// <param name="flags">behaviour</param>
     598         /// <param name="db">index of database</param>
     599         /// <returns></returns>
     600         public Task<RedisValue> LPopAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     601         {
     602             return GetDatabase(db).ListLeftPopAsync(key, flags);
     603         }
     604 
     605         /// <summary>
     606         ///  removes the first count occurrences of elements equal to value from the list
     607         /// </summary>
     608         /// <param name="key">key</param>
     609         /// <param name="value">value</param>
     610         /// <param name="count">amount of the node's value equal to the value</param>
     611         /// <param name="flags">behaviour</param>
     612         /// <param name="db">index of database</param>
     613         /// <returns></returns>
     614         public long LRem(RedisKey key, RedisValue value, long count = 0, CommandFlags flags = CommandFlags.None, int db = 0)
     615         {
     616             return GetDatabase(db).ListRemove(key, value, count, flags);
     617         }
     618         /// <summary>
     619         ///  removes the first count occurrences of elements equal to value from the list(Asynchronous)
     620         /// </summary>
     621         /// <param name="key">key</param>
     622         /// <param name="value">value</param>
     623         /// <param name="count">amount of the node's value equal to the value</param>
     624         /// <param name="flags">behaviour</param>
     625         /// <param name="db">index of database</param>
     626         /// <returns></returns>
     627         public Task<long> LRemAsync(RedisKey key, RedisValue value, long count = 0, CommandFlags flags = CommandFlags.None, int db = 0)
     628         {
     629             return GetDatabase(db).ListRemoveAsync(key, value, count, flags);
     630         }
     631 
     632         /// <summary>
     633         /// get the specified elements of the list stored at key
     634         /// </summary>
     635         /// <param name="key">key</param>
     636         /// <param name="start">start index</param>
     637         /// <param name="stop">stop index</param>
     638         /// <param name="flags">behaviour</param>
     639         /// <param name="db">index of database</param>
     640         /// <returns></returns>
     641         public IList<RedisValue> LRange(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = 0)
     642         {
     643             return GetDatabase(db, true).ListRange(key, start, stop, flags).ToList();
     644         }
     645         /// <summary>
     646         /// get the specified elements of the list stored at key(Asynchronous)
     647         /// </summary>
     648         /// <param name="key">key</param>
     649         /// <param name="start">start index</param>
     650         /// <param name="stop">stop index</param>
     651         /// <param name="flags">behaviour</param>
     652         /// <param name="db">index of database</param>
     653         /// <returns></returns>
     654         public Task<RedisValue[]> LRangeAsync(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = 0)
     655         {
     656             return GetDatabase(db, true).ListRangeAsync(key, start, stop, flags);
     657         }
     658 
     659         /// <summary>
     660         /// get the length of the list
     661         /// </summary>
     662         /// <param name="key">key</param>
     663         /// <param name="flags">behaviour</param>
     664         /// <param name="db">index of database</param>
     665         /// <returns></returns>
     666         public long LLen(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     667         {
     668             return GetDatabase(db, true).ListLength(key, flags);
     669         }
     670         /// <summary>
     671         /// get the length of the list(Asynchronous)
     672         /// </summary>
     673         /// <param name="key">key</param>
     674         /// <param name="flags">behaviour</param>
     675         /// <param name="db">index of database</param>
     676         /// <returns></returns>
     677         public Task<long> LLenAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     678         {
     679             return GetDatabase(db, true).ListLengthAsync(key, flags);
     680         }
     681 
     682         /// <summary>
     683         ///  get the element at index index in the list
     684         /// </summary>
     685         /// <param name="key">key</param>
     686         /// <param name="index">index</param>
     687         /// <param name="flags">behaviour</param>
     688         /// <param name="db">index of database</param>
     689         /// <returns></returns>
     690         public RedisValue LIndex(RedisKey key, long index, CommandFlags flags = CommandFlags.None, int db = 0)
     691         {
     692             return GetDatabase(db, true).ListGetByIndex(key, index, flags);
     693         }
     694         /// <summary>
     695         ///  get the element at index index in the list(Asynchronous)
     696         /// </summary>
     697         /// <param name="key">key</param>
     698         /// <param name="index">index</param>
     699         /// <param name="flags">behaviour</param>
     700         /// <param name="db">index of database</param>
     701         /// <returns></returns>
     702         public Task<RedisValue> LIndexAsync(RedisKey key, long index, CommandFlags flags = CommandFlags.None, int db = 0)
     703         {
     704             return GetDatabase(db, true).ListGetByIndexAsync(key, index, flags);
     705         }
     706 
     707         /// <summary>
     708         /// inserts value in the list stored at key either before or after the reference value pivot.
     709         /// </summary>
     710         /// <param name="key"></param>
     711         /// <param name="pivot"></param>
     712         /// <param name="value"></param>
     713         /// <param name="flags"></param>
     714         /// <param name="isAfter"></param>
     715         /// <param name="db"></param>
     716         /// <returns></returns>
     717         public long LInsert(RedisKey key, RedisValue pivot, RedisValue value, CommandFlags flags = CommandFlags.None, bool isAfter = false, int db = 0)
     718         {
     719             return isAfter
     720                 ? GetDatabase(db).ListInsertAfter(key, pivot, value, flags)
     721                 : GetDatabase(db).ListInsertBefore(key, pivot, value, flags);
     722         }
     723         /// <summary>
     724         /// inserts value in the list stored at key either before or after the reference value pivot.
     725         /// </summary>
     726         /// <param name="key"></param>
     727         /// <param name="pivot"></param>
     728         /// <param name="value"></param>
     729         /// <param name="flags"></param>
     730         /// <param name="isAfter"></param>
     731         /// <param name="db"></param>
     732         /// <returns></returns>
     733         public Task<long> LInsertAsync(RedisKey key, RedisValue pivot, RedisValue value, CommandFlags flags = CommandFlags.None, bool isAfter = false, int db = 0)
     734         {
     735             return isAfter
     736                 ? GetDatabase(db).ListInsertAfterAsync(key, pivot, value, flags)
     737                 : GetDatabase(db).ListInsertBeforeAsync(key, pivot, value, flags);
     738         }
     739         #endregion
     740 
     741         #region Set
     742 
     743         #region sadd
     744         /// <summary>
     745         /// add a member to a set
     746         /// </summary>
     747         /// <param name="key">key of set</param>
     748         /// <param name="value">value of the key</param>
     749         /// <param name="flags">behaviour</param>
     750         /// <param name="db">index of database</param>
     751         /// <returns></returns>
     752         public bool SAdd(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0)
     753         {
     754             return GetDatabase(db).SetAdd(key, value, flags);
     755         }
     756         /// <summary>
     757         /// add a member to a set(Asynchronous)
     758         /// </summary>
     759         /// <param name="key">key of set</param>
     760         /// <param name="value">value of the key</param>
     761         /// <param name="flags">behaviour</param>
     762         /// <param name="db">index of database</param>
     763         /// <returns></returns>
     764         public Task<bool> SAddAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0)
     765         {
     766             return GetDatabase(db).SetAddAsync(key, value, flags);
     767         }
     768         /// <summary>
     769         /// add multi members to a set
     770         /// </summary>
     771         /// <param name="key">key of set</param>
     772         /// <param name="values">values of the key</param>
     773         /// <param name="flags">behaviour</param>
     774         /// <param name="db">index of database</param>
     775         /// <returns></returns>
     776         public long SAdd(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = 0)
     777         {
     778             return GetDatabase(db).SetAdd(key, values.ToArray(), flags);
     779         }
     780         /// <summary>
     781         /// add multi members to a set(Asynchronous)
     782         /// </summary>
     783         /// <param name="key">key of set</param>
     784         /// <param name="values">values of the key</param>
     785         /// <param name="flags">behaviour</param>
     786         /// <param name="db">index of database</param>
     787         /// <returns></returns>
     788         public Task<long> SAddAsync(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = 0)
     789         {
     790             return GetDatabase(db).SetAddAsync(key, values.ToArray(), flags);
     791         }
     792         #endregion
     793 
     794         #region sismember
     795         /// <summary>
     796         /// whether member is a member of the set 
     797         /// </summary>
     798         /// <param name="key">key of set</param>
     799         /// <param name="value">value</param>
     800         /// <param name="flags">behaviour</param>
     801         /// <param name="db">index of database</param>
     802         /// <returns></returns>
     803         public bool SIsMember(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0)
     804         {
     805             return GetDatabase(db, true).SetContains(key, value, flags);
     806         }
     807         /// <summary>
     808         /// whether member is a member of the set (Asynchronous)
     809         /// </summary>
     810         /// <param name="key">key of set</param>
     811         /// <param name="value">value</param>
     812         /// <param name="flags">behaviour</param>
     813         /// <param name="db">index of database</param>
     814         /// <returns></returns>
     815         public Task<bool> SIsMemberAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0)
     816         {
     817             return GetDatabase(db, true).SetContainsAsync(key, value, flags);
     818         }
     819         #endregion
     820 
     821         #region smembers
     822         /// <summary>
     823         /// get all the members of the set 
     824         /// </summary>
     825         /// <param name="key">key of set</param>
     826         /// <param name="flags">behaviour</param>
     827         /// <param name="db">index of database</param>
     828         /// <returns></returns>
     829         public IList<RedisValue> SMembers(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     830         {
     831             return GetDatabase(db, true).SetMembers(key, flags).ToList();
     832         }
     833         /// <summary>
     834         /// get all the members of the set(Asynchronous) 
     835         /// </summary>
     836         /// <param name="key">key of set</param>
     837         /// <param name="flags">behaviour</param>
     838         /// <param name="db">index of database</param>
     839         /// <returns></returns>
     840         public Task<RedisValue[]> SMembersAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     841         {
     842             return GetDatabase(db, true).SetMembersAsync(key, flags);
     843         }
     844         #endregion
     845 
     846         #region spop
     847         /// <summary>
     848         /// Removes a random elements from the set
     849         /// </summary>
     850         /// <param name="key">key of set</param>
     851         /// <param name="flags">behaviour</param>
     852         /// <param name="db">index of database</param>
     853         /// <returns></returns>
     854         public RedisValue SPop(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     855         {
     856             return GetDatabase(db).SetPop(key, flags);
     857         }
     858         /// <summary>
     859         /// Removes a random elements from the set(Asynchronous)
     860         /// </summary>
     861         /// <param name="key">key of set</param>
     862         /// <param name="flags">behaviour</param>
     863         /// <param name="db">index of database</param>
     864         /// <returns></returns>
     865         public Task<RedisValue> SPopAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     866         {
     867             return GetDatabase(db).SetPopAsync(key, flags);
     868         }
     869         #endregion
     870 
     871         #region srem
     872         /// <summary>
     873         /// Remove the specified members from the set
     874         /// </summary>
     875         /// <param name="key">key of the set</param>
     876         /// <param name="value">member to remove</param>
     877         /// <param name="flags">behaviour</param>
     878         /// <param name="db">index of database</param>
     879         /// <returns></returns>
     880         public bool SRem(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0)
     881         {
     882             return GetDatabase(db).SetRemove(key, value, flags);
     883         }
     884         /// <summary>
     885         /// Remove the specified members from the set(Asynchronous)
     886         /// </summary>
     887         /// <param name="key">key of the set</param>
     888         /// <param name="value">member to remove</param>
     889         /// <param name="flags">behaviour</param>
     890         /// <param name="db">index of database</param>
     891         /// <returns></returns>
     892         public Task<bool> SRemAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = 0)
     893         {
     894             return GetDatabase(db).SetRemoveAsync(key, value, flags);
     895         }
     896         /// <summary>
     897         /// Remove the specified members from the set
     898         /// </summary>
     899         /// <param name="key">key of the set</param>
     900         /// <param name="value">member to remove</param>
     901         /// <param name="flags">behaviour</param>
     902         /// <param name="db">index of database</param>
     903         /// <returns></returns>
     904         public long SRem(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = 0)
     905         {
     906             return GetDatabase(db).SetRemove(key, values.ToArray(), flags);
     907         }
     908         /// <summary>
     909         /// Remove the specified members from the set(Asynchronous)
     910         /// </summary>
     911         /// <param name="key">key of the set</param>
     912         /// <param name="value">member to remove</param>
     913         /// <param name="flags">behaviour</param>
     914         /// <param name="db">index of database</param>
     915         /// <returns></returns>
     916         public Task<long> SRemAsync(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = 0)
     917         {
     918             return GetDatabase(db).SetRemoveAsync(key, values.ToArray(), flags);
     919         }
     920         #endregion
     921 
     922         #region scard
     923         /// <summary>
     924         /// get the number of elements in the set
     925         /// </summary>
     926         /// <param name="key">key of set</param>
     927         /// <param name="flags">behaviour</param>
     928         /// <param name="db">index of database</param>
     929         /// <returns></returns>
     930         public long SCard(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     931         {
     932             return GetDatabase(db, true).SetLength(key, flags);
     933         }
     934         /// <summary>
     935         /// get the number of elements in the set(Asynchronous)
     936         /// </summary>
     937         /// <param name="key">key of set</param>
     938         /// <param name="flags">behaviour</param>
     939         /// <param name="db">index of database</param>
     940         /// <returns></returns>
     941         public Task<long> SCardAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = 0)
     942         {
     943             return GetDatabase(db, true).SetLengthAsync(key, flags);
     944         }
     945         #endregion
     946 
     947         #region sinter
     948         /// <summary>
     949         /// get the members of the set resulting from the intersection of all the given sets.
     950         /// </summary>
     951         /// <param name="keys">keys</param>
     952         /// <param name="flags">behaviour</param>
     953         /// <param name="db">index of database</param>
     954         /// <returns></returns>
     955         public IList<RedisValue> SInter(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0)
     956         {
     957             return GetDatabase(db, true).SetCombine(SetOperation.Intersect, keys.ToArray(), flags).ToList();
     958         }
     959         /// <summary>
     960         /// get the members of the set resulting from the intersection of all the given sets.(Asynchronous)
     961         /// </summary>
     962         /// <param name="keys">keys</param>
     963         /// <param name="flags">behaviour</param>
     964         /// <param name="db">index of database</param>
     965         /// <returns></returns>
     966         public Task<RedisValue[]> SInterAsync(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0)
     967         {
     968             return GetDatabase(db, true).SetCombineAsync(SetOperation.Intersect, keys.ToArray(), flags);
     969         }
     970         #endregion
     971         
     972         #region sdiff
     973         /// <summary>
     974         /// get the members of the set resulting from the difference between the first set and all the successive sets.
     975         /// </summary>
     976         /// <param name="keys">keys</param>
     977         /// <param name="flags">behaviour</param>
     978         /// <param name="db">index of database</param>
     979         /// <returns></returns>
     980         public IList<RedisValue> SDiff(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0)
     981         {
     982             return GetDatabase(db, true).SetCombine(SetOperation.Difference, keys.ToArray(), flags).ToList();
     983         }
     984         /// <summary>
     985         /// get the members of the set resulting from the difference between the first set and all the successive sets.(Asynchronous)
     986         /// </summary>
     987         /// <param name="keys">keys</param>
     988         /// <param name="flags">behaviour</param>
     989         /// <param name="db">index of database</param>
     990         /// <returns></returns>
     991         public Task<RedisValue[]> SDiffAsync(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0)
     992         {
     993             return GetDatabase(db, true).SetCombineAsync(SetOperation.Difference, keys.ToArray(), flags);
     994         }
     995         #endregion
     996 
     997         #region sunion
     998         /// <summary>
     999         /// get the members of the set resulting from the union of all the given sets.
    1000         /// </summary>
    1001         /// <param name="keys">keys</param>
    1002         /// <param name="flags">behaviour</param>
    1003         /// <param name="db">index of database</param>
    1004         /// <returns></returns>
    1005         public IList<RedisValue> SUnion(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0)
    1006         {
    1007             return GetDatabase(db, true).SetCombine(SetOperation.Union, keys.ToArray(), flags).ToList();
    1008         }
    1009         /// <summary>
    1010         /// get the members of the set resulting from the union of all the given sets.(Asynchronous)
    1011         /// </summary>
    1012         /// <param name="keys">keys</param>
    1013         /// <param name="flags">behaviour</param>
    1014         /// <param name="db">index of database</param>
    1015         /// <returns></returns>
    1016         public Task<RedisValue[]> SUnionAsync(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = 0)
    1017         {
    1018             return GetDatabase(db, true).SetCombineAsync(SetOperation.Union, keys.ToArray(), flags);
    1019         }
    1020         #endregion
    1021         #endregion
    1022 
    1023         #region Sorted Set
    1024         #region zadd
    1025         /// <summary>
    1026         /// Adds a member with the score to the sorted set stored at key
    1027         /// </summary>
    1028         /// <param name="key">key</param>
    1029         /// <param name="member">member</param>
    1030         /// <param name="score">score</param>
    1031         /// <param name="flags">behaviour</param>
    1032         /// <param name="db">index of database</param>
    1033         /// <returns></returns>
    1034         public bool ZAdd(RedisKey key, RedisValue member, double score, CommandFlags flags = CommandFlags.None, int db = 0)
    1035         {
    1036             return GetDatabase(db).SortedSetAdd(key, member, score, flags);
    1037         }
    1038         /// <summary>
    1039         /// Adds a member with the score to the sorted set stored at key(Asynchronous)
    1040         /// </summary>
    1041         /// <param name="key">key</param>
    1042         /// <param name="member">member</param>
    1043         /// <param name="score">score</param>
    1044         /// <param name="flags">behaviour</param>
    1045         /// <param name="db">index of database</param>
    1046         /// <returns></returns>
    1047         public Task<bool> ZAddAsync(RedisKey key, RedisValue member, double score, CommandFlags flags = CommandFlags.None, int db = 0)
    1048         {
    1049             return GetDatabase(db).SortedSetAddAsync(key, member, score, flags);
    1050         }
    1051         /// <summary>
    1052         /// Adds members with scores to the sorted set stored at key
    1053         /// </summary>
    1054         /// <param name="key">key</param>
    1055         /// <param name="values">sortedset entity</param>        
    1056         /// <param name="flags">behaviour</param>
    1057         /// <param name="db">index of database</param>
    1058         /// <returns></returns>
    1059         public long ZAdd(RedisKey key, IList<SortedSetEntry> values, CommandFlags flags = CommandFlags.None, int db = 0)
    1060         {
    1061             return GetDatabase(db).SortedSetAdd(key, values.ToArray(), flags);
    1062         }
    1063         /// <summary>
    1064         /// Adds members with scores to the sorted set stored at key(Asynchronous)
    1065         /// </summary>
    1066         /// <param name="key">key</param>
    1067         /// <param name="values">sortedset entity</param>        
    1068         /// <param name="flags">behaviour</param>
    1069         /// <param name="db">index of database</param>
    1070         /// <returns></returns>
    1071         public Task<long> ZAddAsync(RedisKey key, IList<SortedSetEntry> values, CommandFlags flags = CommandFlags.None, int db = 0)
    1072         {
    1073             return GetDatabase(db).SortedSetAddAsync(key, values.ToArray(), flags);
    1074         }
    1075         #endregion
    1076 
    1077         #region zrem
    1078         /// <summary>
    1079         /// Removes a member from the sorted set stored at key
    1080         /// </summary>
    1081         /// <param name="key">key</param>
    1082         /// <param name="member">member</param>
    1083         /// <param name="flags">behaviour</param>
    1084         /// <param name="db">index of database</param>
    1085         /// <returns></returns>
    1086         public bool ZRem(RedisKey key, RedisValue member, CommandFlags flags = CommandFlags.None, int db = 0)
    1087         {
    1088             return GetDatabase(db).SortedSetRemove(key, member, flags);
    1089         }
    1090         /// <summary>
    1091         /// Removes a member from the sorted set stored at key(Async)
    1092         /// </summary>
    1093         /// <param name="key">key</param>
    1094         /// <param name="member">member</param>
    1095         /// <param name="flags">behaviour</param>
    1096         /// <param name="db">index of database</param>
    1097         /// <returns></returns>
    1098         public Task<bool> ZRemAsync(RedisKey key, RedisValue member, CommandFlags flags = CommandFlags.None, int db = 0)
    1099         {
    1100             return GetDatabase(db).SortedSetRemoveAsync(key, member, flags);
    1101         }
    1102         /// <summary>
    1103         /// Removes members from the sorted set stored at key
    1104         /// </summary>
    1105         /// <param name="key">key</param>
    1106         /// <param name="members">members</param>
    1107         /// <param name="flags">behaviour</param>
    1108         /// <param name="db">index of database</param>
    1109         /// <returns></returns>
    1110         public long ZRem(RedisKey key, IList<RedisValue> members, CommandFlags flags = CommandFlags.None, int db = 0)
    1111         {
    1112             return GetDatabase(db).SortedSetRemove(key, members.ToArray(), flags);
    1113         }
    1114         /// <summary>
    1115         /// Removes members from the sorted set stored at key(Asynchronous)
    1116         /// </summary>
    1117         /// <param name="key">key</param>
    1118         /// <param name="members">members</param>
    1119         /// <param name="flags">behaviour</param>
    1120         /// <param name="db">index of database</param>
    1121         /// <returns></returns>
    1122         public Task<long> ZRemAsync(RedisKey key, IList<RedisValue> members, CommandFlags flags = CommandFlags.None, int db = 0)
    1123         {
    1124             return GetDatabase(db).SortedSetRemoveAsync(key, members.ToArray(), flags);
    1125         }
    1126         #endregion
    1127 
    1128         #region zrange
    1129         public IList<RedisValue> ZRange(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = 0)
    1130         {
    1131             return GetDatabase(db, true).SortedSetRangeByRank(key, start, stop, Order.Ascending, flags).ToList();
    1132         }
    1133         public Task<RedisValue[]> ZRangeAsync(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = 0)
    1134         {
    1135             return GetDatabase(db, true).SortedSetRangeByRankAsync(key, start, stop, Order.Ascending, flags);
    1136         }
    1137         #endregion
    1138 
    1139         #region zrevrange
    1140         public IList<RedisValue> ZRevRange(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = 0)
    1141         {
    1142             return GetDatabase(db, true).SortedSetRangeByRank(key, start, stop, Order.Descending, flags).ToList();
    1143         }
    1144         public Task<RedisValue[]> ZRevRangeAsync(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = 0)
    1145         {
    1146             return GetDatabase(db, true).SortedSetRangeByRankAsync(key, start, stop, Order.Descending, flags);
    1147         }
    1148         #endregion
    1149 
    1150         #region zincrby
    1151         public double ZIncrby(RedisKey key, RedisValue member, double value = 1, CommandFlags flags = CommandFlags.None, int db = 0)
    1152         {
    1153             return GetDatabase(db).SortedSetIncrement(key, member, value, flags);
    1154         }
    1155         public Task<double> ZIncrbyAsync(RedisKey key, RedisValue member, double value = 1, CommandFlags flags = CommandFlags.None, int db = 0)
    1156         {
    1157             return GetDatabase(db).SortedSetIncrementAsync(key, member, value, flags);
    1158         } 
    1159         #endregion
    1160         #endregion
    1161 
    1162         #region pub/sub
    1163         public long Publish(RedisChannel channel, RedisValue value, CommandFlags flags = CommandFlags.None, bool isRead = false)
    1164         {
    1165             return GetSubscriber(isRead).Publish(channel, value, flags);
    1166         }
    1167         public void Subscribe(RedisChannel channel, Action<RedisChannel, RedisValue> handle, CommandFlags flags = CommandFlags.None, bool isRead = false)
    1168         {
    1169             GetSubscriber(isRead).Subscribe(channel, handle, flags);
    1170         }
    1171         public void UnSubscrribe(RedisChannel channel, Action<RedisChannel, RedisValue> handle, CommandFlags flags = CommandFlags.None, bool isRead = false)
    1172         {
    1173             GetSubscriber(isRead).Unsubscribe(channel, handle, flags);
    1174         }        
    1175         #endregion
    1176     }
    1177 }
    RedisHelper

      So much for this series. The next series will be some complex example. Thanks for your reading.

  • 相关阅读:
    39页第3题 求x的n次幂
    实验4-1 求花费电费的金额
    实验二利用循环计算多个圆柱体体积
    39页第一题 四则运算及其余数
    实验一计算圆的面积
    7-14
    第六章例6-3
    第六章例6-2
    第六章例6-1
    第五章例5-9
  • 原文地址:https://www.cnblogs.com/catcher1994/p/5876032.html
Copyright © 2011-2022 走看看