summaryrefslogtreecommitdiffstats
path: root/iredis/data/commands/setrange.md
diff options
context:
space:
mode:
Diffstat (limited to 'iredis/data/commands/setrange.md')
-rw-r--r--iredis/data/commands/setrange.md47
1 files changed, 47 insertions, 0 deletions
diff --git a/iredis/data/commands/setrange.md b/iredis/data/commands/setrange.md
new file mode 100644
index 0000000..078fb34
--- /dev/null
+++ b/iredis/data/commands/setrange.md
@@ -0,0 +1,47 @@
+Overwrites part of the string stored at _key_, starting at the specified offset,
+for the entire length of _value_. If the offset is larger than the current
+length of the string at _key_, the string is padded with zero-bytes to make
+_offset_ fit. Non-existing keys are considered as empty strings, so this command
+will make sure it holds a string large enough to be able to set _value_ at
+_offset_.
+
+Note that the maximum offset that you can set is 2^29 -1 (536870911), as Redis
+Strings are limited to 512 megabytes. If you need to grow beyond this size, you
+can use multiple keys.
+
+**Warning**: When setting the last possible byte and the string value stored at
+_key_ does not yet hold a string value, or holds a small string value, Redis
+needs to allocate all intermediate memory which can block the server for some
+time. On a 2010 MacBook Pro, setting byte number 536870911 (512MB allocation)
+takes ~300ms, setting byte number 134217728 (128MB allocation) takes ~80ms,
+setting bit number 33554432 (32MB allocation) takes ~30ms and setting bit number
+8388608 (8MB allocation) takes ~8ms. Note that once this first allocation is
+done, subsequent calls to `SETRANGE` for the same _key_ will not have the
+allocation overhead.
+
+## Patterns
+
+Thanks to `SETRANGE` and the analogous `GETRANGE` commands, you can use Redis
+strings as a linear array with O(1) random access. This is a very fast and
+efficient storage in many real world use cases.
+
+@return
+
+@integer-reply: the length of the string after it was modified by the command.
+
+@examples
+
+Basic usage:
+
+```cli
+SET key1 "Hello World"
+SETRANGE key1 6 "Redis"
+GET key1
+```
+
+Example of zero padding:
+
+```cli
+SETRANGE key2 6 "Redis"
+GET key2
+```