Files
herodb/docs/basics.md
2025-08-23 04:58:41 +02:00

12 KiB

Here's an expanded version of the cmds.md documentation to include the list commands:

HeroDB Commands

HeroDB implements a subset of Redis commands over the Redis protocol. This document describes the available commands and their usage.

String Commands

PING

Ping the server to test connectivity.

redis-cli -p $PORT PING
# → PONG

ECHO

Echo the given message.

redis-cli -p $PORT ECHO "hello"
# → hello

SET

Set a key to hold a string value.

redis-cli -p $PORT SET key value
# → OK

Options:

  • EX seconds: Set expiration in seconds
  • PX milliseconds: Set expiration in milliseconds
  • NX: Only set if key doesn't exist
  • XX: Only set if key exists
  • GET: Return old value

Examples:

redis-cli -p $PORT SET key value EX 60
redis-cli -p $PORT SET key value PX 1000
redis-cli -p $PORT SET key value NX
redis-cli -p $PORT SET key value XX
redis-cli -p $PORT SET key value GET

GET

Get the value of a key.

redis-cli -p $PORT GET key
# → value

MGET

Get values of multiple keys.

redis-cli -p $PORT MGET key1 key2 key3
# → 1) "value1"
#    2) "value2"
#    3) (nil)

MSET

Set multiple key-value pairs.

redis-cli -p $PORT MSET key1 value1 key2 value2
# → OK

INCR

Increment the integer value of a key by 1.

redis-cli -p $PORT SET counter 10
redis-cli -p $PORT INCR counter
# → 11

DEL

Delete a key.

redis-cli -p $PORT DEL key
# → 1

For multiple keys:

redis-cli -p $PORT DEL key1 key2 key3
# → number of keys deleted

TYPE

Determine the type of a key.

redis-cli -p $PORT TYPE key
# → string

EXISTS

Check if a key exists.

redis-cli -p $PORT EXISTS key
# → 1 (exists) or 0 (doesn't exist)

For multiple keys:

redis-cli -p $PORT EXISTS key1 key2 key3
# → count of existing keys

EXPIRE / PEXPIRE

Set expiration time for a key.

redis-cli -p $PORT EXPIRE key 60
# → 1 (timeout set) or 0 (timeout not set)

redis-cli -p $PORT PEXPIRE key 1000
# → 1 (timeout set) or 0 (timeout not set)

EXPIREAT / PEXPIREAT

Set expiration timestamp for a key.

redis-cli -p $PORT EXPIREAT key 1672531200
# → 1 (timeout set) or 0 (timeout not set)

redis-cli -p $PORT PEXPIREAT key 1672531200000
# → 1 (timeout set) or 0 (timeout not set)

TTL

Get the time to live for a key.

redis-cli -p $PORT TTL key
# → remaining time in seconds

PERSIST

Remove expiration from a key.

redis-cli -p $PORT PERSIST key
# → 1 (timeout removed) or 0 (key has no timeout)

Hash Commands

HSET

Set field-value pairs in a hash.

redis-cli -p $PORT HSET hashkey field1 value1 field2 value2
# → number of fields added

HGET

Get value of a field in a hash.

redis-cli -p $PORT HGET hashkey field1
# → value1

HGETALL

Get all field-value pairs in a hash.

redis-cli -p $PORT HGETALL hashkey
# → 1) "field1"
#    2) "value1"
#    3) "field2"
#    4) "value2"

HDEL

Delete fields from a hash.

redis-cli -p $PORT HDEL hashkey field1 field2
# → number of fields deleted

HEXISTS

Check if a field exists in a hash.

redis-cli -p $PORT HEXISTS hashkey field1
# → 1 (exists) or 0 (doesn't exist)

HKEYS

Get all field names in a hash.

redis-cli -p $PORT HKEYS hashkey
# → 1) "field1"
#    2) "field2"

HVALS

Get all values in a hash.

redis-cli -p $PORT HVALS hashkey
# → 1) "value1"
#    2) "value2"

HLEN

Get number of fields in a hash.

redis-cli -p $PORT HLEN hashkey
# → number of fields

HMGET

Get values of multiple fields in a hash.

redis-cli -p $PORT HMGET hashkey field1 field2 field3
# → 1) "value1"
#    2) "value2"
#    3) (nil)

HSETNX

Set field-value pair in hash only if field doesn't exist.

