csredis 博客

csRedisgit地址

csRedis3.2.1 Nuget地址 (在使用csredis3.2.1获取sentinel时产生运行时异常,调查问题最后发现是获取sentinel的s-down-time配置参数存在问题。在sentinel集群中并非每个sentinel都能获取到这个参数,获取不到就抛出异常了。)

https://yq.aliyun.com/articles/503938

修复csredis获取redis sentinel的问题

http://blog.bossma.cn/csharp/fix-csredis-get-redis-sentinel-problem/

/// <summary>
/// RedisSentinelManagerContext
/// </summary>
public class RedisSentinelManagerContext
{
/// <summary>
/// 哨兵默认端口
/// </summary>
private const int DefaultSentinelPort = ; /// <summary>
/// Redis哨兵配置地址
/// </summary>
private static readonly string RedisSentinelAddresses = ConfigurationHelper.AppSetting("redis.sentinelAddresses"); /// <summary>
/// Redis哨兵Master地址
/// </summary>
private static readonly string RedisMasterName = ConfigurationHelper.AppSetting("redis.masterName"); /// <summary>
/// Redis密码
/// </summary>
private static readonly string RedisPassword = ConfigurationHelper.AppSetting("redis.password"); /// <summary>
/// RedisSentinelManager实例
/// </summary>
private static RedisSentinelManager _instance; /// <summary>
/// RedisSentinelManager实例
/// </summary>
public static RedisSentinelManager Instance()
{
if (_instance == null)
{
if (string.IsNullOrEmpty(RedisSentinelAddresses) || string.IsNullOrEmpty(RedisMasterName))
{
throw new Exception("没有配置Redis的哨兵地址或Master名称");
} var param = new string[];
_instance = new RedisSentinelManager(param);
RedisSentinelAddresses.Split(',').ForEach(p =>
{
var arr = p.Split(':');
_instance.Add(arr[], arr.Length >= ? int.Parse(arr[]) : DefaultSentinelPort);
});
if(!string.IsNullOrEmpty(RedisPassword))
_instance.Connected += (s, e) => _instance.Call(x => x.Auth(RedisPassword));
_instance.Connect(RedisMasterName);
} return _instance;
} public static string StringSet(string key, string value, int seconds)
{
return _instance.Call(r => r.Set(key, value, seconds));
} public static string StringSet(string key, string value, TimeSpan ts)
{
return _instance.Call(r => r.Set(key, value, ts));
} public static string StringGet(string key)
{
return _instance.Call(r => r.Get(key));
} public static bool KeyExpire(string key, int seconds)
{
return _instance.Call(r => r.Expire(key, seconds));
}
public static bool KeyExpire(string key, TimeSpan expiration)
{
return _instance.Call(r => r.Expire(key, expiration));
} public static bool KeyExist(string key)
{
return _instance.Call(r => r.Exists(key));
} public static bool HSet(string key, string field, object value)
{
return _instance.Call(r => r.HSet(key, field, value));
}
public static string HMSet(string key, Dictionary<string, string> dict)
{
return _instance.Call(r => r.HMSet(key, dict));
} public static Dictionary<string, string> HGetAll(string key)
{
return _instance.Call(r => r.HGetAll(key));
} public static string HGet(string key, string field)
{
return _instance.Call(r => r.HGet(key, field));
} public static bool HExists(string key, string field)
{
return _instance.Call(r => r.HExists(key, field));
} public static long HDel(string key, params string[] fields)
{
return _instance.Call(r => r.HDel(key, fields));
}
}

