Skip to content

Commit

Permalink
Documentation for SET IFEQ (#189)
Browse files Browse the repository at this point in the history
This PR adds the documentation to support
valkey-io/valkey#1324

---------

Signed-off-by: Sarthak Aggarwal <[email protected]>
Signed-off-by: Viktor Söderqvist <[email protected]>
Co-authored-by: Viktor Söderqvist <[email protected]>
  • Loading branch information
sarthakaggarwal97 and zuiderkwast authored Dec 10, 2024
1 parent d6f2554 commit aa2aeb3
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions commands/set.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,40 @@ The `SET` command supports a set of options that modify its behavior:
* `PXAT` *timestamp-milliseconds* -- Set the specified Unix time at which the key will expire, in milliseconds (a positive integer).
* `NX` -- Only set the key if it does not already exist.
* `XX` -- Only set the key if it already exists.
* `IFEQ` *comparison-value* -- Set the key if the comparison value matches the existing value. An error is returned and `SET` aborted if the value stored at key is not a string.
* `KEEPTTL` -- Retain the time to live associated with the key.
* `!GET` -- Return the old string stored at key, or nil if key did not exist. An error is returned and `SET` aborted if the value stored at key is not a string.
* `GET` -- Return the old string stored at key, or nil if key did not exist. An error is returned and `SET` aborted if the value stored at key is not a string.

Note: Since the `SET` command options can replace `SETNX`, `SETEX`, `PSETEX`, `GETSET`, it is possible that in future versions of Valkey these commands will be deprecated and finally removed.

## Examples

Basic usage
```
127.0.0.1:6379> SET mykey "Hello"
OK
127.0.0.1:6379> GET mykey
"Hello"
127.0.0.1:6379>
```

Set a value and an expiry time.
```
127.0.0.1:6379> SET anotherkey "will expire in a minute" EX 60
OK
```

Conditionally set a value.
```
127.0.0.1:6379> SET foo "Initial Value"
OK
127.0.0.1:6379> GET foo
"Initial Value"
127.0.0.1:6379> SET foo "New Value" IFEQ "Initial Value"
OK
127.0.0.1:6379> GET foo
"New Value"
```

## Patterns

**Note:** The following pattern is discouraged in favor of [the Redlock algorithm](../topics/distlock.md) which is only a bit more complex to implement, but offers better guarantees and is fault tolerant.
Expand Down

0 comments on commit aa2aeb3

Please sign in to comment.