redis-cli -p $PORT HSETNX hashkey field1 value1
# → 1 (field set) or 0 (field not set)

HINCRBY

Increment integer value of a field in a hash.

redis-cli -p $PORT HINCRBY hashkey field1 5
# → new value

HINCRBYFLOAT

Increment float value of a field in a hash.

redis-cli -p $PORT HINCRBYFLOAT hashkey field1 3.14
# → new value

HSCAN

Incrementally iterate over fields in a hash.

redis-cli -p $PORT HSCAN hashkey 0
# → 1) "next_cursor"
#    2) 1) "field1"
#       2) "value1"
#       3) "field2"
#       4) "value2"

Options:

  • MATCH pattern: Filter fields by pattern
  • COUNT number: Suggest number of fields to return

Examples:

redis-cli -p $PORT HSCAN hashkey 0 MATCH f*
redis-cli -p $PORT HSCAN hashkey 0 COUNT 10
redis-cli -p $PORT HSCAN hashkey 0 MATCH f* COUNT 10

List Commands

LPUSH

Insert elements at the head of a list.

redis-cli -p $PORT LPUSH listkey element1 element2 element3
# → number of elements in the list

RPUSH

Insert elements at the tail of a list.

redis-cli -p $PORT RPUSH listkey element1 element2 element3
# → number of elements in the list

LPOP

Remove and return elements from the head of a list.

redis-cli -p $PORT LPOP listkey
# → element1

With count:

redis-cli -p $PORT LPOP listkey 2
# → 1) "element1"
#    2) "element2"

RPOP

Remove and return elements from the tail of a list.

redis-cli -p $PORT RPOP listkey
# → element3

With count:

redis-cli -p $PORT RPOP listkey 2
# → 1) "element3"
#    2) "element2"

LLEN

Get the length of a list.

redis-cli -p $PORT LLEN listkey
# → number of elements in the list

LINDEX

Get element at index in a list.

redis-cli -p $PORT LINDEX listkey 0
# → first element

Negative indices count from the end:

redis-cli -p $PORT LINDEX listkey -1
# → last element

LRANGE

Get a range of elements from a list.

redis-cli -p $PORT LRANGE listkey 0 -1
# → 1) "element1"
#    2) "element2"
#    3) "element3"

LTRIM

Trim a list to specified range.

redis-cli -p $PORT LTRIM listkey 0 1
# → OK (list now contains only first 2 elements)

LREM

Remove elements from a list.

redis-cli -p $PORT LREM listkey 2 element1
# → number of elements removed

Count values:

  • Positive: Remove from head
  • Negative: Remove from tail
  • Zero: Remove all

LINSERT

Insert element before or after pivot element.

redis-cli -p $PORT LINSERT listkey BEFORE pivot newelement
# → number of elements in the list

BLPOP

Blocking remove and return elements from the head of a list.

redis-cli -p $PORT BLPOP listkey1 listkey2 5
# → 1) "listkey1"
#    2) "element1"

If no elements are available, blocks for specified timeout (in seconds) until an element is pushed to one of the lists.

BRPOP

Blocking remove and return elements from the tail of a list.

redis-cli -p $PORT BRPOP listkey1 listkey2 5
# → 1) "listkey1"
#    2) "element1"

If no elements are available, blocks for specified timeout (in seconds) until an element is pushed to one of the lists.

Keyspace Commands

KEYS

Get all keys matching pattern.

redis-cli -p $PORT KEYS *
# → 1) "key1"
#    2) "key2"

SCAN

Incrementally iterate over keys.

redis-cli -p $PORT SCAN 0
# → 1) "next_cursor"
#    2) 1) "key1"
#       2) "key2"

Options:

  • MATCH pattern: Filter keys by pattern
  • COUNT number: Suggest number of keys to return

Examples:

redis-cli -p $PORT SCAN 0 MATCH k*
redis-cli -p $PORT SCAN 0 COUNT 10
redis-cli -p $PORT SCAN 0 MATCH k* COUNT 10

DBSIZE

Get number of keys in current database.

redis-cli -p $PORT DBSIZE
# → number of keys

FLUSHDB

Remove all keys from current database.

redis-cli -p $PORT FLUSHDB
# → OK

Configuration Commands

CONFIG GET

Get configuration parameter.

