Rueidis
Last updated
Last updated
자동 파이프라이닝을 수행하고 클라이언트 측 캐싱을 지원하는 빠른 Redis 스토리지입니다. redis/rueidis.
참고: Go 1.20 이상 버전이 필요합니다
Signatures
Installation
Examples
Config
Default Config
func New(config ...Config) Storage
func (s *Storage) Get(key string) ([]byte, error)
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
func (s *Storage) Delete(key string) error
func (s *Storage) Reset() error
func (s *Storage) Close() error
func (s *Storage) Conn() rueidis.Client
Rueidis는 모듈을 지원하는 최신 Go 버전에서 테스트되었습니다. 따라서 아직 초기화하지 않았다면 먼저 초기화해야 합니다:
go mod init github.com/<user>/<repo>
그런 다음 rueidis 구현을 설치합니다:
go get github.com/gofiber/storage/rueidis
storage 패키지를 가져옵니다.
import "github.com/gofiber/storage/rueidis"
다음 옵션 중 하나를 사용하여 Rueidis Storage를 생성할 수 있습니다:
// 기본 설정 초기화 (localhost:6379)
store := rueidis.New()
// 사용자 지정 설정 초기화
store := rueidis.New(rueidis.Config{
InitAddress: []string{"localhost:6380"},
Username: "",
Password: "",
Database: 0,
Reset: false,
TLSConfig: nil,
})
// Rueidis URL을 사용하여 초기화
store := rueidis.New(rueidis.Config{
URL: "redis://localhost:6379",
})
// Rueidis 클러스터 클라이언트 초기화
store := rueidis.New(rueidis.Config{
InitAddress: []string{":6379", ":6380"},
})
// TLS 지원이 있는 클라이언트 생성
cer, err := tls.LoadX509KeyPair("./client.crt", "./client.key")
if err != nil {
log.Println(err)
return
}
tlsCfg := &tls.Config{
MinVersion: tls.VersionTLS12,
InsecureSkipVerify: true,
Certificates: []tls.Certificate{cer},
}
store = rueidis.New(rueidis.Config{
InitAddress: []string{"localhost:6380"},
Username: "<user>",
Password: "<password>",
SelectDB: 0,
TLSConfig: tlsCfg,
})
type Config struct {
// 서버 사용자 이름
//
// 선택 사항. 기본값은 ""입니다.
Username string
// 서버 비밀번호
//
// 선택 사항. 기본값은 ""입니다.
Password string
// ClientName은 각 연결에 대해 `CLIENT SETNAME ClientName` 명령을 실행합니다.
//
// 선택 사항. 기본값은 ""입니다.
ClientName string
// URL은 표준 형식의 Redis URL입니다. 설정하면 InitAddress, Username, Password, ClientName, SelectDB를 포함한 다른 모든 설정 옵션은 효과가 없습니다.
//
// 예: redis://<user>:<pass>@localhost:6379/<db>
// 선택 사항. 기본값은 ""입니다.
URL string
// 서버에 연결한 후 선택할 DB입니다.
//
// 선택 사항. 기본값은 0입니다.
SelectDB int
// 단일 주소 또는 시드 목록 host:port 주소로, FailoverClient와 ClusterClient를 활성화합니다.
//
// 선택 사항. 기본값은 []string{"127.0.0.1:6379"}입니다.
InitAddress []string
// 사용할 TLS 설정입니다. 설정하면 TLS가 협상됩니다.
//
// 선택 사항. 기본값은 nil입니다.
TLSConfig *tls.Config
// CacheSizeEachConn은 단일 Redis 인스턴스에 대한 각 TCP 연결에 바인딩되는 Redis 클라이언트 측 캐시 크기입니다.
//
// 선택 사항. 기본값은 DefaultCacheBytes: 128 * (1 << 20)입니다.
CacheSizeEachConn int
// RingScaleEachConn은 각 연결의 링 버퍼 크기를 (2 ^ RingScaleEachConn)로 설정합니다.
//
// 선택 사항. 기본값은 RingScaleEachConn으로, 각 연결에 대해 2^10 크기의 링을 갖게 됩니다.
RingScaleEachConn int
// ReadBufferEachConn은 각 연결의 bufio.NewReaderSize 크기로, 기본값은 DefaultReadBuffer (0.5 MiB)입니다.
//
// 선택 사항. 기본값은 DefaultReadBuffer: 1 << 19입니다.
ReadBufferEachConn int
// WriteBufferEachConn은 각 연결의 bufio.NewWriterSize 크기로, 기본값은 DefaultWriteBuffer (0.5 MiB)입니다.
//
// 선택 사항. 기본값은 DefaultWriteBuffer: 1 << 19입니다.
WriteBufferEachConn int
// BlockingPoolSize는 블로킹 명령(예: BLPOP, BLOCK이 있는 XREAD)에서 공유하는 연결 풀의 크기입니다.
//
// 선택 사항. 기본값은 DefaultPoolSize: 1000입니다.
BlockingPoolSize int
// PipelineMultiplex는 하나의 Redis 인스턴스에 명령을 파이프라이닝하는 데 사용되는 TCP 연결 수를 결정합니다.
//
// 선택 사항. 단일 및 센티넬 클라이언트의 기본값은 2이며, 이는 4개의 연결(2^2)을 의미합니다.
PipelineMultiplex int
// DisableRetry는 네트워크 오류 시 읽기 전용 명령 재시도를 비활성화합니다.
//
// 선택 사항. 기본값은 False입니다.
DisableRetry bool
// DisableCache는 Client.DoCache/Client.DoMultiCache를 Client.Do/Client.DoMulti로 대체합니다.
//
// 선택 사항. 기본값은 false입니다.
DisableCache bool
// AlwaysPipelining을 사용하면 rueidis.Client가 동시에 실행되지 않더라도 항상 Redis 명령을 파이프라이닝합니다.
//
// 선택 사항. 기본값은 true입니다.
AlwaysPipelining bool
// Reset은 기존 Collection의 기존 키를 모두 지웁니다.
//
// 선택 사항. 기본값은 false입니다.
Reset bool
// CacheTTL TTL
//
// 선택 사항. 기본값은 time.Minute입니다.
CacheTTL time.Duration
}
var ConfigDefault = Config{
Username: "",
Password: "",
ClientName: "",
SelectDB: 0,
InitAddress: []string{"127.0.0.1:6379"},
TLSConfig: nil,
CacheSizeEachConn: rueidis.DefaultCacheBytes,
RingScaleEachConn: rueidis.DefaultRingScale,
ReadBufferEachConn: rueidis.DefaultReadBuffer,
WriteBufferEachConn: rueidis.DefaultWriteBuffer,
BlockingPoolSize: rueidis.DefaultPoolSize,
PipelineMultiplex: 2,
DisableRetry: false,
DisableCache: false,
AlwaysPipelining: true,
Reset: false,
CacheTTL: time.Minute,
}