feat(cache): redis cache (#8822)

# Which Problems Are Solved

Add a cache implementation using Redis single mode. This does not add
support for Redis Cluster or sentinel.

# How the Problems Are Solved

Added the `internal/cache/redis` package. All operations occur
atomically, including setting of secondary indexes, using LUA scripts
where needed.

The [`miniredis`](https://github.com/alicebob/miniredis) package is used
to run unit tests.

# Additional Changes

- Move connector code to `internal/cache/connector/...` and remove
duplicate code from `query` and `command` packages.
- Fix a missed invalidation on the restrictions projection

# Additional Context

Closes #8130
This commit is contained in:
Tim Möhlmann
2024-11-04 11:44:51 +01:00
committed by GitHub
parent 9c3e5e467b
commit 250f2344c8
50 changed files with 1767 additions and 293 deletions

View File

@@ -23,3 +23,9 @@ services:
start_period: '20s'
ports:
- 5432:5432
cache:
restart: 'always'
image: 'redis:latest'
ports:
- 6379:6379

View File

@@ -10,13 +10,21 @@ Caches:
Connectors:
Postgres:
Enabled: true
AutoPrune:
Interval: 30s
TimeOut: 1s
Redis:
Enabled: true
Instance:
Connector: "redis"
MaxAge: 1h
LastUsage: 10m
Log:
Level: info
AddSource: true
Formatter:
Format: text
Milestones:
Connector: "postgres"
MaxAge: 1h
LastUsage: 30m
LastUsage: 10m
Log:
Level: info
AddSource: true