.Net支持Redis哨兵模式的更多相关文章

  1. [Redis] Redis哨兵模式部署 - zz胖的博客

    1. 部署Redis集群 redis的安装及配置参考[redis部署] 本文以创建一主二从的集群为例. 1.1 部署与配置 先创建sentinel目录,在该目录下创建8000,8001,8002三个以 ...

  2. Redis 哨兵模式(Sentinel)

    上一篇我们介绍了 redis 主从节点之间的数据同步复制技术,通过一次全量复制和不间断的命令传播,可以达到主从节点数据同步备份的效果,一旦主节点宕机,我们可以选择一个工作正常的 slave 成为新的主 ...

  3. Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步

    Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步,一定要绑定内网IP,而对于跨机房的问题,可以使用iptables进行nat转发来解决.

  4. Redis哨兵模式大key优化

    目前,Redis哨兵模式,内存资源有限,有很多key大于500M,性能待优化.需要迁移至Redis-cluster集群中.        涉及到的key如下: 0,hash,duser_record, ...

  5. Springboot2.x集成Redis哨兵模式

    Springboot2.x集成Redis哨兵模式 说明 Redis哨兵模式是Redis高可用方案的一种实现方式,通过哨兵来自动实现故障转移,从而保证高可用. 准备条件 pom.xml中引入相关jar ...

  6. Spring Boot 入门(十):集成Redis哨兵模式,实现Mybatis二级缓存

    本片文章续<Spring Boot 入门(九):集成Quartz定时任务>.本文主要基于redis实现了mybatis二级缓存.较redis缓存,mybaits自带缓存存在缺点(自行谷歌) ...

  7. 搭建redis哨兵模式

    搭建redis哨兵模式,一主两从三哨兵   1.从官网下载redis安装包:此处是redis-5.0.7.tar.gz 2.上传到目录 /utxt/soft 3.解压 4.cd /utxt/soft/ ...

  8. Redis哨兵模式的配置

    绪论 现有三台设备,192.168.137.11.192.168.137.12和192.168.137.13,要求在三台设备上实现redis哨兵模式,其中192.168.137.11为master,其 ...

  9. Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

    Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍Sentinel ...

随机推荐

  1. suse10配置SSH无密码登录的方法

    RSH配置(集群中的每台机器执行以下操作) 1.因SUSE LINUX不自带RSH-SERVER服务,所以首先要去从www.rpmfind.net 下载rsh-server服务的RPM包. 然后切换到 ...

  2. Linux 编译内核

    编译内核步骤: 1.先查看自己OS使用的内核版本 mrzhang@mrzhang:~$ uname -r4.4.0-51-genericmrzhang@mrzhang:~$ 2.如果安装系统时,自动安 ...

  3. 写一段php代码,确保报个进程同时写入同一个文件

  4. 编写高质量代码改善C#程序的157个建议——建议36:使用FCL中的委托声明

    建议36:使用FCL中的委托声明 FCL中存在3类这样的委托声明,它们分别是:Action.Func.Predicate.尤其是在它们的泛型版本出来以后,已经能够满足我们在实际编码过程中的大部分需求. ...

  5. 编写高质量代码改善C#程序的157个建议——建议34:为泛型参数设定约束

    建议34:为泛型参数设定约束 “约束”这个词可能会引起歧义,有些人肯能认为对泛型参数设定约束是限制参数的使用,实际情况正好相反.没有“约束”的泛型参数作用很有限,倒是“约束”让泛型参数具有了更多的行为 ...

  6. Oracle的列操作(增加列,修改列,删除列),包括操作多列

    增加一列: alter table emp4 add test varchar2(10); 修改一列: alter table emp4 modify test varchar2(20); 删除一列: ...

  7. c++内存模型------计算机系统核心概念及软硬件实现

    c++编程语言有3中不同类项的变量:全局变量.局部变量和动态分配变量.变量的值存储在计算机的内存中,但是变量存储的方式取决于变量的类项.3种类型的变量分别对应存储器中3个特定的区域: 全局变量存放在存 ...

  8. memcached装、启动和卸载

    1.下载相关软件: 下载地址:http://download.csdn.net/download/wangshuxuncom/8249501: 2.解压获取到的压缩文件,将得到一个名为“memcach ...

  9. Codeforces Round #551 (Div. 2)A. Serval and Bus

    A. Serval and Bus time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  10. 【bzoj4811】[Ynoi2017]由乃的OJ 树链剖分/LCT+贪心

    Description 给你一个有n个点的树,每个点的包括一个位运算opt和一个权值x,位运算有&,l,^三种,分别用1,2,3表示. 每次询问包含三个数x,y,z,初始选定一个数v.然后v依 ...