A volatile in-memory key-value storage written in PHP.
Caphpe is currently in development. No stable release is available yet. This documentation refers to the latest available release.
You can follow development and contribute at the GitHub source repository.
            Caphpe originally started as an experiment on creating a Memcached
            clone
 of sorts in pure PHP.
        
Caphpe has various commands to store, alter, fetch and delete values. It does not persist the cached values anywhere. If you kill the process the data is gone for good.
Caphpe is not meant to be used as a direct replacement of something like Redis or Memcached. They play in an entirely other league when it comes to caching software. Caphpe is good for light use small object storage. PHP ain't as performant as C either, so it can be slower than Memcached and the like. Preliminary benchmarks clocked around 10000 writes per second through a persistent socket connection.
Read more about Caphpe or browse the code over at the GitHub repository.
Caphpe should work anywhere where a relatively new (5.5+) PHP CLI installation is available and where socket creation is allowed.
Caphpe has been tested on Linux and Windows.
            Download the Phar and move it somewhere
            convenient for now (maybe your $PATH).
        
Make sure the downloaded Phar is executable using
$ chmod +x caphpe.phar
        You can make it easier to invoke by using
$ mv caphpe.phar caphpe
        Then you can run Caphpe as such
$ caphpe
        Cache offers a few options to alter how it runs:
--host=[host]|-h [host]
    Define a hostname to listen on. Defaults to 127.0.0.1.
--port=[port]|-p [port]
    Define the port to listen on. Defaults to 10808.
--memorylimit=[limit]|-m [limit]
    Define a memory limit (in megabytes) for Caphpe to use. Defaults to 64MB.
--verbosity=[verbosity]|-v [verbosity]
    Define output verbosity. 1, 2 or 3. Higher means more messages. Defaults to 1.
        Example:
$ caphpe \
    --host=192.168.0.123 \
    --port=12345 \
    --memorylimit=128 \
    --verbosity=3
        
            Caphpe listens on the host and port as defined by the given options
            host and port.
        
You can test the connection by using telnet:
$ telnet 127.0.0.1 10808
> flush
1
> close
$ ...
        If you wish to connect from an application you need to connect to the Caphpe TCP socket using your language's features.
Internally Caphpe data types and data storing itself is quite simple.
All values in Caphpe are tied to a single key. Keys must be under 64 characters long and can contain only the following characters:
a-z and A-Z0-9. and _
            Internally Caphpe supports the following types: string,
            integer and boolean. All values are stored as
            strings unless otherwise instructed (or if PHP does some magic
            type-casting with no respect to the author).
        
            When issuing value-altering commands a user can tell Caphpe to cast to
            different types using the keys s, i and
            b. More on using those keys later when commands are
            explained.
        
Each value is tied to a single key in Caphpe. Value can be one of the types mentioned above.
Values currently have two restrictions:
\n)<space>+integer combination.
            Caphpe delimits commands using newlines (\n), so if there is
            one inside a value the commands breaks. Caphpe sets timeouts as the final
            command parameter so values ending in integers may not work properly.
        
The following values would be OK
this is an awesome value
this value is 100x awesomer
        The following values may/will break
this is some not cool value 12345
this is a naughty\nvalue which has a newline
        Plans are in place to lift these restrictions, maybe by enforcing some delimiters around values for library/wrapper implementations.
Each value in Caphpe has a timeout. A timeout internally is an absolute Unix timestamp which marks the time when a value is considered stale (and will be removed automatically from Caphpe).
When giving timeout values, users must provide the timeout value as seconds from now. In other words how many seconds a value is considered "fresh".
            If no timeout value is given (or 0 is given) then Caphpe
            treats the value as "fresh forever" unless otherwise removed.
        
You can add, alter, fetch and delete data in Caphpe using the following commands.
[] denotes a parameter for a command,[]? denotes an optional parameter.
        
add [key] [type]?[value] [timeout]?
    where
        [key] is a valid key
        [type] is one of
            s|
            i|
            b|
        [value] is a valid value
        [timeout] is an integer marking seconds
        Add a value to Caphpe. If the key already exists this command does nothing. Examples:
add mykey myvalue 3600
add mykey s|some string value
add mykey i|123456 3600
add mykey b|1 0
        
set [key] [type]?[value] [timeout]?
    see add command for reference
        Sets a value to Caphpe. Will create and override keys where needed. Examples:
set mykey myvalue 3600
set mykey s|awesome string with awesome value
        
replace [key] [type]?[value] [timeout]?
    see add command for reference
        Replaces a value in Caphpe. If the key does not exist this command does nothing. Examples:
replace mykey myvalue 3600
replace mykey s|awesome string with awesome value
        
delete [key]
    where
        [key] is a valid key
        Deletes a value from Caphpe. Does nothing if the key does not exist. Examples:
delete mykey
        
increment [key] [timeout]?
    where
        [key] is a valid key
        [timeout] is an integer marking seconds
        Increment a numeric value in Caphpe by 1. If the value is not a numeric value or does not exist nothing is done. Examples:
increment mykey 3600
increment somekey
        
            See increment. This one does the opposite.
        
has [key]
    where
        [key] is a valid key
        
            Checks if a value exists for the given key. Returns 1 if does,
            empty value if not. Examples:
        
has mykey
has someotherkey
        
get [key]
    where
        [key] is a valid key
        Get a value from Caphpe for a key. Returns the value or an empty string if no value exists for the key. Examples:
get mykey
get somekey
        
flush
    (no parameters)
        
            Flushes all data from Caphpe. Returns 1 if successful and an
            empty string if not. Example:
        
flush
        
status
    (no parameters)
        Displays a status message. Note: Caphpe currently approximates memory usage per cache item, so there may be some error in the values returned by the status command.
            Here is an example output of the status command. Please note the separate
            header and value lines, with columns separated with a single
            \t character:
        
Memory usage (MB)\tItem count\tSmallest item (KB)\tLargest item (KB)\tAverage item (KB)
12.3456\t123\t0.704\t1.567\t0.888
        Example:
status
        Currently Caphpe is in an unstable development phase. Bugs come and go and it may sometimes not work at all.
If you encounter stuff that does not work as documented or does not work at all, please create an issue over at the GitHub issue tracker.