0

💻 Common Redis Commands 💾

Here is a comprehensive example that covers a wide range of common Redis features: (Quick Setup)

A. Common Commands

1. Basic CRUD Operations

Set and Get Data

SET user:1:name "John Doe"
GET user:1:name

Example with TTL (Time to Live)

SET session:1234 "session_data" EX 60   # Key will expire in 60 seconds
GET session:1234
TTL session:1234                       # Check how much time is left for the key

2. Hashes

Hashes are used to store multiple fields and values under a single key.

Example: Using Hashes to Store User Information

HSET user:1 name "John Doe" email "john@example.com"
HGETALL user:1                    # Retrieve all fields and values
HGET user:1 email                  # Retrieve specific field
HDEL user:1 email                  # Delete specific field

3. Lists

Lists are used to store an ordered sequence of elements.

Example: Using Lists for a Queue

RPUSH queue:tasks "task1" "task2"   # Add tasks to the right end of the list
LPOP queue:tasks                    # Remove the task from the left end
LRANGE queue:tasks 0 -1             # Get all tasks in the queue

4. Sets

Sets are unordered collections of unique elements.

Example: Using Sets to Store Unique Tags

SADD tags "redis" "nosql" "database"
SMEMBERS tags                  # Get all members of the set
SISMEMBER tags "redis"         # Check if an element exists
SREM tags "nosql"              # Remove an element from the set

5. Sorted Sets

Sorted Sets are like Sets but with an associated score for each member, which allows ordering.

Example: Using Sorted Sets for Leaderboards

ZADD leaderboard 1000 "user:1" 500 "user:2"
ZRANGE leaderboard 0 -1 WITHSCORES         # Get all members with scores
ZRANK leaderboard "user:1"                 # Get the rank of a specific member
ZINCRBY leaderboard 100 "user:1"           # Increment the score of a member

6. Transactions

Transactions in Redis allow you to execute multiple commands in a single, atomic operation using MULTI and EXEC.

Example: Simple Transaction

MULTI
SET account:1:balance 100
INCRBY account:1:balance 50
DECRBY account:1:balance 25
EXEC

7. Pipelining

Pipelining allows multiple commands to be sent to the server without waiting for a reply.

Example: Pipelining with Redis CLI

redis-cli --pipe
SET user:1 "John Doe"
SET user:2 "Jane Doe"
SET user:3 "Alice Smith"

8. Pub/Sub (Publish/Subscribe)

Redis Pub/Sub allows for message broadcasting to multiple clients subscribed to a channel.

Example: Publish/Subscribe System

Publisher

PUBLISH news "Breaking News: Redis is awesome!"

Subscriber

SUBSCRIBE news

9. Lua Scripting

You can run Lua scripts in Redis for atomic and efficient processing.

Example: Lua Script for Incrementing a Key

EVAL "return redis.call('INCRBY', KEYS[1], ARGV[1])" 1 counter 10

This script increments the value of counter by 10.

10. Expiration and Persistence

You can set expiration times for keys, or Redis can persist data using snapshots (RDB) or append-only files (AOF).

Example: Set Expiration

SET temp:key "temp_value" EX 10        # Key will expire after 10 seconds

Example: Persistence Configuration

SAVE                                   # Force an RDB snapshot
BGSAVE                                 # Background save

11. HyperLogLog

HyperLogLog is used for approximating the cardinality (i.e., number of unique elements) of large datasets.

Example: Counting Unique Visitors

PFADD unique_visitors "user1" "user2" "user3"
PFCOUNT unique_visitors                 # Approximate count of unique users

12. Bitmaps

Redis allows bit-level operations on string values.

Example: Simple Bitmap Usage

SETBIT user:1:loggedin 0 1               # Set bit 0 to 1
GETBIT user:1:loggedin 0                 # Get bit 0
BITCOUNT user:1:loggedin                 # Count number of set bits

13. Geospatial Indexes

Redis allows you to store, query, and perform operations on geospatial data.

Example: Geospatial Operations

GEOADD cities:locations 13.361389 38.115556 "Palermo"
GEOADD cities:locations 15.087269 37.502669 "Catania"
GEORADIUS cities:locations 15 37 100 km      # Find locations within 100 km

14. Streams

Streams are a type of log structure that allows you to store and consume data in an append-only manner.

Example: Adding and Reading from a Stream

XADD mystream * name "John Doe" age 30
XRANGE mystream - +

15. Redis Cluster

Redis supports clustering to scale horizontally.

Example: Create a Cluster

You would typically use redis-cli or a specialized tool for cluster setup, but the basic steps involve:

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 --cluster-replicas 1

16. Replication

Redis supports master-slave replication for high availability.

Example: Setting Up Replication

In the Redis configuration file (redis.conf):

replicaof 127.0.0.1 6379

17. Redis Sentinel

Sentinel provides high availability through automatic failover.

Example: Starting Sentinel

redis-sentinel /path/to/sentinel.conf

In the Sentinel config file:

sentinel monitor mymaster 127.0.0.1 6379 2

18. Redis Modules

