package
0.0.5
Repository: https://github.com/a-castellano/go-services.git
Documentation: pkg.go.dev

# README

MemoryDatabase

This service manages interactions with memory databases. For the time being the only Memoery Databse supported is Redis.

Usage

MemoryDatabase requires a Client interface for being used, this library offers Redis as Client interface.

Example

type Client interface {
	WriteString(context.Context, string, string, int) error
	ReadString(context.Context, string) (string, error)
	isClientInitiated() bool
}

Redis type from go-types can be used as Client.

package main

import (
	"context"
	redisconfig "github.com/a-castellano/go-types/redis"
	"os"
)

func main() {
	redisIP := os.Getenv("REDIS_IP")
	config, _ := redisconfig.NewConfig()
	redisClient := NewRedisClient(config)
	// Initiate Client
	if ok := redisClient.isClientInitiated(); ! ok{
		initiateErr := redisClient.Initiate(ctx)
		if initiateErr != nil {
		  panic(initiateErr)
		}
		// Now redisClient is initiate use it ad MemoryDatabase Client
		memoryDatabase := MemoryDatabase{client: &redisClient}

		// Write some value
		writeError := memoryDatabase.WriteString(ctx, "anykey", "anyvalue", 0)

		// Read some value
		readedValue, valueFound, readExistentKeyError := memoryDatabase.ReadString(ctx, "anykey")
	}
}

Initiate client

Before perform any read or write Client instace must be initiated:

initiateErr := redisClient.Initiate(ctx)

Otherwise, memoryDatabase functions will fail and won't perform any action.

Available Functions

The following functions are avaible for interacting with MemoryDatabase

Initiate

func (client *RedisClient) Initiate(ctx context.Context) error

This function initiate Redis and pings the server

WriteString

func (client *RedisClient) WriteString(ctx context.Context, key string, value string, ttl int) error

Writes string value in required key, ttl of that key must be set, use 0 value for infite ttl.

ReadString

func (memorydatabase *MemoryDatabase) ReadString(ctx context.Context, key string) (string, bool, error)

Reads string value in required key. If value is not found, bool returned will be false.

Integration and coverage tests

Tests expect a Redis server without auth protection running, you can set Redis IP using env variables:

REDIS_IP="127.0.0.1" make test_integration
REDIS_IP="127.0.0.1" make coverage

# Functions

NewMemoryDatabase creates MemoryDatabase instance.
NewRedisClient initiates RedisClient.

# Structs

MemoryDatabase uses Client in order to operate against database instance.
RedisClient is the real Redis client, it has Client methods.

# Interfaces

Client interface operates against memory database instance.