stackexchange.mysql_StackExchange.Redis使用以及封装

usingNewtonsoft.Json;usingStackExchange.Redis;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingSystem.Web;namespaceRedisTest.RedisCommon

{public classRedisHelper

{private int DbNum { get; }private readonlyConnectionMultiplexer _conn;public stringCustomKey;#region 构造函数

public RedisHelper(int dbNum = 0)

:this(dbNum, null)

{

}public RedisHelper(int dbNum, stringreadWriteHosts)

{

DbNum=dbNum;

_conn=

string.IsNullOrWhiteSpace(readWriteHosts) ?RedisConnectionHelp.Instance :

RedisConnectionHelp.GetConnectionMultiplexer(readWriteHosts);

}#endregion

#region 辅助方法

private string AddSysCustomKey(stringoldKey)

{var prefixKey = CustomKey ??RedisConnectionHelp.SysCustomKey;return prefixKey +oldKey;

}private T Do(Funcfunc)

{var database =_conn.GetDatabase(DbNum);returnfunc(database);

}private string ConvertJson(T value)

{string result = value is string ?value.ToString() : JsonConvert.SerializeObject(value);returnresult;

}private T ConvertObj(RedisValue value)

{return JsonConvert.DeserializeObject(value);

}private List ConvetList(RedisValue[] values)

{

List result = new List();foreach (var item invalues)

{var model = ConvertObj(item);

result.Add(model);

}returnresult;

}private RedisKey[] ConvertRedisKeys(ListredisKeys)

{return redisKeys.Select(redisKey =>(RedisKey)redisKey).ToArray();

}#endregion 辅助方法

#region String

#region 同步方法

///

///保存单个key value///

/// Redis Key

/// 保存的值

/// 过期时间

///

public bool StringSet(string key, string value, TimeSpan? expiry = default(TimeSpan?))

{

key=AddSysCustomKey(key);return Do(db =>db.StringSet(key, value, expiry));

}///

///保存多个key value///

/// 键值对

///

public bool StringSet(List>keyValues)

{

List> newkeyValues =keyValues.Select(p=> new KeyValuePair(AddSysCustomKey(p.Key), p.Value)).ToList();return Do(db =>db.StringSet(newkeyValues.ToArray()));

}///

///保存一个对象///

///

///

///

///

///

public bool StringSet(string key, T obj, TimeSpan? expiry = default(TimeSpan?))

{

key=AddSysCustomKey(key);string json =ConvertJson(obj);return Do(db =>db.StringSet(key, json, expiry));

}///

///获取单个key的值///

/// Redis Key

///

public string StringGet(stringkey)

{

key=AddSysCustomKey(key);return Do(db =>db.StringGet(key));

}///

///获取多个Key///

/// Redis Key集合

///

public RedisValue[] StringGet(ListlistKey)

{

List newKeys =listKey.Select(AddSysCustomKey).ToList();return Do(db =>db.StringGet(ConvertRedisKeys(newKeys)));

}///

///获取一个key的对象///

///

///

///

public T StringGet(stringkey)

{

key=AddSysCustomKey(key);return Do(db => ConvertObj(db.StringGet(key)));

}///

///为数字增长val///

///

/// 可以为负

/// 增长后的值

public double StringIncrement(string key, double val = 1)

{

key=AddSysCustomKey(key);return Do(db =>db.StringIncrement(key, val));

}///

///为数字减少val///

///

/// 可以为负

/// 减少后的值

public double StringDecrement(string key, double val = 1)

{

key=AddSysCustomKey(key);return Do(db =>db.StringDecrement(key, val));

}#endregion 同步方法

#region 异步方法

///

///保存单个key value///

/// Redis Key

/// 保存的值

/// 过期时间

///

public async Task StringSetAsync(string key, string value, TimeSpan? expiry = default(TimeSpan?))

{

key=AddSysCustomKey(key);return await Do(db =>db.StringSetAsync(key, value, expiry));

}///

///保存多个key value///

/// 键值对

///

public async Task StringSetAsync(List>keyValues)

{

List> newkeyValues =keyValues.Select(p=> new KeyValuePair(AddSysCustomKey(p.Key), p.Value)).ToList();return await Do(db =>db.StringSetAsync(newkeyValues.ToArray()));

}///

///保存一个对象///

///

///

///

///

///

public async Task StringSetAsync(string key, T obj, TimeSpan? expiry = default(TimeSpan?))

{

key=AddSysCustomKey(key);string json =ConvertJson(obj);return await Do(db =>db.StringSetAsync(key, json, expiry));

}///

///获取单个key的值///

/// Redis Key

///

public async Task StringGetAsync(stringkey)

{

key=AddSysCustomKey(key);return await Do(db =>db.StringGetAsync(key));

}///

///获取多个Key///

/// Redis Key集合

///

public async Task StringGetAsync(ListlistKey)

{

List newKeys =listKey.Select(AddSysCustomKey).ToList();return await Do(db =>db.StringGetAsync(ConvertRedisKeys(newKeys)));

}///

///获取一个key的对象///

///

///

///

public async Task StringGetAsync(stringkey)

{

key=AddSysCustomKey(key);string result = await Do(db =>db.StringGetAsync(key));return ConvertObj(result);

}///

///为数字增长val///

///

/// 可以为负

/// 增长后的值

public async Task StringIncrementAsync(string key, double val = 1)

{

key=AddSysCustomKey(key);return await Do(db =>db.StringIncrementAsync(key, val));

}///

///为数字减少val///

///

/// 可以为负

/// 减少后的值

public async Task StringDecrementAsync(string key, double val = 1)

{

key=AddSysCustomKey(key);return await Do(db =>db.StringDecrementAsync(key, val));

}#endregion 异步方法

#endregion String

#region List

#region 同步方法

///

///移除指定ListId的内部List的值///

///

///

public void ListRemove(stringkey, T value)

{

key=AddSysCustomKey(key);

Do(db=>db.ListRemove(key, ConvertJson(value)));

}///

///获取指定key的List///

///

///

public List ListRange(stringkey)

{

key=AddSysCustomKey(key);return Do(redis =>{var values =redis.ListRange(key);return ConvetList(values);

});

}///

///入队///

///

///

public void ListRightPush(stringkey, T value)

{

key=AddSysCustomKey(key);

Do(db=>db.ListRightPush(key, ConvertJson(value)));

}///

///出队///

///

///

///

public T ListRightPop(stringkey)

{

key=AddSysCustomKey(key);return Do(db =>{var value =db.ListRightPop(key);return ConvertObj(value);

});

}///

///入栈///

///

///

///

public void ListLeftPush(stringkey, T value)

{

key=AddSysCustomKey(key);

Do(db=>db.ListLeftPush(key, ConvertJson(value)));

}///

///出栈///

///

///

///

public T ListLeftPop(stringkey)

{

key=AddSysCustomKey(key);return Do(db =>{var value =db.ListLeftPop(key);return ConvertObj(value);

});

}///

///获取集合中的数量///

///

///

public long ListLength(stringkey)

{

key=AddSysCustomKey(key);return Do(redis =>redis.ListLength(key));

}#endregion 同步方法

#region 异步方法

///

///移除指定ListId的内部List的值///

///

///

public async Task ListRemoveAsync(stringkey, T value)

{

key=AddSysCustomKey(key);return await Do(db =>db.ListRemoveAsync(key, ConvertJson(value)));

}///

///获取指定key的List///

///

///

public async Task> ListRangeAsync(stringkey)

{

key=AddSysCustomKey(key);var values = await Do(redis =>redis.ListRangeAsync(key));return ConvetList(values);

}///

///入队///

///

///

public async Task ListRightPushAsync(stringkey, T value)

{

key=AddSysCustomKey(key);return await Do(db =>db.ListRightPushAsync(key, ConvertJson(value)));

}///

///出队///

///

///

///

public async Task ListRightPopAsync(stringkey)

{

key=AddSysCustomKey(key);var value = await Do(db =>db.ListRightPopAsync(key));return ConvertObj(value);

}///

///入栈///

///

///

///

public async Task ListLeftPushAsync(stringkey, T value)

{

key=AddSysCustomKey(key);return await Do(db =>db.ListLeftPushAsync(key, ConvertJson(value)));

}///

///出栈///

///

///

///

public async Task ListLeftPopAsync(stringkey)

{

key=AddSysCustomKey(key);var value = await Do(db =>db.ListLeftPopAsync(key));return ConvertObj(value);

}///

///获取集合中的数量///

///

///

public async Task ListLengthAsync(stringkey)

{

key=AddSysCustomKey(key);return await Do(redis =>redis.ListLengthAsync(key));

}#endregion 异步方法

#endregion List

#region Hash

#region 同步方法

///

///判断某个数据是否已经被缓存///

///

///

///

public bool HashExists(string key, stringdataKey)

{

key=AddSysCustomKey(key);return Do(db =>db.HashExists(key, dataKey));

}///

///存储数据到hash表///

///

///

///

///

///

public bool HashSet(string key, stringdataKey, T t)

{

key=AddSysCustomKey(key);return Do(db =>{string json =ConvertJson(t);returndb.HashSet(key, dataKey, json);

});

}///

///移除hash中的某值///

///

///

///

public bool HashDelete(string key, stringdataKey)

{

key=AddSysCustomKey(key);return Do(db =>db.HashDelete(key, dataKey));

}///

///移除hash中的多个值///

///

///

///

public long HashDelete(string key, ListdataKeys)

{

key=AddSysCustomKey(key);//List dataKeys1 = new List() {"1","2"};

return Do(db =>db.HashDelete(key, dataKeys.ToArray()));

}///

///从hash表获取数据///

///

///

///

///

public T HashGet(string key, stringdataKey)

{

key=AddSysCustomKey(key);return Do(db =>{string value =db.HashGet(key, dataKey);return ConvertObj(value);

});

}///

///为数字增长val///

///

///

/// 可以为负

/// 增长后的值

public double HashIncrement(string key, string dataKey, double val = 1)

{

key=AddSysCustomKey(key);return Do(db =>db.HashIncrement(key, dataKey, val));

}///

///为数字减少val///

///

///

/// 可以为负

/// 减少后的值

public double HashDecrement(string key, string dataKey, double val = 1)

{

key=AddSysCustomKey(key);return Do(db =>db.HashDecrement(key, dataKey, val));

}///

///获取hashkey所有Redis key///

///

///

///

public List HashKeys(stringkey)

{

key=AddSysCustomKey(key);return Do(db =>{

RedisValue[] values=db.HashKeys(key);return ConvetList(values);

});

}#endregion 同步方法

#region 异步方法

///

///判断某个数据是否已经被缓存///

///

///

///

public async Task HashExistsAsync(string key, stringdataKey)

{

key=AddSysCustomKey(key);return await Do(db =>db.HashExistsAsync(key, dataKey));

}///

///存储数据到hash表///

///

///

///

///

///

public async Task HashSetAsync(string key, stringdataKey, T t)

{

key=AddSysCustomKey(key);return await Do(db =>{string json =ConvertJson(t);returndb.HashSetAsync(key, dataKey, json);

});

}///

///移除hash中的某值///

///

///

///

public async Task HashDeleteAsync(string key, stringdataKey)

{

key=AddSysCustomKey(key);return await Do(db =>db.HashDeleteAsync(key, dataKey));

}///

///移除hash中的多个值///

///

///

///

public async Task HashDeleteAsync(string key, ListdataKeys)

{

key=AddSysCustomKey(key);//List dataKeys1 = new List() {"1","2"};

return await Do(db =>db.HashDeleteAsync(key, dataKeys.ToArray()));

}///

///从hash表获取数据///

///

///

///

///

public async Task HashGeAsync(string key, stringdataKey)

{

key=AddSysCustomKey(key);string value = await Do(db =>db.HashGetAsync(key, dataKey));return ConvertObj(value);

}///

///为数字增长val///

///

///

/// 可以为负

/// 增长后的值

public async Task HashIncrementAsync(string key, string dataKey, double val = 1)

{

key=AddSysCustomKey(key);return await Do(db =>db.HashIncrementAsync(key, dataKey, val));

}///

///为数字减少val///

///

///

/// 可以为负

/// 减少后的值

public async Task HashDecrementAsync(string key, string dataKey, double val = 1)

{

key=AddSysCustomKey(key);return await Do(db =>db.HashDecrementAsync(key, dataKey, val));

}///

///获取hashkey所有Redis key///

///

///

///

public async Task> HashKeysAsync(stringkey)

{

key=AddSysCustomKey(key);

RedisValue[] values= await Do(db =>db.HashKeysAsync(key));return ConvetList(values);

}#endregion 异步方法

#endregion Hash

#region SortedSet 有序集合

#region 同步方法

///

///添加///

///

///

///

public bool SortedSetAdd(string key, T value, doublescore)

{

key=AddSysCustomKey(key);return Do(redis => redis.SortedSetAdd(key, ConvertJson(value), score));

}///

///删除///

///

///

public bool SortedSetRemove(stringkey, T value)

{

key=AddSysCustomKey(key);return Do(redis =>redis.SortedSetRemove(key, ConvertJson(value)));

}///

///获取全部///

///

///

public List SortedSetRangeByRank(stringkey)

{

key=AddSysCustomKey(key);return Do(redis =>{var values =redis.SortedSetRangeByRank(key);return ConvetList(values);

});

}///

///获取集合中的数量///

///

///

public long SortedSetLength(stringkey)

{

key=AddSysCustomKey(key);return Do(redis =>redis.SortedSetLength(key));

}#endregion 同步方法

#region 异步方法

///

///添加///

///

///

///

public async Task SortedSetAddAsync(string key, T value, doublescore)

{

key=AddSysCustomKey(key);return await Do(redis => redis.SortedSetAddAsync(key, ConvertJson(value), score));

}///

///删除///

///

///

public async Task SortedSetRemoveAsync(stringkey, T value)

{

key=AddSysCustomKey(key);return await Do(redis =>redis.SortedSetRemoveAsync(key, ConvertJson(value)));

}///

///获取全部///

///

///

public async Task> SortedSetRangeByRankAsync(stringkey)

{

key=AddSysCustomKey(key);var values = await Do(redis =>redis.SortedSetRangeByRankAsync(key));return ConvetList(values);

}///

///获取集合中的数量///

///

///

public async Task SortedSetLengthAsync(stringkey)

{

key=AddSysCustomKey(key);return await Do(redis =>redis.SortedSetLengthAsync(key));

}#endregion 异步方法

#endregion SortedSet 有序集合

#region key

///

///删除单个key///

/// redis key

/// 是否删除成功

public bool KeyDelete(stringkey)

{

key=AddSysCustomKey(key);return Do(db =>db.KeyDelete(key));

}///

///删除多个key///

/// rediskey

/// 成功删除的个数

public long KeyDelete(Listkeys)

{

List newKeys =keys.Select(AddSysCustomKey).ToList();return Do(db =>db.KeyDelete(ConvertRedisKeys(newKeys)));

}///

///判断key是否存储///

/// redis key

///

public bool KeyExists(stringkey)

{

key=AddSysCustomKey(key);return Do(db =>db.KeyExists(key));

}///

///重新命名key///

/// 就的redis key

/// 新的redis key

///

public bool KeyRename(string key, stringnewKey)

{

key=AddSysCustomKey(key);return Do(db =>db.KeyRename(key, newKey));

}///

///设置Key的时间///

/// redis key

///

///

public bool KeyExpire(string key, TimeSpan? expiry = default(TimeSpan?))

{

key=AddSysCustomKey(key);return Do(db =>db.KeyExpire(key, expiry));

}#endregion key

#region 发布订阅

///

///Redis发布订阅 订阅///

///

///

public void Subscribe(string subChannel, Action handler = null)

{

ISubscriber sub=_conn.GetSubscriber();

sub.Subscribe(subChannel, (channel, message)=>{if (handler == null)

{

Console.WriteLine(subChannel+ "订阅收到消息:" +message);

}else{

handler(channel, message);

}

});

}///

///Redis发布订阅 发布///

///

///

///

///

public long Publish(stringchannel, T msg)

{

ISubscriber sub=_conn.GetSubscriber();returnsub.Publish(channel, ConvertJson(msg));

}///

///Redis发布订阅 取消订阅///

///

public void Unsubscribe(stringchannel)

{

ISubscriber sub=_conn.GetSubscriber();

sub.Unsubscribe(channel);

}///

///Redis发布订阅 取消全部订阅///

public voidUnsubscribeAll()

{

ISubscriber sub=_conn.GetSubscriber();

sub.UnsubscribeAll();

}#endregion 发布订阅

#region 其他

publicITransaction CreateTransaction()

{returnGetDatabase().CreateTransaction();

}publicIDatabase GetDatabase()

{return_conn.GetDatabase(DbNum);

}public IServer GetServer(stringhostAndPort)

{return_conn.GetServer(hostAndPort);

}///

///设置前缀///

///

public void SetSysCustomKey(stringcustomKey)

{

CustomKey=customKey;

}#endregion 其他}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值