标签: sentinel

如果未找到搜索结果,则返回"NULL"对象

我对C++很陌生,所以在我学习的时候,我倾向于设计很多Java主义.无论如何,在Java中,如果我的类具有"搜索"方法,该方法T将从Collection< T >匹配特定参数的对象返回一个对象,我将返回该对象,如果在集合中找不到该对象,我将返回null.然后在我的调用函数中,我会检查if(tResult != null) { ... }

在C++中,我发现null如果对象不存在,我就无法返回值.我只想返回一个类型为T的'指示符',它通知调用函数没有找到任何对象.我不想抛出异常,因为它并不是一个特例.

这就是我的代码现在的样子:

class Node {
    Attr& getAttribute(const string& attribute_name) const {
       //search collection
       //if found at i
            return attributes[i];
       //if not found
            return NULL; // what should this be?
    }

private:
    vector<Attr> attributes;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能改变它以便我能给出那种标记?

c++ return-value sentinel

91
推荐指数
3
解决办法
10万
查看次数

寻找与Sentinel的Jedis的例子

我正在寻找一个使用redis哨兵的jedis的例子.我无法使用jedis设施进行哨兵,我找不到任何好的示例或文档.

redis sentinel jedis

15
推荐指数
2
解决办法
2万
查看次数

使用C#中的StackExchange/Sentinel进行Redis故障转移

我们目前正在使用Redis 2.8.4和StackExchange.Redis(并且喜欢它),但目前还没有针对硬件故障等的任何形式的保护.我正在尝试使解决方案正常工作,我们有主/从和监控但不能完全到达那里,我在搜索后找不到任何真正的指针.

所以目前我们已经做到了这一点:

我们在每个节点上有3个redis服务器和sentinel(由Linux人员设置):devredis01:6383(master)devredis02:6383(slave)devredis03:6383(slave)devredis01:26379(sentinel)devredis02:26379(sentinel)devredis03: 26379(哨兵)

我能够将StackExchange客户端连接到redis服务器并进行写入/读取,并使用Redis Desktop Manager验证是否正在跨所有redis实例复制数据.

我也可以使用不同的ConnectionMultiplexer连接到sentinel服务,查询配置,请求主redis节点,请求奴隶等.

我们还可以终止主redis节点并验证其中一个从服务器是否已升级为主服务器,并且复制到另一个从服务器继续工作.我们可以观察redis连接尝试重新连接到主设备,如果我重新创建ConnectionMultiplexer,我可以再次写入/读取新升级的主设备并从从设备读取.

到现在为止还挺好!

我缺少的是你如何在生产系统中将它们整合在一起?

我应该从sentinel获取redis端点并使用2个ConnectionMultiplexers吗?我究竟需要做些什么来检测节点是否已经关闭?StackExchange可以自动为我执行此操作还是通过事件,以便重新连接我的redis ConnectionMultiplexer?我应该处理ConnectionFailed事件然后重新连接,以便ConnectionMuliplexer找出新主设备是什么?据推测,当我重新连接任何写入的尝试都会丢失?

我希望我不会错过一些非常明显的东西,我只是在努力将它们放在一起.

提前致谢!

c# failover redis sentinel stackexchange.redis

12
推荐指数
2
解决办法
7220
查看次数

哨兵和结束迭代器有什么区别?

在阅读Eric Niebler的范围提议时,
我遇到了哨兵一词,作为最终迭代器的替代品.
我很难理解哨兵对末端迭代器的好处.
有人可以提供一个明确的例子,说明发送到表中的内容是不能用标准迭代器对完成的吗?

" 哨兵是过去的迭代器的抽象.哨兵是常规类型,可用于表示范围的结束.表示范围的哨兵和迭代器应为EqualityComparable.哨兵表示一个元素.迭代器我比较等于哨兵,我指向那个元素." - N4382

我认为哨兵在确定范围的结束时起着作用,而不仅仅是位置?

c++ iterator range sentinel c++17

12
推荐指数
2
解决办法
2271
查看次数

如何在Redis 3.2.6 Sentinel中禁用保护模式?

我尝试了以下错误消息推荐的所有内容:

(错误)DENIED Redis正在受保护模式下运行,因为启用了保护模式,未指定绑定地址,也未向客户端请求身份验证密码.在此模式下,仅从环回接口接受连接.如果要从外部计算机连接到Redis,可以采用以下解决方案之一:1)通过从服务器的同一主机连接到Redis,只需禁用保护模式从环回接口发送命令'CONFIG SET protected-mode no'正在运行,但如果您这样做,则无法通过互联网公开访问.使用CONFIG REWRITE使此更改成为永久更改.2)或者,您可以通过编辑Redis配置文件并将protected mode选项设置为"no"来禁用保护模式,然后重新启动服务器.3)如果您手动启动服务器进行测试,请使用"--protected-mode no"选项重新启动它.4)设置绑定地址或验证密码.注意:您只需要执行上述操作之一,服务器就可以开始接受来自外部的连接.

我的/etc/redis/sentinel.conf:

