[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:
parent
1004ecd56b
commit
9df10c5ac5
5 changed files with 52 additions and 16 deletions
3
modules/cache/cache_redis.go
vendored
3
modules/cache/cache_redis.go
vendored
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue