应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

Service-stack.redis配置连接池与读写分离(处理并发相关等)

10215人阅读 2018/12/12 12:25 总访问:5178841 评论:0 收藏:0 手机
分类: Redis


 配置连接池与读写分类

  1.   
  2.   //写节点(主节点)
  3.             List<string> writes = new List<string>();
  4.             writes.Add("123456abcdef@127.0.0.1:6379");
  5.             //读节点
  6.             List<string> reads = new List<string>();
  7.             reads.Add("123456abcdef@127.0.0.1:6379");
  8.             reads.Add("123456abcdef@127.0.0.1:6379");
  9.             reads.Add("123456abcdef@127.0.0.1:6379");
  10.             //配置连接池和读写分类
  11.             poolrl = new PooledRedisClientManager(writes, reads, new RedisClientManagerConfig()
  12.             {
  13.                 MaxReadPoolSize = 50//读节点个数
  14.                 MaxWritePoolSize = 50,//写节点个数
  15.             });

注意这里配置密码的方式:      密码@ip:端口

如果你想读节点和写节点都一样的话,直接把读节点和写节点配置成一样的就好了


完整一点的代码:

  1.  public class SingletonRedis
  2.     {
  3.         // 定义一个静态变量来保存类的实例
  4.         private static PooledRedisClientManager poolrl;
  5.         private static readonly object obj = new object();
  6.         // 定义私有构造函数,使外界不能创建该类实例
  7.         private SingletonRedis()
  8.         {
  9.         }
  10.         /// <summary>
  11.         /// 获取Redis写节点
  12.         /// </summary>
  13.         /// <returns></returns>
  14.         public static RedisClient GetInstance()
  15.         {
  16.             // 如果连接池的实例不存在则创建,否则直接返回
  17.             if (poolrl == null)
  18.             {
  19.                 lock (obj)
  20.                 {
  21.                     if (poolrl == null)
  22.                     {
  23.                         CreatePoolManager();
  24.                     }
  25.                 }
  26.             }
  27.             return poolrl.GetClient() as RedisClient;
  28.         }
  29.         /// <summary>
  30.         /// 获取Redis读节点(读取的时候就读取本地的,这样效率就会很快)
  31.         /// </summary>
  32.         /// <returns></returns>
  33.         public static RedisClient GetReadOnlyInstance()
  34.         {
  35.             if (poolrl == null)
  36.             {
  37.                 lock (obj)
  38.                 {
  39.                     if (poolrl == null)
  40.                     {
  41.                         CreatePoolManager();
  42.                     }
  43.                 }
  44.             }
  45.             return poolrl.GetReadOnlyClient() as RedisClient;
  46.         }
  47.         private static void CreatePoolManager()
  48.         {
  49.             ////写节点(主节点)
  50.             List<string> writes = new List<string>();
  51.             writes.Add("127.0.0.1:6379");
  52.             //读节点(本地)
  53.             List<string> reads = new List<string>();
  54.             reads.Add("127.0.0.1:6379");
  55.             reads.Add("127.0.0.1:6380");
  56.             //配置连接池和读写分类
  57.             poolrl = new PooledRedisClientManager(writes, reads, new RedisClientManagerConfig()
  58.             {
  59.                 MaxReadPoolSize = 50//读节点个数
  60.                 MaxWritePoolSize = 50,//写节点个数
  61.             });
  62.         }
  63.     }

这样我们想要去写入缓存的时候就调用 GetInstance方法,如果是想要读的话就调用CreatePoolManager方法,通常读节点配置成本地缓存,这样效率快一点。

我们可以测试获取一下一下读节点,上面我们读接口设置了两个看看获取的情况:

我们可以看到找到6380的次数是10次,刚好是我们循环次数的一半,说明负载均衡做得不错哇

 


ps:当然读写分离其实更好一点的做法是:

1:使用一个项目专门负责读

2:另外一个项目专门复制写   

然后使用消息队列通讯就行了嘛,分离逻辑分离项目,降低耦合度,增强维护性


这样做的好处:处理redis就是一个独立的项目,相关的功能就会高内聚,不会在不同的项目都去重复的写,

这样维护起来就方便多了,就维护那一个地方的,不乱




欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

ajaxget时请求异步缓存

ajax中的get为何有时执行,有时不执行?(九十岁老太为何起死回生,数百头母猪为何半夜惨叫;女生宿舍为何频频失窃,超市方...

百度编辑器本地缓存

百度编辑器默认有本地缓存。存储在localstorage中。可以防止用户在写文章的时候意外关闭后不至于之前写的内容会丢失读取本...

修改了css后,让浏览器从缓存中更新

当我们修改了css后,如果不做一些操作,浏览器是不会自动更新我们的样式文件的。除非是过期或者用户手动刷新清理缓存等。所...

没有为 SQL 缓存通知启用数据库

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql -S 数据库IP -U 登录名 -P 密码 -d 数据库名称 -t 表名 -et

添加缓存区提升计算机的读写性能

哈喽,大家好,我是刘小贱。今天呢,刘小贱给大家分享一款运行在windoes系统上的神器软件,软件名:PrimoCache这款软件呢是通...

缓存穿透、缓存击穿、缓存雪崩区别

一、缓存穿透 缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存...

.net 微信开发获取access_token使用缓存处理token过期

获取access_token很简单,使用httpclient发起一个请求就可以了,我们使用redis做一下缓存处理publicstaticstringGetToken()...

.NetCore 使用缓存

1.Startup.csservices.AddMemoryCache(); services.AddMvc();2.封装Logger类[Route(&quot;api/todo&quot;)] [Authorize] ...

Redis-缓存

今天我讲一下 Redis缓存的问题Tedis缓存是存到内存中的数据库是存到硬盘中的我们把这个安装包解压好然后 解压好 按住Shift...

Redis 数据缓存

Redis缓存操作(添加缓存,删除缓存,修改缓存)的代码实现 首先介绍一下:Redis支持五种数据类型:String(字符串),hash...

给toke一个缓存,防止多次访问

Redis 缓存一个toke 代码如下:publicstaticstringGetToken() { RedisClientredisClient=newRedisClient(); //先从缓存...

Redis缓存Token+设置过期时间+后台设置菜单

今天我们记录一下后台访问接口+Redis缓存数据首先我们要调一下接口这里我们要拿到数据(Token)的话 需要反序列化因为我这个...

微信公众开发token的获取和Redis缓存结合用

创建一个类库DTO_Token_Tools,在创建一个工具类在工具类里面写一个access_Token_Tool()方法//获取token publicstringacce...

获取微信token使用缓存处理token过期

今天我们学习微信公众号的开发啦针对于微信公众号的开发。步骤还是有些繁琐,我们需要一步一步来。1,在百度搜索微信公众平...

.netCore 使用分布式缓存(docker+redis)

1. 通过docker创建 Redis执行命令:dockerrun--nameasp-redis-p6379:6379-dredis查看redis状态:dockerps可以发现alreadywo...

将程序集添加到缓存失败: 系统找不到指定的文件。vs2017添加引用失败

vs2017添加引用失败。将程序集添加到缓存失败: 系统找不到指定的文件这个是因为缺少相应的dll,也就是microsoft.visualstud...