關於C#操作redis公共類,網上有很多版本,每個版本我都看了,發覺還是不夠完美,都存在一個問題,只能操作單一的緩存數據庫
redis指令支持上,這里可以自己去擴展,下面分享下我近期封裝的一個redis操作類
要用到
ServiceStack.Redis V3版,不要用V4 ,v4已經商業化了,有6000次限制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ServiceStack.Redis;
namespace ZhengXin.Tools
{
public class RedisUtils
{
/// <summary>
/// 默認過期時間 為秒
/// </summary>
private static int secondsTimeOut = 30 * 60;
#region @Royal改進部分,能操作16個庫
private static readonly Dictionary<int, PooledRedisClientManager> pools = new Dictionary<int, PooledRedisClientManager>();
static RedisUtils()
{
string path = ConfigHelper.GetConfigKeyValue("RedisPath");
string[] readWriteHosts = new string[] { path };
string[] readOnlyHosts = new string[] { path };
//初始化16個緩存庫
for (int i = 0; i <= 15; i++)
{
var model = new PooledRedisClientManager(readWriteHosts, readOnlyHosts, new RedisClientManagerConfig
{
MaxWritePoolSize = 50, // “寫”鏈接池鏈接數
MaxReadPoolSize = 50, // “讀”鏈接池鏈接數
AutoStart = true,
}, i, 100, 20);
pools.Add(i, model);
}
}
public static PooledRedisClientManager ChooseRedisInstance(int database)
{
if (database > 16) return pools[0];
return pools[database];
}
public static void Lpush(string key, string value, int database = 0)
{
using (IRedisClient redis = ChooseRedisInstance(database).GetClient())
{
redis.PushItemToList(key, value);
}
}
public static string Lpop(string key, int database = 0)
{
using (IRedisClient redis = ChooseRedisInstance(database).GetClient())
{
return redis.PopItemFromList(key);
}
}
public static List<string> List(string key, int database = 0)
{
using (IRedisClient redis = ChooseRedisInstance(database).GetClient())
{
return redis.GetAllItemsFromList(key);
}
}
public static bool ItemSet<T>(string key, T t, int timeout = 0, int db = 2)
{
using (IRedisClient RClient = ChooseRedisInstance(db).GetClient())
{
if (timeout >= 0)
{
if (timeout > 0)
{
secondsTimeOut = timeout;
}
}
return RClient.Add<T>(key, t, TimeSpan.FromMinutes(secondsTimeOut));
}
}
public static T ItemGet<T>(string key, int db = 2) where T : class
{
using (IRedisClient redis = ChooseRedisInstance(db).GetClient())
{
return redis.Get<T>(key);
}
}
}
}