daemonize yes
sentinel myid XXX
sentinel monitor master XXX 6379 2
sentinel down-after-milliseconds master 60000
sentinel config-epoch master 0
protected-mode no
bind 0.0.0.0
port 26379

编辑:我的/etc/redis/redis.conf:

port 6379
bind 0.0.0.0
protected-mode no

我也尝试过添加sentinel auth-pass master XXX.

我的整个后端都在私有子网上.我已经进入防火墙后面的数据中心,来自同一个专用网络,我仍然可以只在本地连接而不会收到令人沮丧的错误消息.

服务器环境: Debian 8,Redis 3.2.6
客户端环境: Ubuntu 16.10,redis-cli 3.2.1
Redis实例: 3个
Sentinel实例: 3

我不只是一个,而是建议的3/4(没有设置命令行标志).有没有人有任何指导或想法?我显然遗漏了一些我无法从错误消息,文档,Stackoverflow,Google和试错中找到的东西.在想深入了解源代码之前,我想先在这里发一个问题.

任何帮助表示赞赏.谢谢!

...而且,是的,我在配置更改后重新启动了守护进程.:)

redis sentinel redis-sentinel

10
推荐指数
1
解决办法
9710
查看次数

为什么python引用中的绑定实例方法不相等?

>>> class foo(object):
...     def test(s):
...         pass
...
>>> a=foo()
>>> a.test is a.test
False
>>> print a.test
<bound method foo.test of <__main__.foo object at 0x1962b90>>
>>> print a.test
<bound method foo.test of <__main__.foo object at 0x1962b90>>
>>> hash(a.test)
28808
>>> hash(a.test)
28808
>>> id(a.test)
27940656
>>> id(a.test)
27940656
>>> b = a.test
>>> b is b
True
Run Code Online (Sandbox Code Playgroud)

python equality sentinel

9
推荐指数
1
解决办法
250
查看次数

如何使用自定义标记值创建可变参数函数?

关于gnu的C的文档说明如果函数有,__attribute__((sentinel))它必须NULL作为函数的最后一个参数.

是否可以将任何其他值作为结束参数列表的标记?

c variadic-functions sentinel

9
推荐指数
1
解决办法
796
查看次数

如何告诉客户新Redis主站使用Sentinel的位置

好吧,我觉得我错过了一些重要的信息.

本地我有1个主服务器和1个从服务器redis服务器在不同的端口上运行 http://redis.io/topics/sentinel

我也有3个哨兵,他们似乎都相互了解并按预期工作.

现在我有一个很大的java代码指向我的主redis服务器127.0.0.1:6379.

如果我取下主人,哨兵会像预期的那样推动奴隶掌握,所以现在新的主人开启了

127.0.0.1:6380

我的问题是我的代码如何知道这一点和自动切换?

java redis sentinel

9
推荐指数
1
解决办法
6353
查看次数

如何在NLog中记录网络目标的异常

我正在使用NLog日志记录框架,我正在尝试获取异常和堆栈跟踪信息,这些信息显示在任何UDP记录器应用程序中,例如Sentinel和Log2Console,但只能显示日志消息部分.输出到文件的效果很好,因为大多数示例都是如此,因此问题围绕着使用NLog的网络目标.

如果自定义格式可以应用于内部异常和堆栈跟踪,则可以获得奖励,但这不是必需的.Exception.ToString()会有很长的路要走.

关于示例代码的注意事项:使用Log2Console,我发现了一篇关于如何将异常作为单独的日志条目发送的文章.虽然这很有效,但我对解决方案并不满意.

示例异常记录代码:

Logger Log = LogManager.GetCurrentClassLogger();

try
{
    throw new InvalidOperationException("My ex", new FileNotFoundException("My inner ex1", new AccessViolationException("Innermost ex")));
}
catch (Exception e)
{
    Log.ErrorException("TEST", e);
}
Run Code Online (Sandbox Code Playgroud)

示例NLog.config:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<targets async="true">

    <!-- Send by UDP to Sentinel with NLogViewer protocol -->
    <target name="network" xsi:type="NLogViewer" address="udp://192.168.1.3:9999" layout="${message}${onexception:inner=${newline}${exception:format=tostring}}" />

    <!-- Send message by UDP to Log2Console with Chainsaw protocol -->
    <target name="network2" xsi:type="Chainsaw" address="udp://192.168.1.3:9998" …
Run Code Online (Sandbox Code Playgroud)

networking exception nlog stack-trace sentinel

8
推荐指数
1
解决办法
7634
查看次数

添加数字并退出哨兵

我的任务是使用循环来添加一系列数字,并且该循环需要它的sentinel值0才能停止.然后它应该显示添加的总数.到目前为止,我的代码是:

total = 0
print("Enter a number or 0 to quit: ")
while True:
    number = int(input("Enter a number or 0 to quit: "))
    print("Enter a number or 0 to quit: ")
    if number == 0:
        break
        total = total + number
        print ("The total number is", total)
Run Code Online (Sandbox Code Playgroud)

然而,当我运行它时,我输入后不打印总数0.它只是打印"Enter a number or 0 to quit",虽然它不是一个无限循环.

python loops sentinel

8
推荐指数
1
解决办法
2040
查看次数