Redis
lastmod 2026-02-24created 2015-07-3090 edits
Redis is an open source, BSD licensed, advanced key-value cache and store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets, sorted sets, bitmaps and hyperloglogs.
Categories
- redis-hkey-backup - Hash Key-based backup and restore script.
- node-redis (Javascript)
- redis-py
Service providers
- Top 18 Managed Redis/Valkey Services Compared (May 2024)
- Upstash - 1,000 commands per second, 10,000 commands per day, 50G traffic per month, 256MB storage
- Vercel KV
- Redis Ltd, (originally Redis Labs, Garantia Data; redislabs; Redis Cloud Console; Redis Cloud) - Free Tier does not support TLS.
How to build a URL
- If there is no username, set it to default or leave it out.
- db-number seems to default to 0.
Configuration
Commands
-
AUTH {passwd}- Enter the password. -
FLUSHALL- Remove all keys from all databases. -
FLUSHDB- Remove all keys from the currently selected database. -
PUBSUB CHANNELS- Print the list of channels registered for pub/sub. -
PUBLISH {channel} {message}- Publish a message to the given channel. -
KEYS {pattern}- Returns all keys matching pattern. -
HGETALL {key}- Returns all fields and values of the hash stored at key. -
HGET {key} {field}- Returns the value associated with field in the hash stored at key. -
HSET {key} {field} {value}- Sets the specified fields to their respective values in the hash stored at key.
Redis Lock
- Redis Lock - Redis
- Distributed Locks with Redis | Docs
- (Redis) Features and limitations of the distributed lock (RedLock) provided by Redis - MangKyu's Diary
- Redis and distributed locks (1/2) - Distributed locks with Redis and implementing safe, fast locks | Hyperconnect Tech Blog
- Redisson, Jedis, Lettuce - Java Redis clients
Redis vs Memcached
Redis and MemCached are both in-memory, open-source data stores. Memcached, a high-performance distributed memory cache service, is designed for simplicity, while Redis offers a rich set of features that make it effective for a wide range of use cases. For a more detailed feature comparison to help you make a decision, see Redis vs. Memcached. They make use of relational or key-value databases such as MySQL, Postgres, Aurora, Oracle, SQL Server, DynamoDB, etc. to improve performance.
Redis vs Postgresql
As a way of fetching only the UID
- (Naturally) Redis fetches it by Key.
- (Naturally) Postgresql fetches it with a Select UID Query.
Results:
# [Redis] Localhost 10000 iteration average is 0.0006s (WIN, x5 faster)
# [PgSQL] Localhost 10000 iteration average is 0.0031s
Redis is about 5x faster.
Redis benchmark
Redis includes a utility called redis-benchmark that simulates running commands done by N clients while sending M total queries.
The utility provides a default set of tests, or you can supply a custom set of tests.
Factors affecting Redis performance
- When the server and client benchmark programs run on the same box, both the TCP/IP loopback and Unix domain sockets can be used. Depending on the platform, Unix domain sockets can achieve around 50% more throughput than the TCP/IP loopback (on Linux for instance). The default behavior of redis-benchmark is to use the TCP/IP loopback.
- The performance benefit of Unix domain sockets compared to TCP/IP loopback tends to decrease when pipelining is heavily used (i.e. long pipelines).
- When an Ethernet network is used to access Redis, aggregating commands using pipelining is especially efficient when the size of the data is kept under the Ethernet packet size (about 1500 bytes). Actually, processing 10-byte, 100-byte, or 1000-byte queries results in almost the same throughput.
- On multi-CPU-socket servers, Redis performance depends on the NUMA configuration and process location. The most visible effect is that redis-benchmark results seem non-deterministic because client and server processes are distributed randomly across the cores. To get deterministic results, you need to use process placement tools (on Linux: taskset or numactl). The most efficient combination is always to put the client and server on two different cores of the same CPU to benefit from the L3 cache.
- In high-end configurations, the number of client connections is also an important factor. Being based on epoll/kqueue, the Redis event loop is quite scalable. Redis has already been benchmarked at more than 60000 connections, and was still able to sustain 50000 q/s in these conditions. As a rule of thumb, an instance with 30,000 connections can only process half the throughput achievable with 100 connections.
- In high-end configurations, it is possible to achieve higher throughput by tuning the NIC configuration and associated interrupts. The best throughput is achieved by setting an affinity between Rx/Tx NIC queues and CPU cores, and activating RPS (Receive Packet Steering) support. See this thread for details. Jumbo frames may also provide a performance boost when large objects are used.
- Depending on the platform, Redis can be compiled against different memory allocators (libc malloc, jemalloc, tcmalloc), which can behave differently in terms of raw speed and internal and external fragmentation. If you did not compile Redis yourself, you can use the
INFOcommand to check the mem_allocator field. Most benchmarks do not run long enough to generate significant external fragmentation (unlike production Redis instances).
Data structures
Unlike simple key-value data stores that offer limited data structures, Redis supports a variety of data structures to meet application needs. Redis data types are as follows.
- Strings – text or binary data up to 512MB in size
- Lists – a collection of strings kept in the order they were added
- Sets – an unordered collection of strings that can be intersected, unioned, and compared with other set types
- Sorted sets – sets ordered by value
- Hashes – a data structure that stores a list of fields and values
- Bitmaps – a data type that provides bit-level operations
- HyperLogLogs – a probabilistic data structure for estimating the unique items in a data set
Data size limits
- Redis Strings | Docs
- The item size limit in Redis is 512MB. | Charsyam's Blog
- celery - What is the maximum value size you can store in redis? - Stack Overflow
In short, the item size limit in Redis is 512MB.
Server memory limits
When running a service with Redis, the Redis server's memory can reach its limit. The memory limit can be set with the maxmemory value. When memory fills up to the maxmemory value, Redis frees additional memory according to the max memory policy.
maxmemory-policy values:
- noeviction : Does not delete existing data. When memory is full, it returns an OOM (Out Of Memory) error and new data is discarded.
- allkeys-lru : Frees space by deleting data using the page replacement algorithm called LRU (Least Recently Used).
- volatile-lru : Frees memory space by deleting, with LRU, among keys that have an expire set.
- allkeys-random : Frees space by deleting data at random.
- volatile-random : Frees space by deleting data at random among keys that have an expire set.
- volatile-ttl : Deletes keys with the shortest TTL (Time To Live) first among keys that have an expire set.
- allkeys-lfu : Frees space by removing the least frequently accessed keys.
- volatile-lfu : Frees space by removing the least frequently accessed keys first among keys that have an expire set.
Data being deleted because Maxmemory is exceeded is called eviction. You can tell whether eviction has occurred by running the INFO command in Redis and looking at the evicted_keys value. If you use Amazon Elasticache, the monitoring tab has a graph for eviction, which you can also use to receive alarms about evictions.
| INFORMATION |
| The evicted_keys value is the count of evicted keys, so the larger it is, the more data has been deleted from memory. |
However, while it would be nice if Maxmemory worked as configured, there are cases where it does not. Redis works with COW (Copy On Write) when a write request occurs. When a write request comes in, the OS creates a child process with fork(). On fork(), the child is assigned a different virtual memory address but shares the physical memory blocks. The moment a write starts, the memory page to be modified is copied and then the write proceeds. In other words, additional memory is needed beyond what was already in use. However, since it is not known how much of the total pages will be written, fork basically needs as much free memory as the size to be copied.
When installing Redis yourself, failures sometimes occur because /proc/sys/vm/overcommit_memory was not set to 1. If overcommit_memory=0, the OS cannot allocate more than the given amount of memory. That is, on fork() the OS decides there is not enough memory and raises an error. It is better to set overcommit_memory=1 so the OS can over-allocate memory for now, and then have it handled according to the policy when max memory is reached.
Also, among Redis's memory figures, you need to keep a close eye on the used_memory_rss value. The RSS value is the memory Redis is actually using, including data, and it can be larger than the used_memory value that is actually in use. This happens because the OS allocates memory in multiples of the page size. For example, if page size = 4096 and the requested memory size is 10, the OS allocates 4096. This is called Fragmentation, and it is why the memory actually used differs from the memory allocated.
Redis security settings
Edit the Redis configuration file located at /etc/redis.conf:
The configuration above:
- Makes Redis accessible only locally,
- Enables protected mode, and
- Uses the default port 6379.
To set up Redis authentication with a password, open the Redis configuration file and add the following configuration option:
To configure Redis TLS/SSL security, you need to install OpenSSL and generate an SSL certificate and key. See OpenSSL for details.
Open the Redis configuration file and add the following configuration options.
Redis can now be accessed using TLS/SSL-encrypted communication.
Backup settings
To back up Redis data periodically, open the Redis configuration file and add the following configuration options.
The configuration above backs up Redis data every 15 minutes, and backs up whenever there are at least 10 changes. It also backs up every hour whenever there are 10000 changes. - Needs verification
Message Queue
Invalidation Message
- [Recommended] Improving responsiveness with Redis client-side caching
Redis is fast, but frequent data lookups put a load on the API server. Especially when data is updated irregularly but must be read often, such as real-time data, an efficient caching strategy is needed.
- Problem: Redis PubSub or Keyspace Notification can involve complex update detection and message handling logic, or waste resources.
- Solution: Invalidation Message, supported since Redis 6.0, is a method in which the server manages the client cache.
- When another client changes a key after a client has read it, Redis sends an update message so the cache is deleted.
- redigo+ristretto requires custom logic, but rueidis can be implemented simply with the DoCache function.
Docker restart daemon server
docker-compose.yml
version: '3.8'
services:
redis:
image: redis:6
restart: always
volumes:
- recc_dev_redis_data:/data
ports:
- 6379:6379
environment:
- TZ=Asia/Seoul
command: ["redis-server"]
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
volumes:
recc_dev_redis_data:
REPLICA
TLS Setting
TLS listening port
To enable only TLS, set the following.
Running manually
To manually run a Redis server with TLS mode (assuming gen-test-certs.sh was invoked so sample certificates/keys are available):
./src/redis-server --tls-port 6379 --port 0 \
--tls-cert-file ./tests/tls/redis.crt \
--tls-key-file ./tests/tls/redis.key \
--tls-ca-cert-file ./tests/tls/ca.crt
To connect to this Redis server with redis-cli:
./src/redis-cli --tls \
--cert ./tests/tls/redis.crt \
--key ./tests/tls/redis.key \
--cacert ./tests/tls/ca.crt
docker-compose.yml
It seems TLS is built in by default starting from Redis version 7.
services:
redis:
image: 'redis:7.0.11'
volumes:
- ./certs/redis-server.crt:/usr/local/etc/redis/redis-server.crt
- ./certs/redis-server.key:/usr/local/etc/redis/redis-server.key
- ./certs/ca.crt:/usr/local/etc/redis/ca.crt
command: >
redis-server
--tls-port 6379
--port 0
--tls-cert-file /usr/local/etc/redis/redis-server.crt
--tls-key-file /usr/local/etc/redis/redis-server.key
--tls-ca-cert-file /usr/local/etc/redis/ca.crt
--tls-auth-clients no
--tls-replication yes
utils/gen-redis-certs.sh
The private key generation script utils/gen-redis-certs.sh in the official Redis repository is as follows:
#!/bin/bash
# Generate some test certificates which are used by the regression test suite:
#
# tests/tls/ca.{crt,key} Self signed CA certificate.
# tests/tls/redis.{crt,key} A certificate with no key usage/policy restrictions.
# tests/tls/client.{crt,key} A certificate restricted for SSL client usage.
# tests/tls/server.{crt,key} A certificate restricted for SSL server usage.
# tests/tls/redis.dh DH Params file.
generate_cert() {
local name=$1
local cn="$2"
local opts="$3"
local keyfile=tests/tls/${name}.key
local certfile=tests/tls/${name}.crt
[ -f $keyfile ] || openssl genrsa -out $keyfile 2048
openssl req \
-new -sha256 \
-subj "/O=Redis Test/CN=$cn" \
-key $keyfile | \
openssl x509 \
-req -sha256 \
-CA tests/tls/ca.crt \
-CAkey tests/tls/ca.key \
-CAserial tests/tls/ca.txt \
-CAcreateserial \
-days 365 \
$opts \
-out $certfile
}
mkdir -p tests/tls
[ -f tests/tls/ca.key ] || openssl genrsa -out tests/tls/ca.key 4096
openssl req \
-x509 -new -nodes -sha256 \
-key tests/tls/ca.key \
-days 3650 \
-subj '/O=Redis Test/CN=Certificate Authority' \
-out tests/tls/ca.crt
cat > tests/tls/openssl.cnf <<_END_
[ server_cert ]
keyUsage = digitalSignature, keyEncipherment
nsCertType = server
[ client_cert ]
keyUsage = digitalSignature, keyEncipherment
nsCertType = client
_END_
generate_cert server "Server-only" "-extfile tests/tls/openssl.cnf -extensions server_cert"
generate_cert client "Client-only" "-extfile tests/tls/openssl.cnf -extensions client_cert"
generate_cert redis "Generic-cert"
[ -f tests/tls/redis.dh ] || openssl dhparam -out tests/tls/redis.dh 2048
mTLS
For mTLS, you need to generate a certificate and private key for both the server and the client. You can generate the certificates and keys with OpenSSL as follows:
# 서버용 인증서 및 개인 키 생성
openssl req -x509 -newkey rsa:4096 -keyout server-key.pem -out server-cert.pem -days 365
# 클라이언트용 인증서 및 개인 키 생성
openssl req -x509 -newkey rsa:4096 -keyout client-key.pem -out client-cert.pem -days 365
Open the Redis configuration file (redis.conf) and add the TLS-related settings as follows:
tls-port 6379 # TLS 연결을 위한 포트 번호
tls-cert-file /path/to/server-cert.pem # 서버 인증서 파일 경로
tls-key-file /path/to/server-key.pem # 서버 개인 키 파일 경로
tls-ca-cert-file /path/to/client-cert.pem # 클라이언트 인증서 파일 경로
tls-ca-key-file /path/to/client-key.pem # 클라이언트 개인 키 파일 경로
tls-auth-clients yes # 클라이언트의 인증을 요구
# 선택적으로 클라이언트 인증을 거부하고 싶다면 아래 설정 추가
# tls-auth-clients no
In the settings above, replace /path/to/server-cert.pem and /path/to/server-key.pem with the actual paths of the server's certificate and private key files, and replace /path/to/client-cert.pem and /path/to/client-key.pem with the actual paths of the client's certificate and private key files.
After installing redis-py, use it like this:
import redis
import ssl
r = redis.Redis(host='your_redis_server_hostname', port=6379, ssl=True, ssl_certfile='/path/to/client-cert.pem', ssl_keyfile='/path/to/client-key.pem', ssl_cert_reqs=ssl.CERT_OPTIONAL)
ssl_cert_reqs is the certificate verification option. Since it is set to ssl.CERT_OPTIONAL, it can be used when the Redis server does not require client authentication. If it is required, set it to ssl.CERT_REQUIRED.
tls-auth-clients
Server settings:
-
tls-auth-clients yes- The client must have the server's certificate. -
tls-auth-clients no- The client does not need the server's certificate. -
tls-auth-clients optional- Client certificates are accepted and must be valid if provided, but are not required.
Using from the CLI
Verify the Redis Server Certificate:
Update Client Trust Store:
Configure redis-cli for SSL Connections:
Update System Trust Store:
Disable Certificate Validation (Not Recommended) - If it gets annoying, just turn it off.
Using redis.py
- SSL Connection Examples - redis-py dev documentation
- ConnectionError (SSL: CERTIFICATE_VERIFY_FAILED) when connecting to AWS ElastiCache over TLS · Issue #1080 · redis/redis-py
Adding the ssl_cert_reqs="none" option skips verification:
pool = redis.ConnectionPool(host=...,
port=6380,
password=...,
db=0,
connection_class=redis.SSLConnection,
ssl_cert_reqs=u'none')
client = redis.Redis(connection_pool=pool)
Redis client handling
CLIENT command
- CLIENT LIST
- CLIENT KILL
- CLIENT SETNAME
- CLIENT GETNAME
Troubleshooting
When there is no username
On services like Upstash, if there is no username, it seems you can either leave it blank or use default
MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk
- MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error. Resque
- MISCONF Redis is configured to save RDB snapshots - Stack Overflow
The following error occurred in aioredis:
Oct 16 10:50:23 aaa python3.8[4037]: 2023-10-16 10:50:23.040 4037/140203648191360 aiohttp.access INFO 118.222.146.217 [16/Oct/2023:01:50:23 +0000] "GET /api/v2/plugins/a4y/default/default/devices/913 HTTP/1.1" 200 470 "http://219.254.103.36/app/main/default/default/a4y/details/913" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/117.0"
Oct 16 10:50:24 aaa python3.8[4037]: 2023-10-16 10:50:24.027 4037/140203648191360 aiohttp.server ERROR Error handling request
Oct 16 10:50:24 aaa python3.8[4037]: Traceback (most recent call last):
Oct 16 10:50:24 aaa python3.8[4037]: File "/usr/local/recc/python/lib/python3.8/site-packages/aiohttp/web_protocol.py", line 433, in _handle_request
Oct 16 10:50:24 aaa python3.8[4037]: resp = await request_handler(request)
Oct 16 10:50:24 aaa python3.8[4037]: File "/usr/local/recc/python/lib/python3.8/site-packages/aiohttp/web_app.py", line 504, in _handle
Oct 16 10:50:24 aaa python3.8[4037]: resp = await handler(request)
Oct 16 10:50:24 aaa python3.8[4037]: File "/usr/local/recc/home/storage/plugin/a4y/recc_plugin_a4y/a4y_main.py", line 892, in on_get_root
Oct 16 10:50:24 aaa python3.8[4037]: uid = await self._receive_packet(request, ws, msg)
Oct 16 10:50:24 aaa python3.8[4037]: File "/usr/local/recc/home/storage/plugin/a4y/recc_plugin_a4y/a4y_main.py", line 791, in _receive_packet
Oct 16 10:50:24 aaa python3.8[4037]: return await self._do_packet_processing(bytes.fromhex(hex_str))
Oct 16 10:50:24 aaa python3.8[4037]: File "/usr/local/recc/home/storage/plugin/a4y/recc_plugin_a4y/a4y_main.py", line 803, in _do_packet_processing
Oct 16 10:50:24 aaa python3.8[4037]: await self._update_to_cache(time, packet)
Oct 16 10:50:24 aaa python3.8[4037]: File "/usr/local/recc/home/storage/plugin/a4y/recc_plugin_a4y/a4y_main.py", line 837, in _update_to_cache
Oct 16 10:50:24 aaa python3.8[4037]: await self.cache.set(key, data)
Oct 16 10:50:24 aaa python3.8[4037]: File "/usr/local/recc/python/lib/python3.8/site-packages/recc-2.0.0.dev8-py3.8.egg/recc/cache/redis/redis_cache_store.py", line 94, in set
Oct 16 10:50:24 aaa python3.8[4037]: await self.redis.execute_command("SET", key, val)
Oct 16 10:50:24 aaa python3.8[4037]: File "/usr/local/recc/python/lib/python3.8/site-packages/aioredis/client.py", line 1085, in execute_command
Oct 16 10:50:24 aaa python3.8[4037]: return await self.parse_response(conn, command_name, **options)
Oct 16 10:50:24 aaa python3.8[4037]: File "/usr/local/recc/python/lib/python3.8/site-packages/aioredis/client.py", line 1101, in parse_response
Oct 16 10:50:24 aaa python3.8[4037]: response = await connection.read_response()
Oct 16 10:50:24 aaa python3.8[4037]: File "/usr/local/recc/python/lib/python3.8/site-packages/aioredis/connection.py", line 919, in read_response
Oct 16 10:50:24 aaa python3.8[4037]: raise response from None
Oct 16 10:50:24 aaa python3.8[4037]: aioredis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.
Translating the last line:
aioredis.Exceptions.ResponseError: MISCONF Redis가 RDB 스냅샷을 저장하도록 구성되어 있지만 현재 디스크에 유지할 수 없습니다. RDB 스냅샷 생성이 실패할 경우(stop-writes-on-bgsave-error 옵션) 쓰기 중에 오류를 보고하도록 이 인스턴스가 구성되어 있으므로 데이터 세트를 수정할 수 있는 명령이 비활성화됩니다. RDB 오류에 대한 자세한 내용은 Redis 로그를 확인하세요.
How to disable the related setting:
Seems to be an issue related to memory overcommitment
$ sudo sysctl -a | grep overcommit_memory
vm.overcommit_memory = 0
$ sudo sysctl vm.overcommit_memory=1
For reference, the Redis log contains a related message:
1:M 13 Oct 2023 09:17:15.224 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
Failed opening the RDB file crontab (in server root dir /etc) for saving: Permission denied
...
1:M 14 Oct 2023 12:46:56.073 * 100 changes in 300 seconds. Saving...
1:M 14 Oct 2023 12:46:56.074 * Background saving started by pid 59050
59050:C 14 Oct 2023 12:46:56.074 # Failed opening the RDB file crontab (in server root dir /etc) for saving: Permission denied
1:M 14 Oct 2023 12:46:56.174 # Background saving error
1:M 14 Oct 2023 12:47:02.003 * 100 changes in 300 seconds. Saving...
1:M 14 Oct 2023 12:47:02.003 * Background saving started by pid 59057
59057:C 14 Oct 2023 12:47:02.003 # Failed opening the RDB file crontab (in server root dir /etc) for saving: Permission denied
1:M 14 Oct 2023 12:47:02.104 # Background saving error
1:M 14 Oct 2023 12:47:08.030 * 100 changes in 300 seconds. Saving...
1:M 14 Oct 2023 12:47:08.031 * Background saving started by pid 59058
59058:C 14 Oct 2023 12:47:08.031 # Failed opening the RDB file crontab (in server root dir /etc) for saving: Permission denied
...
A permission problem with directories such as /data and /etc.
READONLY You can't write against a read only replica
- (Spring - Redis) READONLY You can't write against a read only replica.
- Docker on production , error - RedisException READONLY You can't write against a read only replica.
- (Redis) Failed opening .rdb for saving: Read-only file system :: Play It Cool
Possible SECURITY ATTACK detected
For the Cross Protocol Scripting attack security issue, when 'host:' and 'post' commands(?) come in, securityWarningCommand() is executed, writing to the server log
# Possible SECURITY ATTACK detected. It looks like somebody is sending POST or Host: commands to Redis. This is likely due t o an attacker attempting to use Cross Protocol Scripting to compromise your Redis instance. Connection aborted.
a message like this and closing the connection. This feature was added.
MASTER <-> REPLICA sync started
SSL_connect failed: certificate verify failed
When an SSL certificate error occurs in the CLI
If you don't use client authentication, just add the --insecure option:
See also
- Memcached
- DynamoDB
- P3X Redis UI - GUI Client
- Redisinsight - GUI Client
- Dragonfly - A modern alternative to Redis and Memcached
- cachegrand - An open-source key-value store well suited to modern hardware
- KV.js - Advanced in-memory caching module for JS
- broadcaster (python) - Simple broadcast channels
- Upstash - A cloud company that provides Redis and Kafka services (free with limits)
- Keyv - Simple key-value storage with support for multiple backends
- Kronotop - Redis-compatible distributed document store, based on FoundationDB
- Pogocache - Fast caching software built from scratch with a focus on low latency and CPU efficiency
- Zedis - Blazing-fast native Redis GUI built with Rust and GPUI
- Bunqueue] - High-performance SQLite-based job queue for Bun. Supports DLQ/cron/S3 backups
Favorite site
- Redis web site
- Redis tutorial for developers 01
- Review of the Woowa Redis seminar
- [Recommended] Redis Introduction
Guide
- Stackoverflow - Listen for changes in Redis? - A feature for getting notified when a value changes?
- [Recommended] Strategies you must know before using Redis in production
- The key to operating and managing Redis: Redis is single-threaded
- Don't use the Keys command on servers
- Be careful with the flushall/flushdb commands
- The key to operating and managing Redis: Redis is single-threaded
- Differences between AOF and RDB features, and their priority
- The problem of Redis using twice the memory
Articles
- Why leave Redis and move to SolidQueue | GeekNews (Redis, SolidQueue)
- Aioredis
- Broadcaster
- Bunqueue
- Cache
- Cachegrand
- Celery
- Computer Sciences
- ContinuousIntegration:ImplementationGuide
- Database
- DiceDB
- Dragonfly
- Express-session
- FastAPI
- Feature Store
- Git:InternalAPIUnreachable
- In-memory database
- JavaScript:Libraries
- Kafka
- Key-value database
- Keyv
- Kronotop
- Kubernetes:Basic
- KV.js
- Linux:Basic
- Memcached
- Message queue
- Mutual authentication
- Node-redis
- Optio
- P3X Redis UI
- Pogocache
- PostgreSQL
- Push technology
- Python:Libraries
- Redis Lock
- Redis Ltd
- Redis-hkey-backup
- Redis-py
- RedisInsight
- Rivet
- SolutionStack:FullStackDeveloper:Curriculum
- Source code
- Stunnel
- Upstash
- Valkey
- WebSocket
- Zedis