redis-cli -p $PORT CONFIG GET dir
# → 1) "dir"
#    2) "/path/to/db"

redis-cli -p $PORT CONFIG GET dbfilename
# → 1) "dbfilename"
#    2) "0.db"

Client Commands

CLIENT SETNAME

Set current connection name.

redis-cli -p $PORT CLIENT SETNAME myconnection
# → OK

CLIENT GETNAME

Get current connection name.

redis-cli -p $PORT CLIENT GETNAME
# → myconnection

Transaction Commands

MULTI

Start a transaction block.

redis-cli -p $PORT MULTI
# → OK

EXEC

Execute all commands in transaction block.

redis-cli -p $PORT MULTI
redis-cli -p $PORT SET key1 value1
redis-cli -p $PORT SET key2 value2
redis-cli -p $PORT EXEC
# → 1) OK
#    2) OK

DISCARD

Discard all commands in transaction block.

redis-cli -p $PORT MULTI
redis-cli -p $PORT SET key1 value1
redis-cli -p $PORT DISCARD
# → OK

AGE Commands

AGE GENENC

Generate ephemeral encryption keypair.

redis-cli -p $PORT AGE GENENC
# → 1) "recipient_public_key"
#    2) "identity_secret_key"

AGE ENCRYPT

Encrypt message with recipient public key.

redis-cli -p $PORT AGE ENCRYPT recipient_public_key "message"
# → base64_encoded_ciphertext

AGE DECRYPT

Decrypt ciphertext with identity secret key.

redis-cli -p $PORT AGE DECRYPT identity_secret_key base64_encoded_ciphertext
# → decrypted_message

AGE GENSIGN

Generate ephemeral signing keypair.

redis-cli -p $PORT AGE GENSIGN
# → 1) "verify_public_key"
#    2) "sign_secret_key"

AGE SIGN

Sign message with signing secret key.

redis-cli -p $PORT AGE SIGN sign_secret_key "message"
# → base64_encoded_signature

AGE VERIFY

Verify signature with verify public key.

redis-cli -p $PORT AGE VERIFY verify_public_key "message" base64_encoded_signature
# → 1 (valid) or 0 (invalid)

AGE KEYGEN

Generate and persist named encryption keypair.

redis-cli -p $PORT AGE KEYGEN keyname
# → 1) "recipient_public_key"
#    2) "identity_secret_key"

AGE SIGNKEYGEN

Generate and persist named signing keypair.

redis-cli -p $PORT AGE SIGNKEYGEN keyname
# → 1) "verify_public_key"
#    2) "sign_secret_key"

AGE ENCRYPTNAME

Encrypt message with named key.

redis-cli -p $PORT AGE ENCRYPTNAME keyname "message"
# → base64_encoded_ciphertext

AGE DECRYPTNAME

Decrypt ciphertext with named key.

redis-cli -p $PORT AGE DECRYPTNAME keyname base64_encoded_ciphertext
# → decrypted_message

AGE SIGNNAME

Sign message with named signing key.

redis-cli -p $PORT AGE SIGNNAME keyname "message"
# → base64_encoded_signature

AGE VERIFYNAME

Verify signature with named verify key.

redis-cli -p $PORT AGE VERIFYNAME keyname "message" base64_encoded_signature
# → 1 (valid) or 0 (invalid)

AGE LIST

List all stored AGE keys.

redis-cli -p $PORT AGE LIST
# → 1) "keyname1"
#    2) "keyname2"

Server Information Commands

INFO

Get server information.

redis-cli -p $PORT INFO
# → Server information

With section:

redis-cli -p $PORT INFO replication
# → Replication information

COMMAND

Get command information (stub implementation).

redis-cli -p $PORT COMMAND
# → Empty array (stub)

Database Selection

SELECT

Select database by index.

redis-cli -p $PORT SELECT 0
# → OK

This expanded documentation includes all the list commands that were implemented in the cmd.rs file:
1. LPUSH - push elements to the left (head) of a list
2. RPUSH - push elements to the right (tail) of a list
3. LPOP - pop elements from the left (head) of a list
4. RPOP - pop elements from the right (tail) of a list
5. BLPOP - blocking pop from the left with timeout
6. BRPOP - blocking pop from the right with timeout
7. LLEN - get list length
8. LREM - remove elements from list
9. LTRIM - trim list to range
10. LINDEX - get element by index
11. LRANGE - get range of elements