当前位置:首页 > 技术 > c# > c#相关文章

C#连接Redis-使用 ServiceStack.Redis 自由切换db

2015-10-11 来源:无名网 作者:无名网整理

前段时间用Redis优化了公司的一个c#项目模块,刚上线时表现还是不错的,但后来发现不太对劲。高峰期时CPU占比很高,于是想找优化方案。

  1. RedisClient RedisClient = new RedisClient("127.0.0.1", 6379);

以上是我一开始采用的链接方式,这种方式会在高峰期时频繁创建和释放链接,对CPU的消耗很大。于是经过一番搜寻,改用了连接池的方式。使用PooledRedisClientManager连接缓冲池中获取连接,使用完毕后还给连接池。

  1. namespace Web
  2. {
  3.     /// <summary>
  4.     /// Redis客户端管理类
  5.     /// </summary>
  6.     public static class RedisManager
  7.     {
  8.         private static PooledRedisClientManager clientManager;
  9.  
  10.         /// <summary>
  11.         /// 初始化信息
  12.         /// </summary>
  13.         private static void initInfo() {
  14.             string host = string.Format("{0}:{1}", "127.0.0.1", "6379"); //这里的IP和端口号大多数人写在配置文件里,我这里因为小功能模块,自己用就直接写在代码里了
  15.             initInfo(new string[] { host},new string[] { host});
  16.         }
  17.  
  18.         /// <summary>
  19.         /// 初始化Redis客户端管理
  20.         /// </summary>
  21.         /// <param name="readWriteHosts"></param>
  22.         /// <param name="readOnlyHosts"></param>
  23.         private static void initInfo(string[] readWriteHosts, string[] readOnlyHosts)
  24.         {
  25.             clientManager = new PooledRedisClientManager(readWriteHosts, readOnlyHosts, new RedisClientManagerConfig
  26.             {
  27.                 MaxWritePoolSize = 200, //写链接池链接数
  28.                 MaxReadPoolSize = 50,  //读链接池链接数
  29.                 AutoStart = true
  30.             });
  31.         }
  32.  
  33.         public static IRedisClient getRedisClient() {
  34.             if (clientManager == null) {
  35.                 initInfo();
  36.             }
  37.             return clientManager.GetClient();
  38.         }
  39.     }
  40. }

下面是调用方法,当然你也可以使用using

  1. namespace Web
  2. {
  3.     public class RedisHelper
  4.     {
  5.         public static string getList(string DeviceName,int num) {
  6.             try {
  7.                 RedisClient redisClient = (RedisClient)RedisManager.getRedisClient();
  8.                 redisClient.ChangeDb(num);
  9.                 string res = redisClient.GetValue(DeviceName) ?? "[]";
  10.                 redisClient.Dispose();
  11.                 return res;
  12.             } catch {
  13.                 return "[]";
  14.                 //return e.Message;
  15.             }
  16.         }
  17.  
  18.         public static int setList(string DeviceName, string list, int num) {
  19.             try {
  20.                 RedisClient redisClient = (RedisClient)RedisManager.getRedisClient();
  21.                 redisClient.ChangeDb(num);
  22.                 redisClient.SetEntry(DeviceName,list);
  23.                 redisClient.Dispose();
  24.             } catch {
  25.                 return 0;
  26.             }
  27.             return 1;
  28.         }
  29.     }
  30. }


相关内容: C# redis
『 猜你喜欢 』