Skip to content
This repository was archived by the owner on Apr 22, 2026. It is now read-only.

swift-server/swift-memcache-gsoc

SwiftMemcache

Warning

This repository was a Google Summer of Code project that didn't reach feature completness to offer a full Memcache client. For now we have archived the repository to reduce our maintenance burden but if you are interested in taking on the maintenance please reach out to the Swift Server Workgroup in the Swift forums.

SwiftMemcache is a Swift Package in development that provides a convenient way to communicate with Memcached servers.

Getting Started

Overview

Memcache Connection API

Our MemcacheConnection allows for communicate with a Memcached server. This actor takes care of establishing a connection, creating a request stream and handling asynchronous execution of commands.

Here's an example of how you can use MemcachedConnection in a program.

@main
struct Program {
    // Use the shared singleton instance of MultiThreadedEventLoopGroup
    static let eventLoopGroup = MultiThreadedEventLoopGroup.singleton
    // Initialize the logger
    static let logger = Logger(label: "memcache")

    static func main() async throws {
        // Instantiate a new MemcacheConnection actor with host, port, and event loop group
        let memcacheConnection = MemcacheConnection(host: "127.0.0.1", port: 11211, eventLoopGroup: eventLoopGroup)

        // Initialize the service group
        let serviceGroup = ServiceGroup(services: [memcacheConnection], logger: self.logger)

        try await withThrowingTaskGroup(of: Void.self) { group in
            // Add the connection actor's run function to the task group
            // This opens the connection and handles requests until the task is cancelled or the connection is closed
            group.addTask { try await serviceGroup.run() }

            // Set a value for a key.
            let setValue = "bar"
            try await memcacheConnection.set("foo", value: setValue)

            // Get the value for a key.
            // Specify the expected type for the value returned from Memcache.
            let getValue: String? = try await memcacheConnection.get("foo")

            // Assert that the get operation was successful by comparing the value set and the value returned from Memcache.
            // If they are not equal, this will throw an error.
            assert(getValue == setValue, "Value retrieved from Memcache does not match the set value")

            // Cancel all tasks in the task group.
            // This also results in the connection to Memcache being closed.
            group.cancelAll()
        }
    }
}

Contributing

Docker

We provide a Docker environment for this package. This will automatically start a local Memcached server and run the package tests.

docker-compose -f docker/docker-compose.yaml run test

About

No description, website, or topics provided.

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Contributors