首页 > 代码库 > Basic Tutorials of Redis(9) -First Edition RedisHelper

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         #endregion105 106         #region incr incrby incrbyfloat decr decrby107         /// <summary>108         /// handle the numeric value109         /// </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         #endregion126 127         #region append128         /// <summary>129         /// append value to the key130         /// </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         #endregion147 148         #region strlen149         /// <summary>150         /// get the value‘s length by the key151         /// </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         #endregion166         #endregion167 168         #region Hash169         #region hget170         /// <summary>171         /// get the value of key‘s field172         /// </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         #endregion189 190         #region hset191         /// <summary>192         /// set the field and value of the key193         /// </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 key204         /// </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         #endregion214 215         #region hmget216         /// <summary>217         /// get multi values of key‘s fields218         /// </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         #endregion235 236         #region hmset237         /// <summary>238         /// set multi values of key‘s fields239         /// </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         #endregion254 255         #region hkeys256         /// <summary>257         /// get all the fields of the key258         /// </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         #endregion273 274         #region hvals275         /// <summary>276         /// get all the values of key‘s fields277         /// </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         #endregion292 293         #region hincr hincrby hincrbyfloat294         /// <summary>295         /// handle the numeric value296         /// </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         #endregion315 316         #region hexists317         /// <summary>318         /// whether a field exists in the key319         /// </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         #endregion336 337         #region hdel338         /// <summary>339         /// delete the field from the key340         /// </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 key358         /// </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         #endregion375         #endregion376 377         #region List378 379         #region lpush380         /// <summary>381         /// insert the value to the head of list382         /// </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         #endregion401 402         #region rpush403         /// <summary>404         /// insert the value to the tail of list405         /// </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         #endregion424 425         #region lpop426         /// <summary>427         /// removes the first element of the list428         /// </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         #endregion443 444         #region lrem445         /// <summary>446         ///  removes the first count occurrences of elements equal to value from the list447         /// </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         #endregion466 467         #region lrange468         /// <summary>469         /// get the specified elements of the list stored at key470         /// </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         #endregion489 490         #region llen491         /// <summary>492         /// get the length of the list493         /// </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         #endregion508 509         /// <summary>510         ///  get the element at index index in the list511         /// </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 LInsert529         /// <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         #endregion552 553         #endregion554 555         #region Set556         #region sadd557         /// <summary>558         /// add a member to a set559         /// </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 set577         /// </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         #endregion594 595         #region sismember596         /// <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         #endregion615 616         #region smembers617         /// <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         #endregion634 635         #region spop636         /// <summary>637         /// Removes a random elements from the set638         /// </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         #endregion653 654         #region srem655         /// <summary>656         /// Remove the specified members from the set657         /// </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 set675         /// </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         #endregion692 693         #region scard694         /// <summary>695         /// get the number of elements in the set696         /// </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         #endregion711 712         #region sinter713         /// <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         #endregion730 731         #region sdiff732         /// <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         #endregion749 750         #region sunion751         /// <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         #endregion768         #endregion769 770         #region SortedSet771         #region zadd772         /// <summary>773         /// Adds a member with the score to the sorted set stored at key774         /// </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 key794         /// </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 zrem813         /// <summary>814         /// Removes a member from the sorted set stored at key815         /// </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 key833         /// </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         #endregion850 851         #region zrange852         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         #endregion856 857         #region zrevrange858         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         #endregion862 863         #region zincrby864         double ZIncrby(RedisKey key, RedisValue member, double value = http://www.mamicode.com/1, CommandFlags flags = CommandFlags.None, int db = 0);865 866         Task<double> ZIncrbyAsync(RedisKey key, RedisValue member, double value = http://www.mamicode.com/1, CommandFlags flags = CommandFlags.None, int db = 0);        867         #endregion868         #endregion869 870         #region pub/sub871         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         #endregion877     }

 

  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         #endregion1021         #endregion1022 1023         #region Sorted Set1024         #region zadd1025         /// <summary>1026         /// Adds a member with the score to the sorted set stored at key1027         /// </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 key1053         /// </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         #endregion1076 1077         #region zrem1078         /// <summary>1079         /// Removes a member from the sorted set stored at key1080         /// </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 key1104         /// </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         #endregion1127 1128         #region zrange1129         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         #endregion1138 1139         #region zrevrange1140         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         #endregion1149 1150         #region zincrby1151         public double ZIncrby(RedisKey key, RedisValue member, double value = http://www.mamicode.com/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 = http://www.mamicode.com/1, CommandFlags flags = CommandFlags.None, int db = 0)1156         {1157             return GetDatabase(db).SortedSetIncrementAsync(key, member, value, flags);1158         } 1159         #endregion1160         #endregion1161 1162         #region pub/sub1163         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         #endregion1176     }1177 }
RedisHelper

 

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

 

Basic Tutorials of Redis(9) -First Edition RedisHelper