Discache is a powerful, but simple memory cache in Golang. Using TCP and binary as a transporter makes it very performant.
From releases This installs binary.
- Linux
curl -LO "https://github.com/dhyanio/discache/releases/download/$(curl -s https://api.github.com/repos/dhyanio/discache/releases/latest | grep tag_name | cut -d '"' -f 4)/discache-linux-amd64"
chmod +x discache-linux-amd64
sudo mv discache-linux-amd64 /usr/local/bin/discache
- MacOS
curl -LO "https://github.com/dhyanio/discache/releases/download/$(curl -s https://api.github.com/repos/dhyanio/discache/releases/latest | grep tag_name | cut -d '"' -f 4)/discache-darwin-amd64"
chmod +x discache-darwin-amd64
sudo mv discache-darwin-amd64 /usr/local/bin/discache
From source
- Run
git clone <discache repo> && cd discache/ - Run
make build
A CLI tool has commands
LISTEN_ADDR- Address for the server to listen on (default::4000).LEADER_ADDR- Address of the leader node (default::3000).
These can be passed as arguments when running specific commands.
- Run the Project
make runIt runs the binary after building it.
- Run the Tests
make testRuns all tests with verbose output.
- Lint the Project
make lintRuns golangci-lint on the codebase. Ensure golangci-lint is installed.
- Format the Code
make fmtFormats the code using go fmt.
- Clean the Build Files
make cleanRemoves the bin/ directory and all generated files.
To start a leader
make run NAME:node1 LISTEN_ADDR=:3000To start a follower node with a custom LISTEN_ADDR and LEADER_ADDR
make leader NAME=node1 LISTEN_ADDR=:3000 Leader_NAME=node1A Go client for connecting to an LRU cache server over TCP. This client allows users to perform Get and Put operations on the cache, handling network communication and TTL (time-to-live) for cache entries.
- Get: Retrieve a value by its key.
- Put: Store a value with a specified TTL.
- Connection Management: Establishes and closes TCP connections.
- Error Handling: Returns detailed error messages for failed operations.
- Prerequisites: Make sure you have Go installed.
- Clone the repository and navigate to the project directory.
- Build the Client:
go build -o lru_client client.goTo create a new client instance, use New with the server endpoint and optional configurations:
import "github.com/dhyanio/discache/client"
func main() {
endpoint := "localhost:9080" // port 9080 is the default for discache client-server
opts := client.Options{}
client, err := client.New(endpoint, opts)
if err != nil {
log.Fatalf("Failed to connect to discache server: %v", err)
}
defer cacheClient.Close()
}Put a key-value pair into the cache with a specified TTL (in seconds):
key := []byte("foo")
value := []byte("bar")
ttl := 60 // TTL in seconds
err := client.Put(context.Background(), key, value, ttl)
if err != nil {
log.Printf("Failed to put key: %v", err)
}Get a value by key:
value, err := client.Get(context.Background(), key)
if err != nil {
log.Printf("Failed to get key: %v", err)
} else {
log.Printf("Value: %s", string(value))
}Always close the connection when you're done:
defer cacheClient.Close()Errors returned by Get and Put methods include:
Key Not Found: if the key doesnโt exist.Connection Errors: issues in TCP communication with the server.Non-OK Status: unexpected server responses.
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
- Fork the repository.
- Create your feature branch (git checkout -b feature/new-feature).
- Commit your changes (git commit -am 'Add new feature').
- Push to the branch (git push origin feature/new-feature).
- Create a new Pull Request.
This project is licensed under the MIT License. See the LICENSE file for details.
Thanks to the Go community for their support and contributions.
