Redis Tree (Ploytree) Structure Module
RedisTree is a Redis module that implements Polytree as a native data type. It allows creating,locating,pushing and detaching tree from Redis keys. RedisTree has been running in production environment for one year
Store organization data in redis, Need ploytree and some helper function
# run redis by docker
docker run -p 6379:6379 -d --name redis-redistree ohbonsai/redistree
# exec redis-cli in redis container
docker exec -it redis-redistree /bin/sh
redis-cli
cargo build
redistree
module
redis-server --loadmodule ./target/release/libretree.so
redis-server --loadmodule ./target/release/libretree.dylib
tree.init hello "a (b (d) c)"
.tree.init key tree_value
tree.get key
tree.del key
tree.get_subtree key node_value
tree.del_subtree key node_value
tree.set_subtree key node_value tree_value
tree.get_ancestors key node_value
tree.get_descendants key node_value
tree.get_father key node_value
tree.get_children key node_value
a
/ \
b c
|
e
127.0.0.1:6379> tree.init hello "a (b (d) c)"
OK
127.0.0.1:6379> tree.get hello
"a( b( d ) c )"
127.0.0.1:6379> tree.del hello
OK
127.0.0.1:6379> tree.get hello
(nil)
127.0.0.1:6379> tree.init hello "a (("
(error) ERR () is not closed or no root
|----------------------------------USA----------------------------------|
| | |
Legislature ExecutiveJudiciary Judiciary
/ \ | |
House Senate WhiteHouse SupremeCourt
| | | |
Pelosi Harris Biden Roberts
127.0.0.1:6379> tree.init usa "USA (Legislature (House (Pelosi) Senate (Harris))ExecutiveJudiciary (WhiteHouse (Biden))Judiciary (SupremeCourt (Roberts)))"
OK
# Get subtree of executive judiciary
127.0.0.1:6379> tree.get_subtree usa ExecutiveJudiciary
"ExecutiveJudiciary( WhiteHouse( Biden ) )"
# Add secretary for Biden
127.0.0.1:6379> tree.set_subtree usa Biden "Blinken"
OK
# now biden has secretary
127.0.0.1:6379> tree.get_subtree usa Biden
"Biden( Blinken )"
# Detach Blinken from Biden
127.0.0.1:6379> tree.del_subtree usa Blinken
"Blinken"
127.0.0.1:6379> tree.get_subtree usa Biden
"Biden"
# Get Harris ancestors
127.0.0.1:6379> tree.get_ancestors usa Harris
1) "Senate"
2) "Legislature"
3) "USA"
# Get Harris Father node
127.0.0.1:6379> tree.get_father usa Harris
"Senate"
# Get Legislature Children
127.0.0.1:6379> tree.get_children usa Legislature
1) "House"
2) "Senate"
# Get Legislature Descendants(BFS)
127.0.0.1:6379> tree.get_descendants usa Legislature
1) "Legislature"
2) "House"
3) "Senate"
4) "Pelosi"
5) "Harris"
redis-server --loadmodule yourpath/libretree.so
redis-server --loadmodule ./target/debug/libretree.dylib
loadmodule /yourpath/libretree.so
build build retree docker image
builder build rust cross-compiler base image, for mac developers
clean clean
push push to pornhub
test do some behavioral tester
tester build tester image