[FEAT] Only implement used API of Redis client

- Currently for the `nosql` module (which simply said provides a manager
for redis clients) returns the
[`redis.UniversalClient`](https://pkg.go.dev/github.com/redis/go-redis/v9#UniversalClient)
interface. The interfaces exposes all available commands.
- In generalm, dead code elimination should be able to take care of not
generating the machine code for methods that aren't being used. However
in this specific case, dead code elimination either is disabled or gives
up on trying because of exhaustive call stack the client by
`GetRedisClient` is used.
- Help the Go compiler by explicitly specifying which methods we use.
This reduces the binary size by ~400KB (397312 bytes). As Go no longer
generate machine code for commands that aren't being used.
- There's a **CAVEAT** with this, if a developer wants to use a new
method that isn't specified, they will have to know about this
hack (by following the definition of existing Redis methods) and add the
method definition from the Redis library to the `RedisClient` interface.
This commit is contained in:
Gusted 2024-08-30 03:56:29 +02:00
parent 1004ecd56b
commit 9df10c5ac5
No known key found for this signature in database
GPG key ID: FD821B732837125F
5 changed files with 52 additions and 16 deletions

View file

@ -12,12 +12,11 @@ import (
"code.gitea.io/gitea/modules/nosql"
"code.forgejo.org/go-chi/cache"
"github.com/redis/go-redis/v9"
)
// RedisCacher represents a redis cache adapter implementation.
type RedisCacher struct {
c redis.UniversalClient
c nosql.RedisClient
prefix string
hsetName string
occupyMode bool