Redis Modules allow you to extend Redis with custom functionality.

Example: Loading a Redis Module

In the Redis config file:

loadmodule /path/to/module.so

Modules like RedisGraph, RedisAI, and RediSearch are popular extensions.

19. Memory Management

Redis provides commands to monitor memory usage and optimize performance.

Example: Checking Memory Usage

INFO memory

This provides detailed information about memory consumption, fragmentation, and key eviction policy.

20. EXPLAIN Command

While Redis doesn’t have an equivalent to SQL EXPLAIN, you can use the DEBUG command to get insights into what the server is doing.

Example: DEBUG Command

DEBUG OBJECT keyname

This shows metadata about a specific key, such as encoding, reference count, and idle time.

B. Other Advanced Commands

The comprehensive Redis example covers most common features, but here are a few additional advanced or specialized features that might be useful:

1. Scan Operations

Redis provides a way to iterate over large datasets without blocking.

Example: Iterating Over Keys (Non-Blocking)

SCAN 0 MATCH user:* COUNT 10

SCAN is a cursor-based iteration over the dataset.

Example: Scanning a Hash

HSCAN user:1 0 MATCH field* COUNT 5

2. Redis Memory Optimization

Example: Eviction Policies

Redis allows you to specify eviction policies for managing memory.

CONFIG SET maxmemory-policy allkeys-lru

This setting enables the LRU (Least Recently Used) eviction policy.

Example: Memory Usage of Specific Key

MEMORY USAGE user:1

This command returns the memory usage in bytes for the key user:1.

3. Keyspace Notifications

Redis can send notifications about keyspace events, such as expiration or modification of keys.

Example: Enabling Notifications

CONFIG SET notify-keyspace-events Ex

This enables expiration notifications.

Example: Listening for Expiration Events

PSUBSCRIBE __keyevent@0__:expired

This subscribes to events where keys in database 0 expire.

4. Stream Consumers and Consumer Groups

Stream Consumer Groups allow multiple consumers to read from the same stream independently.

Example: Creating and Using Consumer Groups

XGROUP CREATE mystream group1 0
XREADGROUP GROUP group1 consumer1 COUNT 1 STREAMS mystream >

5. Redis Modules (Advanced)

While Redis Modules were mentioned, a more specific module like RedisJSON can be a powerful addition.

Example: Using RedisJSON Module

JSON.SET user:100 $ '{"name":"John","age":30}'
JSON.GET user:100 $.name

RedisJSON allows you to store and manipulate JSON documents in Redis.

6. Bitfield Operations

The BITFIELD command allows you to manipulate integers stored in bits in a string.

Example: Bitfield Usage

BITFIELD mybits SET u8 100 255

This sets an unsigned 8-bit integer at offset 100 to the value 255.

7. Scripting with Pipelining

While pipelining was covered, you can combine it with Lua scripting to optimize multiple commands in a single request.

Example: Atomic Update with Lua and Pipelining

EVAL "redis.call('SET', KEYS[1], ARGV[1]) redis.call('INCRBY', KEYS[2], ARGV[2])" 2 key1 key2 value1 10

8. RediSearch (Advanced)

If working with full-text search, RediSearch is a powerful Redis module.

Example: RediSearch Usage

FT.CREATE myIndex SCHEMA title TEXT WEIGHT 5.0 body TEXT
FT.ADD myIndex doc1 1.0 FIELDS title "Redis Modules" body "Search capabilities in Redis"
FT.SEARCH myIndex "Redis"

This allows full-text search in Redis using the RediSearch module.

9. Bloom Filters (Probabilistic Data Structures)

Redis has built-in support for Bloom filters via RedisBloom module.

Example: Using Bloom Filter

BF.ADD myBloom "foo"
BF.EXISTS myBloom "foo"
BF.EXISTS myBloom "bar"

Bloom filters provide space-efficient set-like functionality, with a small chance of false positives.

10. Redis Streams Advanced Features

While basic streams were covered, advanced stream features like trimming and acknowledging entries are also common.

Example: Trimming Streams

XADD mystream MAXLEN 1000 * name "Alice"

Automatically trims the stream to maintain at most 1000 entries.

Example: Acknowledging Entries in Consumer Group

XACK mystream group1 1526569495637-0

Acknowledge that a message has been processed by a consumer group.

Conclusion

This example covers almost all common Redis features, including basic CRUD operations, advanced data structures (hashes, lists, sets, sorted sets), pipelines, transactions, and specialized use cases (streams, geospatial data, and hyperloglog). It also touches on higher-level features like Lua scripting, clustering, replication, and Redis Sentinel for high availability.

Additionally, It mentions some more advanced use cases for Redis, including real-time analytics (bitfield, stream consumers), data modeling (RediSearch, RedisJSON), and optimization techniques (memory, keyspace notifications).

Redis is extremely versatile and this comprehensive example provides an overview of how it can be used across different scenarios.

If you found this helpful, let me know by leaving a 👍 or a comment!, or if you think this post could help someone, feel free to share it! Thank you very much! 😃

Read more about RESTful API with Redis


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí