Like the Redis database, Apache Kvrocks™ uses the namespace to isolate the data between users. But unlike Redis, each namespace has its own password. The data would be stored in the default namespace when using requirepass
. The namespace would have no effect when the cluster mode was enabled like the Redis DB.
requirepass
must be set if you want to add namespaces since we treat the requirepass
user as administrator.
# Auth with the requirepass redis-cli -p 6666 -a ${REQUIREPASS} # Add a new namespace with the token, the namespace name must be unique. 127.0.0.1:6666> namespace add ${NEW NAMESPACE} ${NEW TOKEN} # Update the namespace's token 127.0.0.1:6666> namespace set ${NAMESPACE} ${NEW TOKEN} # Delete the namespace, the namespace's data WOULD NOT be deleted, # unless you use the `flushdb` command to flush the DB data. 127.0.0.1:6666> namespace del ${NAMESPACE} # Get the namespace's token 127.0.0.1:6666> namespace get ${NAMESPACE} # List namespaces 127.0.0.1:6666> namespace get *
Be careful that you must use the config rewrite
command to persist the new namespaces into the config file.
Firstly, we use the namespace add
command to create namespace ns1
and ns2
with the corresponding tokens token1
and token2
.
127.0.0.1:6666> namespace add ns1 token1 127.0.0.1:6666> namespace add ns2 token2
Then we can use token1
and token2
, operate data between namespaces would NOT affect each other like below:
# Use token1 to switch to ns1 127.0.0.1:6666> auth token1 OK 127.0.0.1:6666> set key 100 OK 127.0.0.1:6666> get key "100" # Use token2 to switch to ns2 127.0.0.1:6666> auth token2 OK 127.0.0.1:6666> set key 200 OK 127.0.0.1:6666> get key "200" # Use token1 to switch to ns1 again, the value is still 100 127.0.0.1:6666> auth token1 OK 127.0.0.1:6666> get key "100"
Kvrocks simply prepend the namespace prefix to the user key and remove it before retrieving.
For example, we create a new namespace foo
with token bar
, then the foo
would prepend to the user key. Another way was to split the namespace into different rocksdb column families, but we didn't do that for the sake of simplicity.