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:

     public interface IRedis
{
ITransaction GetTransaction(int db = , bool isRead = false); #region String
#region get
/// <summary>
/// get the string value
/// </summary>
/// <param name="key">the key of value</param>
/// <param name="flag">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
RedisValue Get(string key, CommandFlags flag = CommandFlags.None, int db = );
/// <summary>
/// get the string value(Asynchronous)
/// </summary>
/// <param name="key">the key of value</param>
/// <param name="flag">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue> GetAsync(string key, CommandFlags flag = CommandFlags.None, int db = );
/// <summary>
/// get the entity by deserialization
/// </summary>
/// <param name="key">the key of value</param>
/// <param name="flag">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
T Get<T>(string key, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get the entity by deserialization(Asynchronous)
/// </summary>
/// <param name="key">the key of value</param>
/// <param name="flag">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<T> GetAsync<T>(string key, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region set
/// <summary>
/// set value to key
/// </summary>
/// <param name="key">the key</param>
/// <param name="value">the value of the key</param>
/// <param name="expiry">time to expiry</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
RedisValue Set(string key, string value, TimeSpan? expiry = default(TimeSpan?), When when = When.Always, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// set value to key(Asynchronous)
/// </summary>
/// <param name="key">the key</param>
/// <param name="value">the value of the key</param>
/// <param name="expiry">time to expiry</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<bool> SetAsync(string key, string value, TimeSpan? expiry = default(TimeSpan?), When when = When.Always, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region mget
/// <summary>
/// get multi values
/// </summary>
/// <param name="keys">the keys of the values</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
IList<RedisValue> MGet(List<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get multi values(Asynchronous)
/// </summary>
/// <param name="keys">the keys of the values</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue[]> MGetAsync(List<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region mset
/// <summary>
/// set multi values
/// </summary>
/// <param name="kvs">key-values</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
bool MSet(List<KeyValuePair<RedisKey, RedisValue>> kvs, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// set multi values(Asynchronous)
/// </summary>
/// <param name="kvs">key-values</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<bool> MSetAsync(List<KeyValuePair<RedisKey, RedisValue>> kvs, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region incr incrby incrbyfloat decr decrby
/// <summary>
/// handle the numeric value
/// </summary>
/// <param name="key">key</param>
/// <param name="amount">value to increase or decrease</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
double IncrOrDecrBy(RedisKey key, double value, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// handle the numeric value(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="amount">value to increase or decrease</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<double> IncrOrDecrByAsync(RedisKey key, double value, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region append
/// <summary>
/// append value to the key
/// </summary>
/// <param name="key">key</param>
/// <param name="value">value to append</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
long Append(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// append value to the key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="value">value to append</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<long> AppendAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region strlen
/// <summary>
/// get the value's length by the key
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
long StrLen(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get the value's length by the key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<long> StrLenAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
#endregion
#endregion #region Hash
#region hget
/// <summary>
/// get the value of key's field
/// </summary>
/// <param name="key">key</param>
/// <param name="field">field of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue> HGetAsync(RedisKey key, RedisValue field, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get the value of key's field(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="field">field of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
RedisValue HGet(RedisKey key, RedisValue field, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region hset
/// <summary>
/// set the field and value of the key
/// </summary>
/// <param name="key">key</param>
/// <param name="field">field of the key</param>
/// <param name="value">value of the field</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
bool HSet(RedisKey key, RedisValue field, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// set the field and value of the key
/// </summary>
/// <param name="key">key</param>
/// <param name="field">field of the key</param>
/// <param name="value">value of the field</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<bool> HSetAsync(RedisKey key, RedisValue field, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region hmget
/// <summary>
/// get multi values of key's fields
/// </summary>
/// <param name="key">key</param>
/// <param name="fields">fields of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
IList<RedisValue> HMGet(RedisKey key, List<RedisValue> fields, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get multi values of key's fields(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="fields">fields of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue[]> HMGetAsync(RedisKey key, List<RedisValue> fields, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region hmset
/// <summary>
/// set multi values of key's fields
/// </summary>
/// <param name="key">key</param>
/// <param name="entry">name/value pair</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
void HMSet(RedisKey key, List<HashEntry> entry, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// set multi values of key's fields(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="entry">name/value pair</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
Task HMSetAsync(RedisKey key, List<HashEntry> entry, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region hkeys
/// <summary>
/// get all the fields of the key
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
IList<RedisValue> HKeys(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get all the fields of the key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue[]> HKeysAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region hvals
/// <summary>
/// get all the values of key's fields
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
IList<RedisValue> HVals(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get all the values of key's fields(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue[]> HValsAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region hincr hincrby hincrbyfloat
/// <summary>
/// handle the numeric value
/// </summary>
/// <param name="key">key</param>
/// <param name="hashField">field of key</param>
/// <param name="amount">value to increase or decrease</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
double HIncrOrDecrBy(RedisKey key, RedisValue hashField, double amount = , CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// handle the numeric value(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="hashField">field of key</param>
/// <param name="amount">value to increase or decrease</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<double> HIncrOrDecrByAsync(RedisKey key, RedisValue hashField, double amount = , CommandFlags flags = CommandFlags.None, int db = );
#endregion #region hexists
/// <summary>
/// whether a field exists in the key
/// </summary>
/// <param name="key">key</param>
/// <param name="hashField">field of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
bool HExists(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// whether a field exists in the key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="hashField">field of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<bool> HExistsAsync(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region hdel
/// <summary>
/// delete the field from the key
/// </summary>
/// <param name="key">key</param>
/// <param name="hashField">field of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
bool HDel(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// delete the field from the key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="hashField">field of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<bool> HDelAsync(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// delete fields from the key
/// </summary>
/// <param name="key">key</param>
/// <param name="hashFields">fields of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
long HDel(RedisKey key, IList<RedisValue> hashFields, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// delete fields from the key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="hashFields">fields of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<long> HDelAsync(RedisKey key, IList<RedisValue> hashFields, CommandFlags flags = CommandFlags.None, int db = );
#endregion
#endregion #region List #region lpush
/// <summary>
/// insert the value to the head of list
/// </summary>
/// <param name="key">key</param>
/// <param name="value">node's value</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
long LPush(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// insert the value to the head of list(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="value">node's value</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<long> LPushAsync(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region rpush
/// <summary>
/// insert the value to the tail of list
/// </summary>
/// <param name="key">key</param>
/// <param name="value">node's value</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
long RPush(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// insert the value to the tail of list(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="value">node's value</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<long> RPushAsync(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region lpop
/// <summary>
/// removes the first element of the list
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
RedisValue LPop(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// removes the first element of the list(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue> LPopAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region lrem
/// <summary>
/// removes the first count occurrences of elements equal to value from the list
/// </summary>
/// <param name="key">key</param>
/// <param name="value">value</param>
/// <param name="count">amount of the node's value equal to the value</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
long LRem(RedisKey key, RedisValue value, long count = , CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// removes the first count occurrences of elements equal to value from the list(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="value">value</param>
/// <param name="count">amount of the node's value equal to the value</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<long> LRemAsync(RedisKey key, RedisValue value, long count = , CommandFlags flags = CommandFlags.None, int db = );
#endregion #region lrange
/// <summary>
/// get the specified elements of the list stored at key
/// </summary>
/// <param name="key">key</param>
/// <param name="start">start index</param>
/// <param name="stop">stop index</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
IList<RedisValue> LRange(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get the specified elements of the list stored at key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="start">start index</param>
/// <param name="stop">stop index</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue[]> LRangeAsync(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region llen
/// <summary>
/// get the length of the list
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
long LLen(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get the length of the list(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<long> LLenAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
#endregion /// <summary>
/// get the element at index index in the list
/// </summary>
/// <param name="key">key</param>
/// <param name="index">index</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
RedisValue LIndex(RedisKey key, long index, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get the element at index index in the list(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="index">index</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue> LIndexAsync(RedisKey key, long index, CommandFlags flags = CommandFlags.None, int db = ); #region LInsert
/// <summary>
/// inserts value in the list stored at key either before or after the reference value pivot.
/// </summary>
/// <param name="key"></param>
/// <param name="pivot"></param>
/// <param name="value"></param>
/// <param name="flags"></param>
/// <param name="isAfter"></param>
/// <param name="db"></param>
/// <returns></returns>
long LInsert(RedisKey key, RedisValue pivot, RedisValue value, CommandFlags flags = CommandFlags.None, bool isAfter = false, int db = );
/// <summary>
/// inserts value in the list stored at key either before or after the reference value pivot.
/// </summary>
/// <param name="key"></param>
/// <param name="pivot"></param>
/// <param name="value"></param>
/// <param name="flags"></param>
/// <param name="isAfter"></param>
/// <param name="db"></param>
/// <returns></returns>
Task<long> LInsertAsync(RedisKey key, RedisValue pivot, RedisValue value, CommandFlags flags = CommandFlags.None, bool isAfter = false, int db = );
#endregion #endregion #region Set
#region sadd
/// <summary>
/// add a member to a set
/// </summary>
/// <param name="key">key of set</param>
/// <param name="value">value of the key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
bool SAdd(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// add a member to a set(Asynchronous)
/// </summary>
/// <param name="key">key of set</param>
/// <param name="value">value of the key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<bool> SAddAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// add multi members to a set
/// </summary>
/// <param name="key">key of set</param>
/// <param name="values">values of the key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
long SAdd(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// add multi members to a set(Asynchronous)
/// </summary>
/// <param name="key">key of set</param>
/// <param name="values">values of the key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<long> SAddAsync(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region sismember
/// <summary>
/// whether member is a member of the set
/// </summary>
/// <param name="key">key of set</param>
/// <param name="value">value</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
bool SIsMember(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// whether member is a member of the set (Asynchronous)
/// </summary>
/// <param name="key">key of set</param>
/// <param name="value">value</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<bool> SIsMemberAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region smembers
/// <summary>
/// get all the members of the set
/// </summary>
/// <param name="key">key of set</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
IList<RedisValue> SMembers(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get all the members of the set(Asynchronous)
/// </summary>
/// <param name="key">key of set</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue[]> SMembersAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region spop
/// <summary>
/// Removes a random elements from the set
/// </summary>
/// <param name="key">key of set</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
RedisValue SPop(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// Removes a random elements from the set(Asynchronous)
/// </summary>
/// <param name="key">key of set</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue> SPopAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region srem
/// <summary>
/// Remove the specified members from the set
/// </summary>
/// <param name="key">key of the set</param>
/// <param name="value">member to remove</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
bool SRem(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// Remove the specified members from the set(Asynchronous)
/// </summary>
/// <param name="key">key of the set</param>
/// <param name="value">member to remove</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<bool> SRemAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// Remove the specified members from the set
/// </summary>
/// <param name="key">key of the set</param>
/// <param name="value">member to remove</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
long SRem(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// Remove the specified members from the set(Asynchronous)
/// </summary>
/// <param name="key">key of the set</param>
/// <param name="value">member to remove</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<long> SRemAsync(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region scard
/// <summary>
/// get the number of elements in the set
/// </summary>
/// <param name="key">key of set</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
long SCard(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get the number of elements in the set(Asynchronous)
/// </summary>
/// <param name="key">key of set</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<long> SCardAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region sinter
/// <summary>
/// get the members of the set resulting from the intersection of all the given sets.
/// </summary>
/// <param name="keys">keys</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
IList<RedisValue> SInter(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get the members of the set resulting from the intersection of all the given sets.(Asynchronous)
/// </summary>
/// <param name="keys">keys</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue[]> SInterAsync(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region sdiff
/// <summary>
/// get the members of the set resulting from the difference between the first set and all the successive sets.
/// </summary>
/// <param name="keys">keys</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
IList<RedisValue> SDiff(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get the members of the set resulting from the difference between the first set and all the successive sets.(Asynchronous)
/// </summary>
/// <param name="keys">keys</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue[]> SDiffAsync(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region sunion
/// <summary>
/// get the members of the set resulting from the union of all the given sets.
/// </summary>
/// <param name="keys">keys</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
IList<RedisValue> SUnion(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// get the members of the set resulting from the union of all the given sets.(Asynchronous)
/// </summary>
/// <param name="keys">keys</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<RedisValue[]> SUnionAsync(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = );
#endregion
#endregion #region SortedSet
#region zadd
/// <summary>
/// Adds a member with the score to the sorted set stored at key
/// </summary>
/// <param name="key">key</param>
/// <param name="member">member</param>
/// <param name="score">score</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
bool ZAdd(RedisKey key, RedisValue member, double score, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// Adds a member with the score to the sorted set stored at key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="member">member</param>
/// <param name="score">score</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<bool> ZAddAsync(RedisKey key, RedisValue member, double score, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// Adds members with scores to the sorted set stored at key
/// </summary>
/// <param name="key">key</param>
/// <param name="values">sortedset entity</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
long ZAdd(RedisKey key, IList<SortedSetEntry> values, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// Adds members with scores to the sorted set stored at key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="values">sortedset entity</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<long> ZAddAsync(RedisKey key, IList<SortedSetEntry> values, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region zrem
/// <summary>
/// Removes a member from the sorted set stored at key
/// </summary>
/// <param name="key">key</param>
/// <param name="member">member</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
bool ZRem(RedisKey key, RedisValue member, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// Removes a member from the sorted set stored at key(Async)
/// </summary>
/// <param name="key">key</param>
/// <param name="member">member</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<bool> ZRemAsync(RedisKey key, RedisValue member, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// Removes members from the sorted set stored at key
/// </summary>
/// <param name="key">key</param>
/// <param name="members">members</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
long ZRem(RedisKey key, IList<RedisValue> members, CommandFlags flags = CommandFlags.None, int db = );
/// <summary>
/// Removes members from the sorted set stored at key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="members">members</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
Task<long> ZRemAsync(RedisKey key, IList<RedisValue> members, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region zrange
IList<RedisValue> ZRange(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = ); Task<RedisValue[]> ZRangeAsync(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region zrevrange
IList<RedisValue> ZRevRange(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = ); Task<RedisValue[]> ZRevRangeAsync(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = );
#endregion #region zincrby
double ZIncrby(RedisKey key, RedisValue member, double value = , CommandFlags flags = CommandFlags.None, int db = ); Task<double> ZIncrbyAsync(RedisKey key, RedisValue member, double value = , CommandFlags flags = CommandFlags.None, int db = );
#endregion
#endregion #region pub/sub
void Subscribe(RedisChannel channel, Action<RedisChannel, RedisValue> handle, CommandFlags flags = CommandFlags.None, bool isRead = false); long Publish(RedisChannel channel, RedisValue value, CommandFlags flags = CommandFlags.None, bool isRead = false); void UnSubscrribe(RedisChannel channel, Action<RedisChannel, RedisValue> handle, CommandFlags flags = CommandFlags.None, bool isRead = false);
#endregion
}

  The Implementation are as follow:

 using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks; namespace Redis01
{
public class RedisHelper : IRedis
{
private static IConfigurationRoot GetConnStr()
{
var builder = new ConfigurationBuilder();
builder.SetBasePath(Directory.GetCurrentDirectory());
builder.AddJsonFile("appsettings.json");
var config = builder.Build();
return config;
} private Lazy<ConnectionMultiplexer> _writeConn = new Lazy<ConnectionMultiplexer>(() =>
{
return ConnectionMultiplexer.Connect(GetConnStr().GetValue<string>("RedisConfig:MasterServer"));
}); private Lazy<ConnectionMultiplexer> _readConn = new Lazy<ConnectionMultiplexer>(() =>
{
return ConnectionMultiplexer.Connect(GetConnStr().GetValue<string>("RedisConfig:SlaveServer"));
}); public ConnectionMultiplexer WriteConn
{
get { return _writeConn.Value; }
} public ConnectionMultiplexer ReadConn
{
get { return _readConn.Value; }
} private IDatabase GetDatabase(int db = , bool isRead = false)
{
return isRead ?
ReadConn.GetDatabase(db) :
WriteConn.GetDatabase(db);
} private ISubscriber GetSubscriber(bool isRead = false, object asyncState = null)
{
return isRead ?
ReadConn.GetSubscriber(asyncState) :
WriteConn.GetSubscriber(asyncState);
} public ITransaction GetTransaction(int db = , bool isRead = false)
{
return GetDatabase(db).CreateTransaction();
} #region string
/// <summary>
/// get the string value
/// </summary>
/// <param name="key">the key of value</param>
/// <param name="flag">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public RedisValue Get(string key, CommandFlags flag = CommandFlags.None, int db = )
{
return GetDatabase(db, true).StringGet(key, flag);
}
/// <summary>
/// get the string value(Asynchronous)
/// </summary>
/// <param name="key">the key of value</param>
/// <param name="flag">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue> GetAsync(string key, CommandFlags flag = CommandFlags.None, int db = )
{
return GetDatabase(db, true).StringGetAsync(key, flag);
} /// <summary>
/// set value to key
/// </summary>
/// <param name="key">the key</param>
/// <param name="value">the value of the key</param>
/// <param name="expiry">time to expiry</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public RedisValue Set(string key, string value, TimeSpan? expiry = default(TimeSpan?), When when = When.Always, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).StringSet(key, value, expiry, when, flags);
}
/// <summary>
/// set value to key(Asynchronous)
/// </summary>
/// <param name="key">the key</param>
/// <param name="value">the value of the key</param>
/// <param name="expiry">time to expiry</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<bool> SetAsync(string key, string value, TimeSpan? expiry = default(TimeSpan?), When when = When.Always, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).StringSetAsync(key, value, expiry, when, flags);
} /// <summary>
/// get the entity by deserialization
/// </summary>
/// <param name="key">the key of value</param>
/// <param name="flag">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public T Get<T>(string key, CommandFlags flags = CommandFlags.None, int db = )
{
try
{
return JsonConvert.DeserializeObject<T>(GetDatabase(db, true).StringGet(key, flags));
}
catch (Exception ex)
{
return default(T);
}
}
/// <summary>
/// get the entity by deserialization(Asynchronous)
/// </summary>
/// <param name="key">the key of value</param>
/// <param name="flag">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<T> GetAsync<T>(string key, CommandFlags flags = CommandFlags.None, int db = )
{
try
{
var res = GetDatabase(db, true).StringGetAsync(key, flags);
return JsonConvert.DeserializeObject<Task<T>>(res.ToString());
}
catch (Exception ex)
{
return default(Task<T>);
}
} /// <summary>
/// get multi values
/// </summary>
/// <param name="keys">the keys of the values</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public IList<RedisValue> MGet(List<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).StringGet(keys.ToArray(), flags);
}
/// <summary>
/// get multi values(Asynchronous)
/// </summary>
/// <param name="keys">the keys of the values</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue[]> MGetAsync(List<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).StringGetAsync(keys.ToArray(), flags);
} /// <summary>
/// set multi values
/// </summary>
/// <param name="kvs">key-values</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public bool MSet(List<KeyValuePair<RedisKey, RedisValue>> kvs, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).StringSet(kvs.ToArray(), when, flags);
}
/// <summary>
/// set multi values(Asynchronous)
/// </summary>
/// <param name="kvs">key-values</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<bool> MSetAsync(List<KeyValuePair<RedisKey, RedisValue>> kvs, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).StringSetAsync(kvs.ToArray(), when, flags);
} /// <summary>
/// handle the numeric value
/// </summary>
/// <param name="key">key</param>
/// <param name="amount">value to increase or decrease</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public double IncrOrDecrBy(RedisKey key, double amount, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).StringIncrement(key, amount, flags);
}
/// <summary>
/// handle the numeric value(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="amount">value to increase or decrease</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<double> IncrOrDecrByAsync(RedisKey key, double value, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).StringIncrementAsync(key, value, flags);
} /// <summary>
/// append value to the key
/// </summary>
/// <param name="key">key</param>
/// <param name="value">value to append</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public long Append(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).StringAppend(key, value, flags);
}
/// <summary>
/// append value to the key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="value">value to append</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<long> AppendAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).StringAppendAsync(key, value, flags);
} /// <summary>
/// get the value's length by the key
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public long StrLen(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).StringLength(key, flags);
}
/// <summary>
/// get the value's length by the key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<long> StrLenAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).StringLengthAsync(key, flags);
}
#endregion #region Hash
/// <summary>
/// get the value of key's field
/// </summary>
/// <param name="key">key</param>
/// <param name="field">field of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public RedisValue HGet(RedisKey key, RedisValue field, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).HashGet(key, field, CommandFlags.None);
}
/// <summary>
/// get the value of key's field(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="field">field of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue> HGetAsync(RedisKey key, RedisValue field, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).HashGetAsync(key, field, CommandFlags.None);
} /// <summary>
/// set the field and value of the key
/// </summary>
/// <param name="key">key</param>
/// <param name="field">field of the key</param>
/// <param name="value">value of the field</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public bool HSet(RedisKey key, RedisValue field, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).HashSet(key, field, value, When.Always, CommandFlags.None);
}
/// <summary>
/// set the field and value of the key
/// </summary>
/// <param name="key">key</param>
/// <param name="field">field of the key</param>
/// <param name="value">value of the field</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<bool> HSetAsync(RedisKey key, RedisValue field, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).HashSetAsync(key, field, value, When.Always, CommandFlags.None);
} /// <summary>
/// get multi values of key's fields
/// </summary>
/// <param name="key">key</param>
/// <param name="fields">fields of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public IList<RedisValue> HMGet(RedisKey key, List<RedisValue> fields, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).HashGet(key, fields.ToArray(), flags);
}
/// <summary>
/// get multi values of key's fields(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="fields">fields of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue[]> HMGetAsync(RedisKey key, List<RedisValue> fields, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).HashGetAsync(key, fields.ToArray(), flags);
} /// <summary>
/// set multi values of key's fields
/// </summary>
/// <param name="key">key</param>
/// <param name="entry">name/value pair</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
public void HMSet(RedisKey key, List<HashEntry> entry, CommandFlags flags = CommandFlags.None, int db = )
{
GetDatabase(db).HashSet(key, entry.ToArray(), flags);
}
/// <summary>
/// set multi values of key's fields(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="entry">name/value pair</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
public Task HMSetAsync(RedisKey key, List<HashEntry> entry, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).HashSetAsync(key, entry.ToArray(), flags);
} /// <summary>
/// get all the fields of the key
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public IList<RedisValue> HKeys(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).HashKeys(key, flags).ToList();
}
/// <summary>
/// get all the fields of the key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue[]> HKeysAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).HashKeysAsync(key, flags);
} /// <summary>
/// get all the values of key's fields
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public IList<RedisValue> HVals(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).HashValues(key, flags).ToList();
}
/// <summary>
/// get all the values of key's fields(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue[]> HValsAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).HashValuesAsync(key, flags);
} /// <summary>
/// handle the numeric value
/// </summary>
/// <param name="key">key</param>
/// <param name="hashField">field of key</param>
/// <param name="amount">value to increase or decrease</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public double HIncrOrDecrBy(RedisKey key, RedisValue hashField, double amount = , CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).HashIncrement(key, hashField, amount, flags);
}
/// <summary>
/// handle the numeric value(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="hashField">field of key</param>
/// <param name="amount">value to increase or decrease</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<double> HIncrOrDecrByAsync(RedisKey key, RedisValue hashField, double amount = , CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).HashIncrementAsync(key, hashField, amount, flags);
} /// <summary>
/// whether a field exists in the key
/// </summary>
/// <param name="key">key</param>
/// <param name="hashField">field of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public bool HExists(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(, true).HashExists(key, hashField, flags);
}
/// <summary>
/// whether a field exists in the key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="hashField">field of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<bool> HExistsAsync(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(, true).HashExistsAsync(key, hashField, flags);
} /// <summary>
/// delete the field from the key
/// </summary>
/// <param name="key">key</param>
/// <param name="hashField">field of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public bool HDel(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).HashDelete(key, hashField, flags);
}
/// <summary>
/// delete the field from the key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="hashField">field of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<bool> HDelAsync(RedisKey key, RedisValue hashField, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).HashDeleteAsync(key, hashField, flags);
}
/// <summary>
/// delete fields from the key
/// </summary>
/// <param name="key">key</param>
/// <param name="hashFields">fields of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public long HDel(RedisKey key, IList<RedisValue> hashFields, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).HashDelete(key, hashFields.ToArray(), flags);
}
/// <summary>
/// delete fields from the key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="hashFields">fields of key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<long> HDelAsync(RedisKey key, IList<RedisValue> hashFields, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).HashDeleteAsync(key, hashFields.ToArray(), flags);
}
#endregion #region List
/// <summary>
/// insert the value to the head of list
/// </summary>
/// <param name="key">key</param>
/// <param name="value">node's value</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public long LPush(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).ListLeftPush(key, value, when, flags);
}
/// <summary>
/// insert the value to the head of list(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="value">node's value</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<long> LPushAsync(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).ListLeftPushAsync(key, value, when, flags);
} /// <summary>
/// insert the value to the tail of list
/// </summary>
/// <param name="key">key</param>
/// <param name="value">node's value</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public long RPush(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).ListRightPush(key, value, when, flags);
}
/// <summary>
/// insert the value to the tail of list(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="value">node's value</param>
/// <param name="when">when this operation should be performed</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<long> RPushAsync(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).ListRightPushAsync(key, value, when, flags);
} /// <summary>
/// removes the first element of the list
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public RedisValue LPop(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).ListLeftPop(key, flags);
}
/// <summary>
/// removes the first element of the list(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue> LPopAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).ListLeftPopAsync(key, flags);
} /// <summary>
/// removes the first count occurrences of elements equal to value from the list
/// </summary>
/// <param name="key">key</param>
/// <param name="value">value</param>
/// <param name="count">amount of the node's value equal to the value</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public long LRem(RedisKey key, RedisValue value, long count = , CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).ListRemove(key, value, count, flags);
}
/// <summary>
/// removes the first count occurrences of elements equal to value from the list(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="value">value</param>
/// <param name="count">amount of the node's value equal to the value</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<long> LRemAsync(RedisKey key, RedisValue value, long count = , CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).ListRemoveAsync(key, value, count, flags);
} /// <summary>
/// get the specified elements of the list stored at key
/// </summary>
/// <param name="key">key</param>
/// <param name="start">start index</param>
/// <param name="stop">stop index</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public IList<RedisValue> LRange(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).ListRange(key, start, stop, flags).ToList();
}
/// <summary>
/// get the specified elements of the list stored at key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="start">start index</param>
/// <param name="stop">stop index</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue[]> LRangeAsync(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).ListRangeAsync(key, start, stop, flags);
} /// <summary>
/// get the length of the list
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public long LLen(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).ListLength(key, flags);
}
/// <summary>
/// get the length of the list(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<long> LLenAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).ListLengthAsync(key, flags);
} /// <summary>
/// get the element at index index in the list
/// </summary>
/// <param name="key">key</param>
/// <param name="index">index</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public RedisValue LIndex(RedisKey key, long index, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).ListGetByIndex(key, index, flags);
}
/// <summary>
/// get the element at index index in the list(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="index">index</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue> LIndexAsync(RedisKey key, long index, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).ListGetByIndexAsync(key, index, flags);
} /// <summary>
/// inserts value in the list stored at key either before or after the reference value pivot.
/// </summary>
/// <param name="key"></param>
/// <param name="pivot"></param>
/// <param name="value"></param>
/// <param name="flags"></param>
/// <param name="isAfter"></param>
/// <param name="db"></param>
/// <returns></returns>
public long LInsert(RedisKey key, RedisValue pivot, RedisValue value, CommandFlags flags = CommandFlags.None, bool isAfter = false, int db = )
{
return isAfter
? GetDatabase(db).ListInsertAfter(key, pivot, value, flags)
: GetDatabase(db).ListInsertBefore(key, pivot, value, flags);
}
/// <summary>
/// inserts value in the list stored at key either before or after the reference value pivot.
/// </summary>
/// <param name="key"></param>
/// <param name="pivot"></param>
/// <param name="value"></param>
/// <param name="flags"></param>
/// <param name="isAfter"></param>
/// <param name="db"></param>
/// <returns></returns>
public Task<long> LInsertAsync(RedisKey key, RedisValue pivot, RedisValue value, CommandFlags flags = CommandFlags.None, bool isAfter = false, int db = )
{
return isAfter
? GetDatabase(db).ListInsertAfterAsync(key, pivot, value, flags)
: GetDatabase(db).ListInsertBeforeAsync(key, pivot, value, flags);
}
#endregion #region Set #region sadd
/// <summary>
/// add a member to a set
/// </summary>
/// <param name="key">key of set</param>
/// <param name="value">value of the key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public bool SAdd(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SetAdd(key, value, flags);
}
/// <summary>
/// add a member to a set(Asynchronous)
/// </summary>
/// <param name="key">key of set</param>
/// <param name="value">value of the key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<bool> SAddAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SetAddAsync(key, value, flags);
}
/// <summary>
/// add multi members to a set
/// </summary>
/// <param name="key">key of set</param>
/// <param name="values">values of the key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public long SAdd(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SetAdd(key, values.ToArray(), flags);
}
/// <summary>
/// add multi members to a set(Asynchronous)
/// </summary>
/// <param name="key">key of set</param>
/// <param name="values">values of the key</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<long> SAddAsync(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SetAddAsync(key, values.ToArray(), flags);
}
#endregion #region sismember
/// <summary>
/// whether member is a member of the set
/// </summary>
/// <param name="key">key of set</param>
/// <param name="value">value</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public bool SIsMember(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SetContains(key, value, flags);
}
/// <summary>
/// whether member is a member of the set (Asynchronous)
/// </summary>
/// <param name="key">key of set</param>
/// <param name="value">value</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<bool> SIsMemberAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SetContainsAsync(key, value, flags);
}
#endregion #region smembers
/// <summary>
/// get all the members of the set
/// </summary>
/// <param name="key">key of set</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public IList<RedisValue> SMembers(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SetMembers(key, flags).ToList();
}
/// <summary>
/// get all the members of the set(Asynchronous)
/// </summary>
/// <param name="key">key of set</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue[]> SMembersAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SetMembersAsync(key, flags);
}
#endregion #region spop
/// <summary>
/// Removes a random elements from the set
/// </summary>
/// <param name="key">key of set</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public RedisValue SPop(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SetPop(key, flags);
}
/// <summary>
/// Removes a random elements from the set(Asynchronous)
/// </summary>
/// <param name="key">key of set</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue> SPopAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SetPopAsync(key, flags);
}
#endregion #region srem
/// <summary>
/// Remove the specified members from the set
/// </summary>
/// <param name="key">key of the set</param>
/// <param name="value">member to remove</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public bool SRem(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SetRemove(key, value, flags);
}
/// <summary>
/// Remove the specified members from the set(Asynchronous)
/// </summary>
/// <param name="key">key of the set</param>
/// <param name="value">member to remove</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<bool> SRemAsync(RedisKey key, RedisValue value, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SetRemoveAsync(key, value, flags);
}
/// <summary>
/// Remove the specified members from the set
/// </summary>
/// <param name="key">key of the set</param>
/// <param name="value">member to remove</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public long SRem(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SetRemove(key, values.ToArray(), flags);
}
/// <summary>
/// Remove the specified members from the set(Asynchronous)
/// </summary>
/// <param name="key">key of the set</param>
/// <param name="value">member to remove</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<long> SRemAsync(RedisKey key, IList<RedisValue> values, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SetRemoveAsync(key, values.ToArray(), flags);
}
#endregion #region scard
/// <summary>
/// get the number of elements in the set
/// </summary>
/// <param name="key">key of set</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public long SCard(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SetLength(key, flags);
}
/// <summary>
/// get the number of elements in the set(Asynchronous)
/// </summary>
/// <param name="key">key of set</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<long> SCardAsync(RedisKey key, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SetLengthAsync(key, flags);
}
#endregion #region sinter
/// <summary>
/// get the members of the set resulting from the intersection of all the given sets.
/// </summary>
/// <param name="keys">keys</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public IList<RedisValue> SInter(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SetCombine(SetOperation.Intersect, keys.ToArray(), flags).ToList();
}
/// <summary>
/// get the members of the set resulting from the intersection of all the given sets.(Asynchronous)
/// </summary>
/// <param name="keys">keys</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue[]> SInterAsync(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SetCombineAsync(SetOperation.Intersect, keys.ToArray(), flags);
}
#endregion #region sdiff
/// <summary>
/// get the members of the set resulting from the difference between the first set and all the successive sets.
/// </summary>
/// <param name="keys">keys</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public IList<RedisValue> SDiff(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SetCombine(SetOperation.Difference, keys.ToArray(), flags).ToList();
}
/// <summary>
/// get the members of the set resulting from the difference between the first set and all the successive sets.(Asynchronous)
/// </summary>
/// <param name="keys">keys</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue[]> SDiffAsync(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SetCombineAsync(SetOperation.Difference, keys.ToArray(), flags);
}
#endregion #region sunion
/// <summary>
/// get the members of the set resulting from the union of all the given sets.
/// </summary>
/// <param name="keys">keys</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public IList<RedisValue> SUnion(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SetCombine(SetOperation.Union, keys.ToArray(), flags).ToList();
}
/// <summary>
/// get the members of the set resulting from the union of all the given sets.(Asynchronous)
/// </summary>
/// <param name="keys">keys</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<RedisValue[]> SUnionAsync(IList<RedisKey> keys, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SetCombineAsync(SetOperation.Union, keys.ToArray(), flags);
}
#endregion
#endregion #region Sorted Set
#region zadd
/// <summary>
/// Adds a member with the score to the sorted set stored at key
/// </summary>
/// <param name="key">key</param>
/// <param name="member">member</param>
/// <param name="score">score</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public bool ZAdd(RedisKey key, RedisValue member, double score, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SortedSetAdd(key, member, score, flags);
}
/// <summary>
/// Adds a member with the score to the sorted set stored at key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="member">member</param>
/// <param name="score">score</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<bool> ZAddAsync(RedisKey key, RedisValue member, double score, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SortedSetAddAsync(key, member, score, flags);
}
/// <summary>
/// Adds members with scores to the sorted set stored at key
/// </summary>
/// <param name="key">key</param>
/// <param name="values">sortedset entity</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public long ZAdd(RedisKey key, IList<SortedSetEntry> values, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SortedSetAdd(key, values.ToArray(), flags);
}
/// <summary>
/// Adds members with scores to the sorted set stored at key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="values">sortedset entity</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<long> ZAddAsync(RedisKey key, IList<SortedSetEntry> values, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SortedSetAddAsync(key, values.ToArray(), flags);
}
#endregion #region zrem
/// <summary>
/// Removes a member from the sorted set stored at key
/// </summary>
/// <param name="key">key</param>
/// <param name="member">member</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public bool ZRem(RedisKey key, RedisValue member, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SortedSetRemove(key, member, flags);
}
/// <summary>
/// Removes a member from the sorted set stored at key(Async)
/// </summary>
/// <param name="key">key</param>
/// <param name="member">member</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<bool> ZRemAsync(RedisKey key, RedisValue member, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SortedSetRemoveAsync(key, member, flags);
}
/// <summary>
/// Removes members from the sorted set stored at key
/// </summary>
/// <param name="key">key</param>
/// <param name="members">members</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public long ZRem(RedisKey key, IList<RedisValue> members, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SortedSetRemove(key, members.ToArray(), flags);
}
/// <summary>
/// Removes members from the sorted set stored at key(Asynchronous)
/// </summary>
/// <param name="key">key</param>
/// <param name="members">members</param>
/// <param name="flags">behaviour</param>
/// <param name="db">index of database</param>
/// <returns></returns>
public Task<long> ZRemAsync(RedisKey key, IList<RedisValue> members, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SortedSetRemoveAsync(key, members.ToArray(), flags);
}
#endregion #region zrange
public IList<RedisValue> ZRange(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SortedSetRangeByRank(key, start, stop, Order.Ascending, flags).ToList();
}
public Task<RedisValue[]> ZRangeAsync(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SortedSetRangeByRankAsync(key, start, stop, Order.Ascending, flags);
}
#endregion #region zrevrange
public IList<RedisValue> ZRevRange(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SortedSetRangeByRank(key, start, stop, Order.Descending, flags).ToList();
}
public Task<RedisValue[]> ZRevRangeAsync(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db, true).SortedSetRangeByRankAsync(key, start, stop, Order.Descending, flags);
}
#endregion #region zincrby
public double ZIncrby(RedisKey key, RedisValue member, double value = , CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SortedSetIncrement(key, member, value, flags);
}
public Task<double> ZIncrbyAsync(RedisKey key, RedisValue member, double value = , CommandFlags flags = CommandFlags.None, int db = )
{
return GetDatabase(db).SortedSetIncrementAsync(key, member, value, flags);
}
#endregion
#endregion #region pub/sub
public long Publish(RedisChannel channel, RedisValue value, CommandFlags flags = CommandFlags.None, bool isRead = false)
{
return GetSubscriber(isRead).Publish(channel, value, flags);
}
public void Subscribe(RedisChannel channel, Action<RedisChannel, RedisValue> handle, CommandFlags flags = CommandFlags.None, bool isRead = false)
{
GetSubscriber(isRead).Subscribe(channel, handle, flags);
}
public void UnSubscrribe(RedisChannel channel, Action<RedisChannel, RedisValue> handle, CommandFlags flags = CommandFlags.None, bool isRead = false)
{
GetSubscriber(isRead).Unsubscribe(channel, handle, flags);
}
#endregion
}
}

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的更多相关文章

  1. Basic Tutorials of Redis(8) -Transaction

    Data play an important part in our project,how can we ensure correctness of the data and prevent the ...

  2. Basic Tutorials of Redis(2) - String

    This post is mainly about how to use the commands to handle the Strings of Redis.And I will show you ...

  3. Basic Tutorials of Redis(7) -Publish and Subscribe

    This post is mainly about the publishment and subscription in Redis.I think you may subscribe some o ...

  4. Basic Tutorials of Redis(6) - List

    Redis's List is different from C#'s List,but similar with C#'s LinkedList.Sometimes I confuse with t ...

  5. Basic Tutorials of Redis(5) - Sorted Set

    The last post is mainly about the unsorted set,in this post I will show you the sorted set playing a ...

  6. Basic Tutorials of Redis(4) -Set

    This post will introduce you to some usages of Set in Redis.The Set is a unordered set,it means that ...

  7. Basic Tutorials of Redis(3) -Hash

    When you first saw the name of Hash,what do you think?HashSet,HashTable or other data structs of C#? ...

  8. Basic Tutorials of Redis(1) - Install And Configure Redis

    Nowaday, Redis became more and more popular , many projects use it in the cache module and the store ...

  9. [C#] 使用 StackExchange.Redis 封装属于自己的 RedisHelper

    使用 StackExchange.Redis 封装属于自己的 RedisHelper 目录 核心类 ConnectionMultiplexer 字符串(String) 哈希(Hash) 列表(List ...

随机推荐

  1. 谈谈一些有趣的CSS题目(二)-- 从条纹边框的实现谈盒子模型

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  2. 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

  3. DataTable 转换成 Json的3种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...

  4. 如何安全的将VMware vCenter Server使用的SQL Server Express数据库平滑升级到完整版

    背景: 由于建设初期使用的vSphere vCenter for Windows版,其中安装自动化过程中会使用SQL Server Express的免费版数据库进行基础环境构建.而此时随着业务量的增加 ...

  5. 验证管理员权限(C#)

    参考页面: http://www.yuanjiaocheng.net/webapi/test-webapi.html http://www.yuanjiaocheng.net/webapi/web-a ...

  6. ABP项目中使用Swagger生成动态WebAPI

    本文是根据角落的白板报的<使用ABP实现SwaggerUI,生成动态webapi>一文的学习总结,感谢原文作者角落的白板报. 1 安装Swashbuckle.core 1.1 选择WebA ...

  7. 关于BAPI_PATIENT_CREATE(病患主数据创建)

    第一次使用BAPI,遇到几个问题.现总结如下. CALL FUNCTION 'BAPI_PATIENT_CREATE' EXPORTING client = * INSTITUTION = '*' * ...

  8. 如何区别数据库删除语句drop与delete与truncate?

    1.delete:删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行) 删除某一行:delete from 数据表名称 where 列名称=值: 删除所有行:delete*fro ...

  9. jQuery 的选择器常用的元素查找方法

    jQuery 的选择器常用的元素查找方法 基本选择器: $("#myELement")    选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myE ...

  10. SVN版本冲突,导致出现Files 的值“ < < < < < < < .mine”无效

    只要根据错误提示,找到相应文件夹下的\obj\Debug文件夹下的 相应名字.csproj.FileListAbsolute.txt, 打开并删除含有'<<<<<< ...