我正在使用redigo库在golang中对redis客户端进行原型设计,以获得密钥空间事件的通知.我修改了redis.conf,将notify-keyspace-events设置为"KEA"以接收所有事件.但是当我使用cli向数据库添加/更新/删除密钥时,我没有看到任何事件在客户端被触发.
使用redigo触发事件的示例代码:
type RedisClient struct {
mRedisServer string
mRedisConn redis.Conn
mWg sync.WaitGroup
}
func (rc *RedisClient) Run() {
conn, err := redis.Dial("tcp", ":6379")
if err != nil {
fmt.Println(err)
return
}
rc.mRedisConn = conn
fmt.Println(conn)
rc.mRedisConn.Do("CONFIG", "SET", "notify-keyspace-events", "KEA")
fmt.Println("Set the notify-keyspace-events to KEA")
defer rc.mRedisConn.Close()
rc.mWg.Add(2)
psc := redis.PubSubConn{Conn: rc.mRedisConn}
go func() {
defer rc.mWg.Done()
for {
switch msg := psc.Receive().(type) {
case redis.Message:
fmt.Printf("Message: %s %s\n", msg.Channel, msg.Data)
case redis.PMessage:
fmt.Printf("PMessage: %s %s %s\n", msg.Pattern, msg.Channel, …Run Code Online (Sandbox Code Playgroud) 是否有一种标准方法可以在C++中的子对象中维护指向父对象(使用共享指针创建)的弱指针?
从本质上讲,我需要实现以下几点:
Class B;
Class A
{
...
private:
B m_b;
};
Class B
{
....
public:
void SetParentPtr(const boost::shared_ptr<A>& a)
{
m_parentPtr = a;
}
private:
boost::weak_ptr<A> m_parentPtr;
};
Run Code Online (Sandbox Code Playgroud)
在上面,B类的所有实例都需要保存一个指向其父级的弱指针(即A类的对象).使用shared_ptr实例化A类对象.我可以想到一个使用空删除器的解决方案.但这是做这样的事情的标准方式吗?