State
You can store key-value state in Restate. Restate makes sure the state is consistent with the processing of the code execution.
This feature is only available for Virtual Objects:
- For Virtual Objects, the state is isolated per Virtual Object and lives forever (across invocations for that object).
You can inspect and edit the K/V state stored in Restate via psql
and the CLI.
Have a look at the introspection docs for more information.
You can store any type of value that can be serialized. By default, serialization is done with
JSONCodec
which uses encoding/json
.
Listing state keys
For a single Virtual Object, you can list all the state keys that have entries in the state store via:
stateKeys, err := restate.Keys(ctx)if err != nil { return err}
Retrieving state
Use restate.Get
to retrieve the state for a key:
myString := "my-default"if s, err := restate.Get[*string](ctx, "my-string-key"); err != nil { return err} else if s != nil { myString = *s}myNumber, err := restate.Get[int](ctx, "my-number-key")if err != nil { return err}
The zero value will be returned if a state value does not exist for the provided key.
Setting state
Use restate.Set
to set a new value for a key:
restate.Set(ctx, "my-key", "my-new-value")
This function will only return errors in the case of failed serialization.
Clearing state
Use restate.Clear
to delete the value of a key:
restate.Clear(ctx, "my-key")
Clearing all state
Delete all the state stored in Restate for a Virtual Object via:
restate.ClearAll(ctx)