.Net支持Redis哨兵模式
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哨兵模式的更多相关文章
- [Redis] Redis哨兵模式部署 - zz胖的博客
1. 部署Redis集群 redis的安装及配置参考[redis部署] 本文以创建一主二从的集群为例. 1.1 部署与配置 先创建sentinel目录,在该目录下创建8000,8001,8002三个以 ...
- Redis 哨兵模式(Sentinel)
上一篇我们介绍了 redis 主从节点之间的数据同步复制技术,通过一次全量复制和不间断的命令传播,可以达到主从节点数据同步备份的效果,一旦主节点宕机,我们可以选择一个工作正常的 slave 成为新的主 ...
- Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步
Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步,一定要绑定内网IP,而对于跨机房的问题,可以使用iptables进行nat转发来解决.
- Redis哨兵模式大key优化
目前,Redis哨兵模式,内存资源有限,有很多key大于500M,性能待优化.需要迁移至Redis-cluster集群中. 涉及到的key如下: 0,hash,duser_record, ...
- Springboot2.x集成Redis哨兵模式
Springboot2.x集成Redis哨兵模式 说明 Redis哨兵模式是Redis高可用方案的一种实现方式,通过哨兵来自动实现故障转移,从而保证高可用. 准备条件 pom.xml中引入相关jar ...
- Spring Boot 入门(十):集成Redis哨兵模式,实现Mybatis二级缓存
本片文章续<Spring Boot 入门(九):集成Quartz定时任务>.本文主要基于redis实现了mybatis二级缓存.较redis缓存,mybaits自带缓存存在缺点(自行谷歌) ...
- 搭建redis哨兵模式
搭建redis哨兵模式,一主两从三哨兵 1.从官网下载redis安装包:此处是redis-5.0.7.tar.gz 2.上传到目录 /utxt/soft 3.解压 4.cd /utxt/soft/ ...
- Redis哨兵模式的配置
绪论 现有三台设备,192.168.137.11.192.168.137.12和192.168.137.13,要求在三台设备上实现redis哨兵模式,其中192.168.137.11为master,其 ...
- Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)
Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍Sentinel ...
随机推荐
- Part4_lesson4---Bootloader架构设计
1.第一阶段程序设计 第二阶段程序设计
- 专题2-通过按键玩中断\第1课-中断处理流程深度剖析-lesson1
中断概念 1.中断生命周期 串口先产生一个事件,该事件传送到中断控制器里面,中断控制器会进行相应过滤,能通过过滤,那么就交给CPU去处理. 2.中断源 2440芯片手册 6410芯片手册 3.中断过滤 ...
- CSS3 grayscale滤镜图片变黑白
1. 使整个页面的图片都变成灰色的,代码如下. html{ font-size: 100%; -webkit-text-size-adjust: none; -ms-text-s ...
- EasyUI学习笔记(1)----Tree控件实现过程中.NET下无法访问json数据的解决办法
直接调用官网的Demo中的方法 , 将json数据存储在同目录下,但是在运行之后树没有出现,用FireBug调试,错误如下 不允许访问json数据,刚开始以为是权限不够,然后又给解决方案所在的文件夹设 ...
- [LintCode笔记了解一下]39.恢复旋转排序数组
思路: 1.需要O(n)的事件复杂度,所以多次循环不考虑 2.四步翻转法 -第一步,找到数组里最小的那个数字,因为是旋转排序数组,所以只要找到某个位置arr[i]>arr[i+1]的话,就找到了 ...
- Extjs Hello extjs
<html > <head runat="server"> <title></title> <link rel="s ...
- 关于hibernate的查询
为什么建议hibernate查询全部字段 一般而言,要查询什么字段就查询什么字段,不要select * from表,但是在hibernate,我们其实可以不遵循这个规则,建议我们把所有属性都查询出来( ...
- HackFifteen 移除背景以提升Activity启动速度
1.概要: 移除窗口默认背景是提升应用程序启动速度的一个简单技巧.判断是否需要移除背景的原则很简单:如果应用程序界面需要 占据窗口100%的控件,就需要将windowBackground属性设 ...
- 数据库索引与b+树
数据库索引详解 索引 当我们在设计数据库的时候,对表的一些属性有时会加上索引,但索引为什么能提高检索速率呢?是不是用了索引就一定可以提高效率呢?不同索引之间有什么区别呢?搞懂这些问题是灵活运用索引的必 ...
- C# 给图片添加透明的文字、图片水印
#region 添加水印 /// <summary> /// 添加文字水印 /// </summary> /// <param name="image" ...