Search code examples
rediscypherproperty-graph

Watch updates in redis graph


I've recently discovered that redis has a property graph model implementation called redis graph and it's amazing.

One thing that I really miss for my use-case though, is the ability to "watch" the data. In typical redis data structures I can enable Keyspace notifications or client tracking and be notified on the data mutations I'm interested in, pull data from the server or mark my local cache as "dirty".

I don't know how that would work for a property graph since relations are much more complex (and the key feature for that matter), but is there a way to watch or synchronize with data stored in redis graph?


Solution

  • Keyspace notifications can be enabled for modules like this:

    redis.cloud> CONFIG SET notify-keyspace-events AKE
    

    The 'A' part includes modules—if the module publishes anything. Unfortunately, I tried this with RedisGraph, and it doesn't.

    You can reproduce my test below. In one terminal I launched redis-cli and did this:

    127.0.0.1:6379> PSUBSCRIBE *
    Reading messages... (press Ctrl-C to quit)
    1) "psubscribe"
    2) "*"
    3) (integer) 1
    

    In another I did this:

    127.0.0.1:6379> GRAPH.QUERY test 'CREATE (n:foo { alfa: 12, bravo: "test" })'
    1) 1) "Labels added: 1"
       2) "Nodes created: 1"
       3) "Properties set: 2"
       4) "Cached execution: 0"
       5) "Query internal execution time: 0.204701 milliseconds"
    127.0.0.1:6379> GRAPH.QUERY test 'MATCH (n) RETURN n'
    1) 1) "n"
    2) 1) 1) 1) 1) "id"
                2) (integer) 0
             2) 1) "labels"
                2) 1) "foo"
             3) 1) "properties"
                2) 1) 1) "alfa"
                      2) (integer) 12
                   2) 1) "bravo"
                      2) "test"
    3) 1) "Cached execution: 0"
       2) "Query internal execution time: 1.106191 milliseconds"
    127.0.0.1:6379> GRAPH..DELETE test
    "Graph removed, internal execution time: 0.064498 milliseconds"
    

    The first terminal returned nothing in response to this.