allow dispatching of unknown methods to redis connection object #653

Closed
wants to merge 2 commits into
from

Projects

None yet

2 participants

@d1rk
Union of RAD member

Recently, i was using redis more often. The already implemented cache-adapter is just a start but it allows for easy access to the redis backend.

Some of the functions of redis are not available through the cache adapter, though. As stated in storage\Cache it is easy to use custom methods on cache-adapters like that:

Cache::adapter('named-configuration')->methodName($argument);

That way, it would be easily possible to use custom functions on the redis-adapter. After i created an extension, building some functionality i needed for my project i finally came to this easy, yet powerful way of extending the current redis adapter to allow for dispatching of methods on to the redis connection object.

As this is just an add-on to the existing functionality it might be useful to others. What do you think?

Another way of achieving a similar functionality (without using magic methods) would be to have a method called command or exec or what comes to your mind, that takes 2 parameters. First one would be the name of the method to call, second an array with parameters to be passed into that method. If you would prefer that way, just give me a note.

I think, as lithium makes it easy to get your fingers into these innovative technologies it should make it easy to go beyond the basic functionality and let people grow with that from what they have.

@nateabele nateabele and 1 other commented on an outdated diff Sep 21, 2012
storage/cache/adapter/Redis.php
+ * That way, one can easily use a custom method on that redis adapter like that:
+ *
+ * {{{Cache::adapter('named-of-redis-config')->methodName($argument);}}}
+ *
+ * If you want to know, what methods are available, have a look at the readme of phprdis.
+ * One use-case might be to query possible keys, e.g.
+ *
+ * {{{Cache::adapter('redis')->keys('*');}}}
+ *
+ * @link https://github.com/nicolasff/phpredis GitHub: PhpRedis Extension
+ * @param string $method Name of the method to call
+ * @param array $params Parameter list to use when calling $method
+ * @return mixed Returns the result of the method call
+ */
+ public function __call($method, $params = array()) {
+ switch (count($params)) {
@nateabele
nateabele Sep 21, 2012

You can get rid of all this, and just use the call_user_func_array() implementation.

@d1rk
d1rk Sep 21, 2012

I thought the benefit in performance is worth it. Isn't it so? I copied the code from Object::invokeMethod.

@nateabele
nateabele Sep 21, 2012

It's no longer the case in recent PHP versions.

@d1rk
d1rk Sep 21, 2012

awesome. I will change my code. Other than that, are you fine with the functionality in question?

@nateabele
nateabele Sep 21, 2012

Yup, it just needs a test case, and it needs to be pointed at the dev branch.

@nateabele
Union of RAD member

Closing in favor of #654.

@nateabele nateabele closed this Sep 24, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment