自己封裝的C#操作redis公共類


關於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); } } } }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM