Skip to content

Instantly share code, notes, and snippets.

@ser1zw
Created July 28, 2014 20:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ser1zw/b233dc7960ac1cd93f38 to your computer and use it in GitHub Desktop.
Save ser1zw/b233dc7960ac1cd93f38 to your computer and use it in GitHub Desktop.
memcached-manipulator.sh - Memcached manipulation tool
#!/bin/bash
#
# memcached manipulator
#
MEMCACHED_SERVER=localhost:11211
# echo CMD | memcached_send_cmd
memcached_send_cmd() {
if [ -p /dev/stdin ]; then
cat - \
| curl telnet://$MEMCACHED_SERVER 2> /dev/null \
| grep -v '^END'
fi
}
# memcached_exec_cmd CMD [KEY]
# echo KEY | memcached_exec_cmd CMD
memcached_exec_cmd() {
if [ -p /dev/stdin ]; then
cat - | xargs echo $1' '
elif [ -z "$2" ]; then
echo $1
else
echo "$1 $2"
fi \
| xargs -I@ echo -e "@\r\nquit" \
| memcached_send_cmd
}
# memcached_get KEY
# echo KEY | memcached_get
memcached_get() {
memcached_exec_cmd 'get' $1 | grep -v -E '^VALUE'
}
# memcached_set KEY FLAG EXPTIME BYTES DATA
memcached_set() {
echo -e "set $1 $2 $3 `echo -n $4 | wc -c`\r\n$4\r\nquit" \
| memcached_send_cmd
}
memcached_keydump() {
memcached_exec_cmd 'stats items' \
| grep -E '^STAT items:[0-9]*:number [0-9]*' \
| awk -F'[: ]' '{print $3" "$5}' \
| memcached_exec_cmd 'stats cachedump' \
| cut -d' ' -f2
}
if [ "$1" = 'get' ]; then
memcached_get $2
elif [ "$1" = 'set' ]; then
memcached_set $2 $3 $4 $5
elif [ "$1" = 'delete' ]; then
memcached_exec_cmd 'delete' $2
elif [ "$1" = 'clear' ]; then
for k in `memcached_keydump`; do memcached_exec_cmd 'delete' $k; done
elif [ "$1" = 'keys' ]; then
memcached_keydump
elif [ "$1" = 'list' ]; then
memcached_keydump | grep -E "$2" | memcached_get
elif [ "$1" = 'dump' ]; then
memcached_keydump | memcached_get
elif [ "$1" = 'stats' ]; then
memcached_exec_cmd 'stats'
else
FILENAME=`basename $0`
echo
echo " $FILENAME - Memcached manipulation tool"
echo
echo "Usage:"
echo " $FILENAME get KEY"
echo " $FILENAME set KEY FLAGS EXPTIME DATA"
echo " $FILENAME delete KEY"
echo " $FILENAME clear"
echo " $FILENAME keys"
echo " $FILENAME list [PATTERN]"
echo " $FILENAME dump"
echo " $FILENAME stats"
echo
echo "Command:"
echo " get - Get a cache value"
echo " set - Set a cache value"
echo " delete - Delete a cache value"
echo " clear - Delete all cache values"
echo " keys - Dump all cache keys"
echo " list - List values of specified key pattern"
echo " dump - Dump all values"
echo " stats - Show stats"
echo
echo "Parameter:"
echo " KEY - memcached key to get/set"
echo " PATTERN - memcached key pattern to get. Same format as 'grep -E PATTERN'."
echo " FLAGS - Flags to set"
echo " EXPTIME - Expiration time (seconds). Set 0 for never being expired."
echo " DATA - Data to set"
echo
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment