| Patrick Galbraith ( @ 2007-11-30 10:37:00 |
| Entry tags: | memcached, mysql |
Memcached MySQL Functions Released!
The first initial Memcached MySQL UDF functions version has been released. You can download them at:
http://download.tangent.org/memcached_f
Developed by Brian Aker and Patrick Galbraith, These are a number of MySQL user defined functions based on libmemcached (http://tangent.org/552/libmemcached.ht
Included are:
memc_servers_set(
memc_set(hash, value) - sets a value keyed by hash in memcached
memc_get(hash) - retrieves a value from memcached keyed by hash
memc_delete() - deletes a value from memcached keyed by hash
memc_append() - appends to the end of a value in memcached keyed by hash
memc_prepend() - prepends to the beginning of a value in memcached keyed by hash
memc_increment() - increments numerical values stored in memcached (think sequence) keyed by hash
memc_decrement() - decrements numerical values stored in memcached keyed by hash
memc_replace() - replaces values with new values keyed by hash
What do these functions give you? The ability to either write to or read from memcached on read or write queries, within mysql. This means you could do something like this:
CREATE TABLE `jsoncache` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`memcache_key` varchar(32) DEFAULT NULL,
`json` mediumtext,
PRIMARY KEY (`id`)
)
mysql> delimiter | mysql> CREATE TRIGGER `jsoncache_trigger` BEFORE INSERT ON `jsoncache` FOR EACH ROW begin set @id= concat('jsoncache:', NEW.id); set @tt= memc_set(@id, NEW.json); set NEW.memcache_key = @id; end |
Query OK, 0 rows affected (0.05 sec)
mysql>delimiter ;
mysql> insert into jsoncache (json) values ('{{json stuff}}');
Query OK, 1 row affected (0.00 sec)
mysql> select * from jsoncache;
+----+--------------+----------------+
| id | memcache_key | json |
+----+--------------+----------------+
| 1 | jsoncache:1 | {{json stuff}} |
+----+--------------+----------------+
1 row in set (0.00 sec)
mysql> select memc_get('jsoncache:1');
+-------------------------+
| memc_get('jsoncache:1') |
+-------------------------+
| {{json stuff}} |
+-------------------------+
1 row in set (0.00 sec)
Wow! This is great, because now when you insert (write) to MySQL (in my case it would be to a master), you have that data automagically written to memcached!
You can either have a write-through or read-through way of writing data to memcached. I'm sure others will come up with other uses.