Redis Commands Cheat Sheet Part 1 - Keys and Strings
Tags: redis, cheatsheet, rediscommand, database
Published: 2023-01-27 23:42:57


![Redis Icon](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ch1nj3g33iea3w75ol8.png)

---
Following are some of the commonly used Redis commands and data structures, use this list as a quick cheat sheet or a ready reference for your day-to-day Redis usage as needed.😄

This is Part 1 of this series, containing commands pertaining to **Keys** and **Strings** in Redis.

---
## Keys  

```bash
# SET: store a value for a given key name
# NX or XX allows us to check for "only if does not exist" or "only if exists" while setting, respectively
# PX is used to set TTL for a key in milliseconds
# EX is used to set TTL for a key in seconds
> SET key value [NX | XX] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
> SET customer:1000 fred

# options of the SET command:
#   EX seconds -- Set the specified expire time, in seconds.
#   PX milliseconds -- Set the specified expire time, in milliseconds.
#   EXAT timestamp-seconds -- Set the specified Unix time at which the key will expire, in seconds.
#   PXAT timestamp-milliseconds -- Set the specified Unix time at which the key will expire, in milliseconds.
#   NX -- Only set the key if it does not already exist.
#   XX -- Only set the key if it already exist.

# GET: return a value for a given key name
> GET key
> GET customer:1000

# keys and scan: get a list of existing key names, or to iterate over keys that match a pattern
# keys:
#   - blocks until complete
#   - never use in production
#   - useful for debugging
# scan:
#   - also blocks but returns only a handful of keys at a time, 
#   - then returns a slot reference (or, cursor) that can then be used to continue more iterations
#   - safe for production
> KEYS customer:1*

# returns customer:1000, customer 1500 etc. cus they match the pattern 1*

> SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
> SCAN 0 MATCH customer:1* COUNT 1000
# may or may not return results
# but returns the next slot reference to be used in the next command

# e.g. if it returns the slot reference 14848, then the next SCAN command will be
> SCAN 14848 MATCH customer:1* COUNT 1000

# COUNT is optional, it may be used to return more keys per call, but the more the COUNT, the longer it will block

# removing keys
# DEL: 
#   - remove the key and the memory associated with the key
#   - blocking operation
# UNLINK: 
#   - the key will no longer exist
#   - the memory associated with the key value is claimed by an async process, so non-blocking
> DEL key [key ...]
> UNLINK key [key ...]
> UNLINK customer:1000

# returns the number of keys removed

# when SET is used on a key name that does not exist, the key is automatically created
# however, to set the key value only if the key exysts, use EXISTS
> EXISTS key [key ...]
> EXISTS customer:1000

# if the same existing key is mentioned in the arguments multiple times, it will be counted multiple times. 
# So if somekey exists, EXISTS somekey somekey will return 2.

# setting TTL for a key
> EXPIRE key seconds
> PEXPIRE key milliseconds
> EXPIREAT key timestamp
> PEXPIREAT key milliseconds-timestamp

# viewing TTL for a key
# in seconds
> TTL key
# in milliseconds
> PTTL key

# removing TTL for a key
> PERSIST key

# PX or EX can be used to set TTL for key at the time of creation

# TTL of a "persisted" key is -1

# SCAN basic usage example
# SCAN is a cursor based iterator
# this means that at every call of the command, the server returns an updated cursor that the user needs to use as the cursor argument in the next call
# an iteration starts when the cursor is set to 0, and terminates when the cursor returned by the server is 0
# commands `SCAN, SSCAN, HSCAN and ZSCAN` all work very similarly
# the default `COUNT` value is 10
> scan 0
1) "17"
2)  1) "key:12"
    2) "key:8"
    3) "key:4"
    4) "key:14"
    5) "key:16"
    6) "key:17"
    7) "key:15"
    8) "key:10"
    9) "key:3"
    10) "key:7"
    11) "key:1"
> scan 17
1) "0"
2)  1) "key:5"
    2) "key:18"
    3) "key:0"
    4) "key:2"
    5) "key:19"
    6) "key:13"
    7) "key:6"
    8) "key:9"
    9) "key:11"
```

---
## Strings  

```bash
# SET can be used to create a string
> SET key value
> SET user:101:time-zone UTC-8

# sets the value "UTC-8" for the key user:101:time-zone

# GET can be used to retrieve a string
> GET key
> GET user:101:time-zone

# JSON responses can be serealized as a string and stored (cached) as a value for a key
# when caching data it is common to set an expiry time using the `EX` option for seconds
# after expiry, the key will be deleted along with its value
> SET key:1000 '{ "somehing": 1000 }' EX 7200

# check remaining TTL for a key/string using the TTL command
> TTL key:1000

# integer manipulation commands:
# using INCR and INCRBY commands can be used to increment a key's value by 1 or a specified number
# if key does not exist, it will be created and incremented appropriately
> INCR key
> INCRBY key increment

# if the number is negative, value will be decremented

# there is also the DECR and DECRBY command
> DECRBY key decrement

# for floating point incremet
> INCRBYFLOAT key increment

# what if the value of a key is a string?
> SET key:1 1000
OK
> GET key:1
"1000"
> DECRBY key:1 1
(integer) 999
> GET key:1
"999"
> TYPE key:1
string

# so the DECRBY command casted the string value to integer and performed numerical operation on it
# but the value still remains a string

# the encoding of the value cn be checked using the OBJECT ENCODING command
> OBJECT ENCODING key
> OBJECT ENCODING key:1
"int"

# so in the example above, the value is a string, but what is stored withing the string datatype is an integer value

# redis supports polymorphism
> SET key:1 "hello"
OK
> OBJECT ENCODING key:1
"embstr" # i.e. a text value

> DECRBY key:1 10
(error) ERR # since the encoded vaue is not an integer anymore
```

---
Hope you found this useful! Save the post for reference, Parts 2 and 3 will be out soon!

Do follow [espelar.dev](https://dev.to/espelar-dev) we're working on some pretty cool stuff and have exciting content for you in the works.😊
Cheers!