Rediska News http://rediska.geometria-lab.net Rediska - PHP client for advanced key-value database Redis Release Rediska 0.5.10 <p>Redis 2.8 is supported!</p> <p>Changelog:</p> <ul> <li>Check the new return value of TTL command (starting with Redis 2.8 the command returns -2 if the key does not exist)</li> <li>Rediska_Connection_Exec_Exception message now contains error prefix (starting with Redis 2.8 many errors are prefixed by a more specific error code instead of the generic ERR, for example WRONGTYPE, NOAUTH)</li></ul> Tue, 12 Aug 2014 15:10:35 +0000 /news/2014-08-12-release-rediska-0-5-10 /news/2014-08-12-release-rediska-0-5-10 Release Rediska 0.5.8 <p>Changelog:</p> <ul> <li>Zend queue adapter: avoid subsequent identical queries on existing queues set. Max Ivanov</li> <li>Allow subsecond accuracy when reading from pubsub. Shyru</li> <li>Composer autoloader now use psr-0 path. zircote</li> <li>Remove vm-enabled no from redis.conf. Shyru</li> <li>Unbreak travis by fixing the location of the ZF download. till</li> <li>Fixing issue with <span class="pre">Rediska_Serializer_Adapter_Json::unserialize</span> method not return unserialized value, trickeyone</li> </ul> <p>Have a nice day!</p> Tue, 20 Aug 2013 15:49:48 +0000 /news/2013-08-20-release-rediska-0-5-8 /news/2013-08-20-release-rediska-0-5-8 Release Rediska 0.5.7 <p>Unfortunately I don't have enough time to close all issues, this release came out thanks to contributors. The work on Rediska 2 is now in progress, stay connected.</p> <ul> <li>Add <a href="http://packagist.org/packages/geometria-lab/rediska">Rediska package</a> to <a href="http://getcomposer.org/">Composer</a>. <em>Marc Abramowitz</em></li> <li>Add to Travis CI. Marc Abramowitz</li> <li>Info object. Robert Allen</li> <li>Implement <span class="pre">ZREVRANGEBYSCORE</span>. Sergey Cherepanov</li> <li>Implement <span class="pre">PING</span>. Robert Allen</li> <li>Socket functions support. New connection option: <span class="pre">useSocket</span>. Ruan Chunping</li> <li>Add <span class="pre">$prepend</span> to autoloader</li> <li>Transactions and tags support for Zend Cache backend. Robert Allen</li> <li>Fix unserializing "numeric like" string. Netweaver</li> <li>Fix redis invalid argument error in <span class="pre">Rediska::popFromListBlocking</span> with <span class="pre">$pushToKey</span> argument and many connections</li> <li>Fix profiler option can't get a string</li> </ul> <p>Have a nice day!</p> Wed, 29 Aug 2012 15:45:39 +0000 /news/2012-08-29-release-rediska-0-5-7 /news/2012-08-29-release-rediska-0-5-7 Release Rediska 0.5.5 <p>I apologize for the long silence since the last release. I'm not dead, and not in jail, but I spent all this time on our two new projects:</p> <ul> <li>TimeRanger - nice PHP profiler for production servers.</li> <li><a href="https://github.com/geometria-lab/Beseda">Beseda</a> (alpha version) - fast, well designed and featured <a href="http://nodejs.org/">Node.js</a> Pub/Sub server based on patched <a href="http://socket.io/">Socket.io</a>. Beseda offers server-side and client-side crossbrowser API for realtime messaging.</li> </ul> <p>Ok, back to <a href="http://rediska.geometria-lab.net/api/0-5-5/">Rediska 0.5.5</a>. What's new?</p> <ul> <li><a href="/documentation/configuration/profiler">Profiler</a>!</li> <li>Watch and unwatch for <a href="/documentation/usage/transactions">transactions</a>.</li> <li>Moved all command to new binary safe protocol.</li> <li>Implemented new string commands: <span class="pre">SETBIT</span>, <span class="pre">GETBIT</span>, <span class="pre">SETRANGE</span>, <span class="pre">GETRANGE</span>, <span class="pre">STRLEN</span>.</li> <li>Implemented new list commands: <span class="pre">LINSERT</span>, <span class="pre">LPUSHX</span>, <span class="pre">RPUSHX</span>, <span class="pre">BRPOPLPUSH</span>.</li> <li>Added <span class="pre">Rediska#removeServer</span>.</li> <li>Deprecated old expire behavior.</li> <li>Added optional response iterator for sets, sortedsets and lists with realtime reading from socket.</li> <li>Added timeout argument to <span class="pre">Rediska_Monitor#getCommand</span> and <span class="pre">Rediska_PubSub_Channel#getMessage</span>.</li> <li>Removed case insensitive from options.</li> <li>Set connection to blocking mode if only one connection in Pub/Sub channel.</li> <li>Change <span class="pre">Rediska_Key_Set</span> to <span class="pre">Rediska_Key_SortedSet</span> in Zend Framework session save handler for optimization.</li> <li>Autoloader optimization.</li> <li>Added <span class="pre">Rediska_Key_SortedSet#getByRank</span> method.</li> <li>Added <span class="pre">Rediska_Key_Hash#getFieldsAndValues</span>.</li> <li>Added <span class="pre">Rediska_Key_Set#getValues</span> and <span class="pre">Rediska_Key_List#getValues</span>.</li> <li>Added expire argument to <span class="pre">Rediska_Key#getOrSetValue</span>. <li>And <a href="http://bugs.geometria-lab.net/versions/show/204">many fixes</a>.</li> </ul> <p>Highly recommend upgrade your Rediska!</p> Sat, 02 Apr 2011 13:48:34 +0000 /news/2011-04-02-release-rediska-0-5-5 /news/2011-04-02-release-rediska-0-5-5 Rediska 0.5.5-rc on github! <p>Rediska 0.5.5-rc on <a href="https://github.com/shumkov/rediska">github</a> at master branch.</p> <p>We need a few days for test it on production and document new features.</p> <p>See <a href="http://bugs.geometria-lab.net/versions/show/204">changelog</a>.</p> Tue, 01 Mar 2011 22:05:54 +0000 /news/2011-03-02-rediska-0-5-5-rc-on-github /news/2011-03-02-rediska-0-5-5-rc-on-github Release Rediska 0.5.1 <p>This is minor release with some fixes:</p> <ul> <li>Implemented <span class="pre">ZCOUNT</span></li> <li>Added <span class="pre">append</span> and <span class="pre">substring</span> commands to <a href="/api/0-5-10/?href=Rediska/Key/Rediska_Key.html&amp;title=Rediska_Key&amp;id=pkg_1b1be08c01b983da8ab7265b8d5eccd0_897356954c2cd3d41b221e3f24f99bba_classes_7f41e6ce426adb110fa84d55c0b17030">Rediska_Key</a></li> <li>Added <span class="pre">setAndExpire</span> command to <a href="/api/0-5-10/?href=Rediska/Key/Rediska_Key.html&amp;title=Rediska_Key&amp;id=pkg_1b1be08c01b983da8ab7265b8d5eccd0_897356954c2cd3d41b221e3f24f99bba_classes_7f41e6ce426adb110fa84d55c0b17030">Rediska_Key</a></li> <li>Fixed warnings about empty namespace</li> <li>Fixed <span class="pre">GET</span> parameter in <span class="pre">sort</span> command</li> </ul> Thu, 28 Oct 2010 14:40:27 +0000 /news/2010-10-28-release-rediska-0-5-1 /news/2010-10-28-release-rediska-0-5-1 Release Rediska 0.5.0 <p>Last week we launched new version of Rediska and tested it with new Redis server in out projects. Now we can say everything works great and we're announcing it to the public!</p> <p>Here's what's new so far:</p> <ul> <li>Implemented Hash commands and <a href="/documentation/usage/working-with-keys/hashes">Hash key object</a></li> <li><a href="/documentation/usage/transactions">Transactions</a> (<span class="pre">MULTI</span>, <span class="pre">EXEC</span>, <span class="pre">DISCARD</span>)</li> <li><a href="/documentation/usage/publish-subscribe">Publish/Subscribe</a> (<span class="pre">SUBSCRIBE</span>, <span class="pre">UNSUBSCRIBE</span>, <span class="pre">PUBLISH</span>)</li> <li>Implemented <span class="pre">BLPOP</span> and <span class="pre">BRPOP</span></li> <li>Implemented <span class="pre">SETEX</span>, <span class="pre">APPEND</span> and <span class="pre">SUBSTR</span></li> <li>Implemented <span class="pre"><a href="/documentation/usage/redis-config">CONFIG</a></span> and <span class="pre"><a href="/documentation/usage/monitor">MONITOR</a></span></li> <li><a href="/documentation/configuration/serializer">New serialzier</a>. <span class="pre">phpSerialize</span> and <span class="pre">json</span> adapters. Rediska now can't serialize strings.</li> <li><a href="/documentation/usage/instance-manager">Instance manager</a></li> <li><a href="/api/0-5-0/">PhpDoc documentaion</a></li> <li>Refactor commands</li> <li>Autoloader</li> <li>Add read timeout to connection</li> <li>Method generator for IDE autocomplete and phpDoc</li> </ul> <p><a href="/documentation/get-started">Get started!</a></p> Tue, 21 Sep 2010 09:16:33 +0000 /news/2010-09-21-release-rediska-0-5-0 /news/2010-09-21-release-rediska-0-5-0 Added Rediska instance manager and refactored a lot <p>Last week I pushed Rediska instance manager and a lot of other changes to <a href="http://github.com/Shumkov/Rediska">github</a>.</p> <h3>Instance manager</h3> <p>There can be different components (cache, sessions and etc) in you application, which may need their own Rediska instance with specific options (namespace, servers and etc).</p> <p>Manager class is designed to store these Rediska instances. Manager can also store an array of Rediska options and Rediska instance will be created on a first request (lazy-loaded).</p> <p>There are two new options in Rediska:</p> <ul> <li><span class="pre">name</span> - instance name. It will be <span class="pre">default</span> if other is not specified</li> <li><span class="pre">addToManager</span> - whether or not to add Rediska instance to manager when it's created. Defaults to true</li> </ul> <pre class="active4d">&lt;?php <span class="LineComment"><span class="LineComment">//</span> Create 'default' instance</span> <span class="Variable"><span class="Variable">$</span>rediska</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska</span>(); <span class="LineComment"><span class="LineComment">//</span> Get 'default' instance from manager</span> <span class="Variable"><span class="Variable">$</span>rediska</span> <span class="Operator">=</span> <span class="LibraryClassType">Rediska_Manager</span><span class="Operator">::</span>get(); <span class="CommandMethod">print</span> <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>getName(); <span class="LineComment"><span class="LineComment">#</span>=&gt; default</span> <span class="LineComment"><span class="LineComment">//</span> Create 'cache' instance</span> <span class="Variable"><span class="Variable">$</span>rediska</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska</span>(<span class="CommandMethod">array</span>(<span class="String"><span class="String">'</span><span class="String">name</span><span class="String">'</span></span> <span class="Operator">=&gt;</span> <span class="String"><span class="String">'</span><span class="String">cache</span><span class="String">'</span></span>, <span class="String"><span class="String">'</span><span class="String">namespace</span><span class="String">'</span></span> <span class="Operator">=&gt;</span> <span class="String"><span class="String">'</span><span class="String">Cache_</span><span class="String">'</span></span>)); <span class="LineComment"><span class="LineComment">//</span> Get 'cache' instance from manager</span> <span class="Variable"><span class="Variable">$</span>rediska</span> <span class="Operator">=</span> <span class="LibraryClassType">Rediska_Manager</span><span class="Operator">::</span>get(<span class="String"><span class="String">'</span><span class="String">cache</span><span class="String">'</span></span>); <span class="CommandMethod">print</span> <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>getName(); <span class="LineComment"><span class="LineComment">#</span>=&gt; cache</span> <span class="LineComment"><span class="LineComment">//</span> Add 'sessions' instance though options</span> <span class="LibraryClassType">Rediska_Manager</span><span class="Operator">::</span>add(<span class="CommandMethod">array</span>(<span class="String"><span class="String">'</span><span class="String">name</span><span class="String">'</span></span> <span class="Operator">=&gt;</span> <span class="String"><span class="String">'</span><span class="String">sessions</span><span class="String">'</span></span>, <span class="String"><span class="String">'</span><span class="String">namespace</span><span class="String">'</span></span> <span class="Operator">=&gt;</span> <span class="String"><span class="String">'</span><span class="String">Sessions_</span><span class="String">'</span></span>)); <span class="LineComment"><span class="LineComment">//</span> Object created when it needed</span> <span class="Variable"><span class="Variable">$</span>rediska</span> <span class="Operator">=</span> <span class="LibraryClassType">Rediska_Manager</span><span class="Operator">::</span>get(<span class="String"><span class="String">'</span><span class="String">sessions</span><span class="String">'</span></span>); <span class="CommandMethod">print</span> <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>getName(); <span class="LineComment"><span class="LineComment">#</span>=&gt; sessions</span> ?&gt; </pre> <h3>Key objects</h3> <p>I sligtly changed constructors of <span class="pre">Rediska_Key</span>, <span class="pre">Rediska_Key_List</span>, <span class="pre">Rediska_Key_Set</span>, <span class="pre">Rediska_Key_SortedSet</span>, <span class="pre">Rediska_Key_Hash</span>. Second argument became an array of options:</p> <ul> <li><span class="pre">expire</span> - Expire time</li> <li><span class="pre">expireIsTimestamp</span> - Expire time is timestamp (in seconds). For default false</li> <li><span class="pre">serverAlias</span> - Server alias or connection object</li> <li><span class="pre">rediska - Rediska instance name, Rediska object or Rediska options for new instance. <span class="pre">default</span> if not specified</li> </ul> <pre class="active4d">&lt;?php <span class="LineComment"><span class="LineComment">//</span> Create 'cache' instance</span> <span class="Variable"><span class="Variable">$</span>rediska</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska</span>(<span class="CommandMethod">array</span>(<span class="String"><span class="String">'</span><span class="String">name</span><span class="String">'</span></span> <span class="Operator">=&gt;</span> <span class="String"><span class="String">'</span><span class="String">cache</span><span class="String">'</span></span>)); <span class="LineComment"><span class="LineComment">//</span> Create key with rediska 'cache' instance</span> <span class="Variable"><span class="Variable">$</span>cache</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska_Key_Hash</span>(<span class="String"><span class="String">'</span><span class="String">cacheKeyName</span><span class="String">'</span></span>, <span class="CommandMethod">array</span>(<span class="String"><span class="String">'</span><span class="String">rediska</span><span class="String">'</span></span> <span class="Operator">=&gt;</span> <span class="String"><span class="String">'</span><span class="String">cache</span><span class="String">'</span></span>)); <span class="LineComment"><span class="LineComment">//</span> Or pass Rediska object to 'rediska' option</span> <span class="Variable"><span class="Variable">$</span>cache</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska_Key_Hash</span>(<span class="String"><span class="String">'</span><span class="String">cacheKeyName</span><span class="String">'</span></span>, <span class="CommandMethod">array</span>(<span class="String"><span class="String">'</span><span class="String">rediska</span><span class="String">'</span></span> <span class="Operator">=&gt;</span> <span class="Variable"><span class="Variable">$</span>rediska</span>)); <span class="LineComment"><span class="LineComment">//</span> Or pass Rediska option to create new instance</span> <span class="Variable"><span class="Variable">$</span>cache</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska_Key_Hash</span>(<span class="String"><span class="String">'</span><span class="String">cacheKeyName</span><span class="String">'</span></span>, <span class="CommandMethod">array</span>(<span class="String"><span class="String">'</span><span class="String">rediska</span><span class="String">'</span></span> <span class="Operator">=&gt;</span> <span class="CommandMethod">array</span>(<span class="String"><span class="String">'</span><span class="String">namespace</span><span class="String">'</span></span> <span class="Operator">=&gt;</span> <span class="String"><span class="String">'</span><span class="String">Cache_</span><span class="String">'</span></span>))); ?&gt; </pre> <h3>Zend Framework integration</h3> <p>Now you can specify a few Rediska instances in a <span class="pre">application.ini</span> and you can reference their names in other resources configuration.</p> <div class="pre" style="padding: 10px;overflow-x: auto;white-space:pre">; Initialize Rediska cache instance resources.rediska.instances.cache.namespace = 'Cache_' resources.rediska.instances.cache.servers.0.host = 127.0.0.1 resources.rediska.instances.cache.servers.0.port = 6379 resources.rediska.instances.cache.servers.1.host = 127.0.0.2 resources.rediska.instances.cache.servers.1.port = 6379 ; Initialize Rediska sessions instance resources.rediska.instances.sessions.namespace = 'Sessions_' ; Initialize cache resources.cachemanager.redis.frontend.name = Core resources.cachemanager.redis.backend.name = Rediska_Zend_Cache_Backend_Redis ; Reference to Rediska 'cache' instance resources.cachemanager.redis.backend.options.rediska = cache resources.cachemanager.redis.backend.customBackendNaming = true resources.cachemanager.redis.frontendBackendAutoload = true ; Initialize sessions resources.session.saveHandler.class = "Rediska_Zend_Session_SaveHandler_Redis" ; Reference to Rediska 'sessions' instance resources.session.saveHandler.options.rediska = sessions </div> <h3>Rediska_Autoloader и Rediska_Commands</h3> <p>Autoload and command manager are in separate classes.</p> <h3>All Rediska commands in your IDE autocomplete</h3> <p>There is a script <span class="pre">scripts/add_command_methods.php</span> which generates Rediska command methods in following classes <span class="pre">Rediska</span>, <span class="pre">Rediska_Pipeline</span>, <span class="pre">Rediska_Connection_Specified</span>, <span class="pre">Rediska_Transaction</span>. This way IDE autocomplete and phpDocumentator will work properly.</p> Wed, 25 Aug 2010 10:53:38 +0000 /news/2010-08-25-added-rediska-instance-manager-and-refactored-a-lot /news/2010-08-25-added-rediska-instance-manager-and-refactored-a-lot Rediska config and monitor on github! <p>Yesterday I pushed implementation of <a href="http://code.google.com/p/redis/wiki/ConfigCommand">CONFIG</a> and <a href="http://code.google.com/p/redis/wiki/MonitorCommand">MONITOR</a> Redis commands to <a href="http://github.com/shumkov/rediska">github</a>.</p> <h3>Config</h3> <pre class="active4d">&lt;?php <span class="Variable"><span class="Variable">$</span>rediska</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska</span>(); <span class="Variable"><span class="Variable">$</span>config</span> <span class="Operator">=</span> <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>config(); <span class="LineComment"><span class="LineComment">//</span> Iterate all redis parameters</span> <span class="Keyword">foreach</span>(<span class="Variable"><span class="Variable">$</span>config</span> <span class="Operator">as</span> <span class="Variable"><span class="Variable">$</span>name</span> <span class="Operator">=&gt;</span> <span class="Variable"><span class="Variable">$</span>value</span>) { <span class="CommandMethod">print</span> <span class="String"><span class="String">&quot;</span><span class="String"><span class="Variable"><span class="Variable">$</span>name</span> =&gt; <span class="Variable"><span class="Variable">$</span>value</span><span class="UserDefinedConstant">\n</span></span><span class="String">&quot;</span></span>; } <span class="LineComment"><span class="LineComment">//</span> Get parameter</span> <span class="CommandMethod">print</span> <span class="Variable"><span class="Variable">$</span>config</span><span class="Operator">-&gt;</span><span class="Variable">maxmemory</span>; <span class="LineComment"><span class="LineComment">//</span> or as array</span> <span class="CommandMethod">print</span> <span class="Variable"><span class="Variable">$</span>config</span>[<span class="String"><span class="String">'</span><span class="String">maxmemory</span><span class="String">'</span></span>]; <span class="LineComment"><span class="LineComment">//</span> Get parameters by pattern</span> <span class="Keyword">foreach</span>(<span class="Variable"><span class="Variable">$</span>config</span>[<span class="String"><span class="String">'</span><span class="String">max*</span><span class="String">'</span></span>] <span class="Operator">as</span> <span class="Variable"><span class="Variable">$</span>name</span> <span class="Operator">=&gt;</span> <span class="Variable"><span class="Variable">$</span>value</span>) { <span class="CommandMethod">print</span> <span class="String"><span class="String">&quot;</span><span class="String"><span class="Variable"><span class="Variable">$</span>name</span> =&gt; <span class="Variable"><span class="Variable">$</span>value</span><span class="UserDefinedConstant">\n</span></span><span class="String">&quot;</span></span>; } <span class="LineComment"><span class="LineComment">//</span> Set parameter</span> <span class="Variable"><span class="Variable">$</span>config</span><span class="Operator">-&gt;</span><span class="Variable">maxmemory</span> <span class="Operator">=</span> <span class="Number">10000</span>; <span class="LineComment"><span class="LineComment">//</span> or as array</span> <span class="Variable"><span class="Variable">$</span>config</span>[<span class="String"><span class="String">'</span><span class="String">maxmemory</span><span class="String">'</span></span>] <span class="Operator">=</span> <span class="Number">10000</span>; ?&gt; </pre> <h3>Monitor</h3> <pre class="active4d">&lt;?php <span class="LineComment"><span class="LineComment">//</span> Get monitor</span> <span class="Variable"><span class="Variable">$</span>monitor</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska_Monitor</span>(); <span class="LineComment"><span class="LineComment">//</span> or from Rediska</span> <span class="Variable"><span class="Variable">$</span>rediska</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska</span>(); <span class="Variable"><span class="Variable">$</span>monitor</span> <span class="Operator">=</span> <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>monitor(); <span class="LineComment"><span class="LineComment">//</span> Get commands</span> <span class="Keyword">foreach</span>(<span class="Variable"><span class="Variable">$</span>monitor</span> <span class="Operator">as</span> <span class="Variable"><span class="Variable">$</span>timestamp</span> <span class="Operator">=&gt;</span> <span class="Variable"><span class="Variable">$</span>command</span>) { <span class="CommandMethod">print</span> <span class="String"><span class="String">&quot;</span><span class="String"><span class="Variable"><span class="Variable">$</span>timestamp</span> =&gt; <span class="Variable"><span class="Variable">$</span>command</span></span><span class="String">&quot;</span></span>; } ?&gt; </pre> Wed, 11 Aug 2010 10:13:12 +0000 /news/2010-08-11-rediska-config-and-monitor-on-github /news/2010-08-11-rediska-config-and-monitor-on-github Append, Substring and SetAndExpire already on github! <p>New Redis 2.0 commands implementation on <a href="http://github.com/shumkov/rediska">github</a>:</p> <ul> <li><span class="pre">Rediska#Append($name, $value)</span> - Append value to a string key</li> <li><span class="pre">Rediska#Substring($name, $start, $end = -1)</span> - Return substring of string key</li> <li><span class="pre">Rediska#SetAndExpire($name, $value, $time)</span> - Set + Expire atomic combo.</li> </ul> Mon, 09 Aug 2010 17:58:23 +0000 /news/2010-08-09-append-substring-and-setandexpire-already-on-github /news/2010-08-09-append-substring-and-setandexpire-already-on-github Hashes implemented! <p>Let me introduce you Hashes implemented in Rediska:</p> <pre class="active4d">&lt;?php <span class="Variable"><span class="Variable">$</span>user</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska_Key_Hash</span>(<span class="String"><span class="String">'</span><span class="String">users:1</span><span class="String">'</span></span>); <span class="LineComment"><span class="LineComment">//</span> Fields accessible as object properties</span> <span class="Variable"><span class="Variable">$</span>user</span><span class="Operator">-&gt;</span><span class="Variable">firstName</span> <span class="Operator">=</span> <span class="String"><span class="String">'</span><span class="String">John</span><span class="String">'</span></span>; <span class="LineComment"><span class="LineComment">//</span> Fields accessible as array keys</span> <span class="Variable"><span class="Variable">$</span>user</span>[<span class="String"><span class="String">'</span><span class="String">lastName</span><span class="String">'</span></span>] <span class="Operator">=</span> <span class="String"><span class="String">'</span><span class="String">Silver</span><span class="String">'</span></span>; <span class="LineComment"><span class="LineComment">//</span> You can check if field is set</span> <span class="Keyword">if</span> (<span class="Operator">!</span><span class="CommandMethod">isset</span>(<span class="Variable"><span class="Variable">$</span>user</span><span class="Operator">-&gt;</span><span class="Variable">nick</span>)) { <span class="LineComment"><span class="LineComment">//</span> You can set several fields at a time</span> <span class="Variable"><span class="Variable">$</span>user</span><span class="Operator">-&gt;</span>set(<span class="CommandMethod">array</span>(<span class="String"><span class="String">'</span><span class="String">nick</span><span class="String">'</span></span> <span class="Operator">=&gt;</span> <span class="String"><span class="String">'</span><span class="String">Josi</span><span class="String">'</span></span>, <span class="String"><span class="String">'</span><span class="String">confirmed</span><span class="String">'</span></span> <span class="Operator">=&gt;</span> <span class="Number">1</span>, <span class="String"><span class="String">'</span><span class="String">viewed</span><span class="String">'</span></span> <span class="Operator">=&gt;</span> <span class="Number">3</span>)); } <span class="LineComment"><span class="LineComment">//</span> You can remove fields</span> <span class="CommandMethod">unset</span>(<span class="Variable"><span class="Variable">$</span>user</span><span class="Operator">-&gt;</span><span class="Variable">confirmed</span>); <span class="LineComment"><span class="LineComment">//</span> You can get fields count</span> <span class="CommandMethod">count</span>(<span class="Variable"><span class="Variable">$</span>user</span>); <span class="LineComment"><span class="LineComment">//</span> You can increment field's value</span> <span class="Variable"><span class="Variable">$</span>user</span><span class="Operator">-&gt;</span>increment(<span class="String"><span class="String">'</span><span class="String">viewed</span><span class="String">'</span></span>); <span class="LineComment"><span class="LineComment">//</span> You can iterate fields</span> <span class="Keyword">foreach</span>(<span class="Variable"><span class="Variable">$</span>user</span> <span class="Operator">as</span> <span class="Variable"><span class="Variable">$</span>field</span> <span class="Operator">=&gt;</span> <span class="Variable"><span class="Variable">$</span>value</span>) { <span class="CommandMethod">print</span> <span class="String"><span class="String">&quot;</span><span class="String"><span class="Variable"><span class="Variable">$</span>field</span> =&gt; <span class="Variable"><span class="Variable">$</span>value</span></span><span class="String">&quot;</span></span>; } <span class="LineComment"><span class="LineComment">//</span> You can create models extending Rediska_Key_Hash</span> <span class="Storage">class</span> <span class="TypeName">User</span> <span class="Storage">extends</span> <span class="InheritedClass">Rediska_Key_Hash</span> { <span class="Storage">public </span><span class="Storage">function</span> <span class="CommandMethod">__construct</span>(<span class="Variable"><span class="Variable">$</span>id</span>) { <span class="Storage">parent</span><span class="Operator">::</span>__construct(<span class="String"><span class="String">&quot;</span><span class="String">users:<span class="Variable"><span class="Variable">$</span>id</span></span><span class="String">&quot;</span></span>); } <span class="Storage">public </span><span class="Storage">function</span> <span class="FunctionName">isAdmin</span>() { <span class="Keyword">return</span> <span class="Variable"><span class="Variable">$</span>this</span><span class="Operator">-&gt;</span><span class="Variable">role</span> <span class="Operator">==</span> <span class="String"><span class="String">'</span><span class="String">admin</span><span class="String">'</span></span>; } } <span class="Variable"><span class="Variable">$</span>user</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">User</span>(<span class="Number">1</span>); <span class="Keyword">if</span> (<span class="Variable"><span class="Variable">$</span>user</span><span class="Operator">-&gt;</span>isAdmin()) { <span class="CommandMethod">print</span> <span class="String"><span class="String">'</span><span class="String">Welcome </span><span class="String">'</span></span> <span class="Operator">.</span> <span class="Variable"><span class="Variable">$</span>user</span><span class="Operator">-&gt;</span><span class="Variable">login</span>; } ?&gt; </pre> <p>Rediska Hash commands:</p> <ul> <li><span class="pre">Rediska#setToHash($name, $fieldOrData, $value = null, $overwrite = true)</span></li> <li><span class="pre">Rediska#getFromHash($name, $fieldOrFields)</span></li> <li><span class="pre">Rediska#incrementInHash($name, $field, $amount = 1)</span></li> <li><span class="pre">Rediska#existsInHash($name, $field)</span></li> <li><span class="pre">Rediska#deleteFromHash($name, $field)</span></li> <li><span class="pre">Rediska#getHashLength($name)</span></li> <li><span class="pre">Rediska#getHash($name)</span></li> <li><span class="pre">Rediska#getHashFields()</span></li> <li><span class="pre">Rediska#getHashValues()</span></li> </ul> Mon, 02 Aug 2010 15:27:33 +0000 /news/2010-08-02-hashes-implemented /news/2010-08-02-hashes-implemented Publish/Subscribe implemented! <p>Today with Yuri Bogdanov I pushed to <a href="http://github.com/Shumkov/Rediska">github</a> <a href="http://code.google.com/p/redis/wiki/PublishSubscribe">Publish/Subscribe</a> implementation.</p> <p>Some usage examples:</p> <pre class="active4d">&lt;?php <span class="LineComment"><span class="LineComment">//</span> Subscribe to channel</span> <span class="Variable"><span class="Variable">$</span>rediska</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska</span>(); <span class="Variable"><span class="Variable">$</span>channel</span> <span class="Operator">=</span> <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>subscribe(<span class="String"><span class="String">'</span><span class="String">channel</span><span class="String">'</span></span>); <span class="LineComment"><span class="LineComment">//</span> Gets messages in an endless loop</span> <span class="Keyword">foreach</span>(<span class="Variable"><span class="Variable">$</span>channel</span> <span class="Operator">as</span> <span class="Variable"><span class="Variable">$</span>message</span>) { <span class="CommandMethod">print</span> <span class="Variable"><span class="Variable">$</span>message</span>; <span class="LineComment"><span class="LineComment">//</span> Exit from loop if needed</span> <span class="Keyword">if</span> (<span class="Variable"><span class="Variable">$</span>message</span> <span class="Operator">==</span> <span class="String"><span class="String">'</span><span class="String">exit</span><span class="String">'</span></span>) { <span class="Keyword">break</span>; } } <span class="LineComment"><span class="LineComment">//</span> Subscribe to few channels with timeout</span> <span class="Variable"><span class="Variable">$</span>channels</span> <span class="Operator">=</span> <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>subscribe(<span class="CommandMethod">array</span>(<span class="String"><span class="String">'</span><span class="String">channel</span><span class="String">'</span></span>, <span class="String"><span class="String">'</span><span class="String">channel2</span><span class="String">'</span></span>), <span class="Number">60</span>); <span class="LineComment"><span class="LineComment">//</span> Gets messages for 1 minute and leaves the loop</span> <span class="Keyword">foreach</span>(<span class="Variable"><span class="Variable">$</span>channels</span> <span class="Operator">as</span> <span class="Variable"><span class="Variable">$</span>channel</span> <span class="Operator">=&gt;</span> <span class="Variable"><span class="Variable">$</span>message</span>) { <span class="CommandMethod">print</span> <span class="String"><span class="String">&quot;</span><span class="String"><span class="Variable"><span class="Variable">$</span>channel</span>: <span class="Variable"><span class="Variable">$</span>message</span></span><span class="String">&quot;</span></span>; <span class="LineComment"><span class="LineComment">//</span> Unsubscribe from channels if needed</span> <span class="Keyword">if</span> (<span class="Variable"><span class="Variable">$</span>message</span> <span class="Operator">==</span> <span class="String"><span class="String">'</span><span class="String">unsubscribe</span><span class="String">'</span></span>) { <span class="Variable"><span class="Variable">$</span>channels</span><span class="Operator">-&gt;</span>unsubscribe(<span class="String"><span class="String">'</span><span class="String">channel2</span><span class="String">'</span></span>); } <span class="LineComment"><span class="LineComment">//</span> Subscribe to channel if needed</span> <span class="Keyword">if</span> (<span class="Variable"><span class="Variable">$</span>message</span> <span class="Operator">==</span> <span class="String"><span class="String">'</span><span class="String">subscribe</span><span class="String">'</span></span>) { <span class="Variable"><span class="Variable">$</span>channels</span><span class="Operator">-&gt;</span>subscribe(<span class="String"><span class="String">'</span><span class="String">channel3</span><span class="String">'</span></span>); } } <span class="LineComment"><span class="LineComment">//</span> Another way to subscribe to channel</span> <span class="Variable"><span class="Variable">$</span>channel</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska_PubSub_Channel</span>(<span class="String"><span class="String">'</span><span class="String">channel</span><span class="String">'</span></span>); <span class="Keyword">foreach</span>(<span class="Variable"><span class="Variable">$</span>channel</span> <span class="Operator">as</span> <span class="Variable"><span class="Variable">$</span>message</span>) { <span class="CommandMethod">print</span> <span class="Variable"><span class="Variable">$</span>message</span>; } <span class="LineComment"><span class="LineComment">//</span> Publish to channel</span> <span class="Variable"><span class="Variable">$</span>channel</span>[] <span class="Operator">=</span> <span class="String"><span class="String">'</span><span class="String">message</span><span class="String">'</span></span>; <span class="LineComment"><span class="LineComment">//</span> Other way to publish</span> <span class="Variable"><span class="Variable">$</span>rediska</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska</span>(); <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>publish(<span class="String"><span class="String">'</span><span class="String">channel</span><span class="String">'</span></span>, <span class="String"><span class="String">'</span><span class="String">message</span><span class="String">'</span></span>); <span class="LineComment"><span class="LineComment">//</span> Or publish to few channels</span> <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>publish(<span class="CommandMethod">array</span>(<span class="String"><span class="String">'</span><span class="String">channel</span><span class="String">'</span></span>, <span class="String"><span class="String">'</span><span class="String">channel2</span><span class="String">'</span></span>), <span class="String"><span class="String">'</span><span class="String">message</span><span class="String">'</span></span>); <span class="LineComment"><span class="LineComment">//</span> Extend channel for you own model</span> <span class="Storage">class</span> <span class="TypeName">Chat</span> <span class="Storage">extends</span> <span class="InheritedClass">Rediska_PubSub_Channel</span> { <span class="Storage">public </span><span class="Storage">function</span> <span class="CommandMethod">__construct</span>() { <span class="Storage">parent</span><span class="Operator">::</span>__construct(<span class="String"><span class="String">'</span><span class="String">chat</span><span class="String">'</span></span>); } <span class="Storage">public </span><span class="Storage">function</span> <span class="FunctionName">say</span>(<span class="Variable"><span class="Variable">$</span>nick</span>, <span class="Variable"><span class="Variable">$</span>message</span>) { <span class="Variable"><span class="Variable">$</span>this</span><span class="Operator">-&gt;</span>publish(<span class="CommandMethod">array</span>(<span class="Variable"><span class="Variable">$</span>nick</span>, <span class="Variable"><span class="Variable">$</span>message</span>)); } } <span class="LineComment"><span class="LineComment">//</span> Read messages</span> <span class="Variable"><span class="Variable">$</span>chat</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Chat</span>(); <span class="Keyword">foreach</span>(<span class="Variable"><span class="Variable">$</span>chat</span> <span class="Operator">as</span> <span class="Variable"><span class="Variable">$</span>nickAndMessage</span>) { <span class="CommandMethod">list</span>(<span class="Variable"><span class="Variable">$</span>nick</span>, <span class="Variable"><span class="Variable">$</span>message</span>) <span class="Operator">=</span> <span class="Variable"><span class="Variable">$</span>nickAndMessage</span>; <span class="CommandMethod">print</span> <span class="String"><span class="String">&quot;</span><span class="String"><span class="Variable"><span class="Variable">$</span>nick</span> say: <span class="Variable"><span class="Variable">$</span>message</span></span><span class="String">&quot;</span></span>; } <span class="LineComment"><span class="LineComment">//</span> Write messages</span> <span class="Variable"><span class="Variable">$</span>chat</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Chat</span>(); <span class="Variable"><span class="Variable">$</span>chat</span><span class="Operator">-&gt;</span>say(<span class="String"><span class="String">'</span><span class="String">John</span><span class="String">'</span></span>, <span class="String"><span class="String">'</span><span class="String">Hello!</span><span class="String">'</span></span>); ?&gt; </pre> Tue, 27 Jul 2010 15:25:45 +0000 /news/2010-07-27-publish-subscribe-implemented /news/2010-07-27-publish-subscribe-implemented Blocking list pop and shift commands <p>I've just pushed two new Rediska commands to <a href="http://github.com/Shumkov/Rediska/">github</a>: <span class="pre">popFromListBlocking($timeout = 0)</span> and <span class="pre">shiftFromListBlocking($timeout = 0)</span> implementing <span class="pre"><a href="http://code.google.com/p/redis/wiki/BlpopCommand">BLPOP</a></span> and <span class="pre"><a href="http://code.google.com/p/redis/wiki/BlpopCommand">BRPOP</a></span> Redis commands.</p> Wed, 21 Jul 2010 10:26:59 +0000 /news/2010-07-21-blocking-list-pop-and-shift-commands /news/2010-07-21-blocking-list-pop-and-shift-commands Refactoring Rediska commands <p>Dear friends, I refactored Rediska commands and pushed to <a href="http://github.com/shumkov/rediska">github</a>, namely <span class="pre">Rediska_Command_Abstarct</span> class. If you inherit your own commands from it, please pay attention.</p> Mon, 19 Jul 2010 15:42:35 +0000 /news/2010-07-19-refactoring-rediska-commands /news/2010-07-19-refactoring-rediska-commands Rediska transactions <p>Few minutes ago i'm pushed to <a href="http://github.com/Shumkov/Rediska">github</a> new feature - transactions.</p> <p>It's very useful implementaton of <span class="pre"><a href="http://code.google.com/p/redis/wiki/MultiExecCommand">MULTI/EXEC</a></span> Redis command:</p> <pre class="active4d">&lt;?php <span class="Variable"><span class="Variable">$</span>rediska</span> <span class="Operator">=</span> <span class="Keyword">new</span> <span class="LibraryClassType">Rediska</span>(); <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>transaction()<span class="Operator">-&gt;</span>set(<span class="String"><span class="String">'</span><span class="String">a</span><span class="String">'</span></span>, <span class="Number">1</span>) <span class="Operator">-&gt;</span>get(<span class="String"><span class="String">'</span><span class="String">a</span><span class="String">'</span></span>, <span class="Number">1</span>) <span class="Operator">-&gt;</span>delete(<span class="String"><span class="String">'</span><span class="String">a</span><span class="String">'</span></span>) <span class="Operator">-&gt;</span>execute(); <span class="LineComment"><span class="LineComment">//</span> or</span> <span class="Variable"><span class="Variable">$</span>transaction</span> <span class="Operator">=</span> <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>transaction(); <span class="Variable"><span class="Variable">$</span>transaction</span><span class="Operator">-&gt;</span>set(<span class="String"><span class="String">'</span><span class="String">a</span><span class="String">'</span></span>, <span class="Number">1</span>); <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>get(<span class="String"><span class="String">'</span><span class="String">a</span><span class="String">'</span></span>) <span class="LineComment"><span class="LineComment">//</span> #=&gt; null</span> <span class="Variable"><span class="Variable">$</span>transaction</span><span class="Operator">-&gt;</span>get(<span class="String"><span class="String">'</span><span class="String">a</span><span class="String">'</span></span>, <span class="Number">1</span>); <span class="Variable"><span class="Variable">$</span>transaction</span><span class="Operator">-&gt;</span>delete(<span class="String"><span class="String">'</span><span class="String">a</span><span class="String">'</span></span>, <span class="Number">1</span>); <span class="Variable"><span class="Variable">$</span>transaction</span><span class="Operator">-&gt;</span>set(<span class="String"><span class="String">'</span><span class="String">b</span><span class="String">'</span></span>, <span class="Number">2</span>); <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>get(<span class="String"><span class="String">'</span><span class="String">b</span><span class="String">'</span></span>) <span class="LineComment"><span class="LineComment">//</span> #=&gt; null</span> <span class="Variable"><span class="Variable">$</span>transaction</span><span class="Operator">-&gt;</span>execute(); <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>get(<span class="String"><span class="String">'</span><span class="String">b</span><span class="String">'</span></span>) <span class="LineComment"><span class="LineComment">//</span> #=&gt; 2</span> <span class="LineComment"><span class="LineComment">//</span> You may discard transaction</span> <span class="Variable"><span class="Variable">$</span>transaction</span> <span class="Operator">=</span> <span class="Variable"><span class="Variable">$</span>rediska</span><span class="Operator">-&gt;</span>transaction(); <span class="Variable"><span class="Variable">$</span>transaction</span><span class="Operator">-&gt;</span>set(<span class="String"><span class="String">'</span><span class="String">a</span><span class="String">'</span></span>, <span class="Number">1</span>) <span class="Operator">-&gt;</span>get(<span class="String"><span class="String">'</span><span class="String">a</span><span class="String">'</span></span>, <span class="Number">1</span>); <span class="Operator">-&gt;</span>delete(<span class="String"><span class="String">'</span><span class="String">a</span><span class="String">'</span></span>, <span class="Number">1</span>); <span class="Keyword">if</span> (<span class="BlockComment"><span class="BlockComment">/*</span> something wrong <span class="BlockComment">*/</span></span>) { <span class="Variable"><span class="Variable">$</span>transaction</span><span class="Operator">-&gt;</span>discard(); } ?&gt; </pre> <p>Oh! Important feature of transactions - all commands executed as one atomic operation!</p> Thu, 15 Jul 2010 22:47:23 +0000 /news/2010-07-15-rediska-transactions /news/2010-07-15-rediska-transactions New serializer and autoloader <p>We have some changes on <a href="http://github.com/shumkov/rediska">github</a> for you:</p> <ul> <li>Rediska now serialized only objects and arrays. Strings stored as is.</li> <li>Serializer now works with adapters. For define adapter use <span class="pre">serializerAdapter</span> option. In a box we have three adapters: <ul> <li><span class="pre">phpSerializer</span></li> <li><span class="pre">json</span></li> <li><span class="pre">toString</span></li> </ul> Or you personal adapter class which implements <span class="pre">Rediska_Serializer_Adapter_Interface</span>). </li> <li>Rediska now use autoloader and can't required <span class="pre">include_path</span></li> </ul> Tue, 13 Jul 2010 16:50:22 +0000 /news/2010-07-13-new-serializer-and-autoloader /news/2010-07-13-new-serializer-and-autoloader Release Rediska 0.4.2 <p>We felt uncomfortable about Rediska not supporting commands of unstable Redis versions. This release is devoted exactly to such commands.</p> <p>Here's what's new so far:</p> <ul> <li><a href="/documentation/configuration/redis-version">Added Redis server version specification</a></li> <li>Implemented <span class="pre">ZRANK</span> and <span class="pre">ZREVRANK</span> <li>Implemented <span class="pre">WITHSCORES</span> argument for <span class="pre">ZRANGEBYSCORE</span></li> <li>Implemented <span class="pre">ZREMRANGEBYRANK</span></li> <li>Implemented <span class="pre">ZUNION</span> and <span class="pre">ZINTER</span> <li>Implemented <span class="pre">SORT</span> command as standalone</li> <li>Deprecated sorting attributes in <span class="pre">GetList</span> and <span class="pre">GetSet</span></li> <li>Refactored configuration of test suite (now requires Zend Framework)</li> <li>Limit and offset broke negative range selects (arguments changed for <span class="pre">getList</span>, <span class="pre">getSortedSet</span>, <span class="pre">truncateList</span>, <span class="pre">getFromSortedSetByScore</span>)</li> <li>If sessions set is empty trown exception</li> <li>Null lifetime not supported in cache backend</li> </ul> <p>Coming soon:</p> <ul> <li>Hash commands and <span class="pre">Rediska_Key_Hash</span> wrapper</li> <li>Implementation <span class="pre">MULTI</span>, <span class="pre">EXEC</span> and <span class="pre">DISCARD</span> commands</li> <li>Implement <span class="pre">SUBSCRIBE</span>, <span class="pre">UNSUBSCRIBE</span>, <span class="pre">PUBLISH</span>, <span class="pre">PUNSUBSCRIBE</span> and <span class="pre">PSUBSCRIBE</span></li> <li><a href="http://codeigniter.com/">CodeIgniter</a> framework integration</li> </ul> Wed, 21 Apr 2010 15:14:00 +0000 /news/2010-04-21-release-rediska-0-4-2 /news/2010-04-21-release-rediska-0-4-2 Release Rediska 0.4.0 <p>Good news every one! We worked hard and made this world better!</p> <p>Long story short, heres what we have done:</p> <ul> <li><a href="http://rediska.geometria-lab.net/documentation/examples/retwitter">ReTwitter</a> (demo application) - small twitter clone based on Zend Framework and Rediska</li> <li><a href="http://rediska.geometria-lab.net/documentation/get-started">Rediska PEAR package</a></li> <li><a href="http://rediska.geometria-lab.net/documentation/integration-with-frameworks/symfony">Symfony integration</a></li> <li>Optimized consistent hashing performance (more then 10 times faster!). Thanks to Kijin Sung.</li> <li>Implemented commands: <span class="pre">BGREWRITEAOF</span>, <span class="pre">ZINCRBY</span>, <span class="pre">ZREMRANGEBYSCORE</span>, <span class="pre">SLAVEOF</span>, <span class="pre">EXPIREAT</span></li> <li>Added <span class="pre">WITHSCORES</span> argument supprt to <span class="pre">ZRANGE</span></li> <li>Added timeout for connections</li> <li>Optimized <span class="pre">fromArray</span> method for <span class="pre">Rediska_Key_List</span>, <span class="pre">Rediska_Key_Set</span>, <span class="pre">Rediska_Key_SortedSet</span></li> <li>New test suite</li> <li>Throw exceptions if empty arguments</li> <li>Throw exception if connection not found</li> <li><span class="pre">on</span> method now recieve <span class="pre">Rediska_Connection</span></li> <li>Specify connection alias for key objects, so you can explicitly set where this key should be saved</li> <li>Added <span class="pre">getScoreFromSortedSet</span> method to <span class="pre">Rediska_Key_SortedSet</span></li> <li>Refactored <span class="pre">Rediska_Connection</span></li> <li>Fixed <span class="pre">QUIT</span> bug.</li> <li>Zend Session save handler thrown exception on Rediska options</li> <li>Add README and CHANGELOG</li> </ul> <p>Well that's what we've got for this release so far, the weekend is here and we're moving to the bar :)</p> Fri, 02 Apr 2010 15:19:50 +0000 /news/2010-04-02-release-rediska-0-4-0 /news/2010-04-02-release-rediska-0-4-0 &quot;Redis PHP Introduction&quot; by Kevin van Zonneveld Kevin wrote a <a href="http://kevin.vanzonneveld.net/techblog/article/redis_in_php/">nice article</a> about Redis and Rediska friendship. Fri, 02 Apr 2010 07:19:03 +0000 /news/2010-04-02-redis-php-introduction-by-kevin-van-zonneveld /news/2010-04-02-redis-php-introduction-by-kevin-van-zonneveld Moved to GitHub Rediska moved to <a href="http://github.com/shumkov/rediska">github</a>. Tue, 09 Mar 2010 15:38:33 +0000 /news/2010-03-09-moved-to-github /news/2010-03-09-moved-to-github Rediska overview on highload.com.ua <p>Rediska <a href="http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/">overview</a> on russian at <a href="http://highload.com.ua/">highload.com.ua</a>.</p> Fri, 29 Jan 2010 15:24:33 +0000 /news/2010-01-29-rediska-overview-on-highload-com-ua /news/2010-01-29-rediska-overview-on-highload-com-ua Great Rediska 0.3.0 release <p>Congratulations! Rediska 0.3.0 is out:</p> <ul> <li>Full support Redis 1.2.0 API</li> <li><a href="/documentation/usage/pipelining">Pipelining</li> <li><a href="/documentation/usage/specify-server-for-command">Operate</a> with keys on specified (by alias) server</li> <li>Specify DB index in server config</li> <li>Easy <a href="/documentation/usage/extending-rediska">extending</a> Rediska by adding you own or overwrite standart commands</li> <li>Lazy loading</li> <li>Full <a href="/documentation">documentation</a></li> <li>Bug fixes and more</li> </ul> <p>Soon:</p> <ul> <li><a href="http://www.symfony-project.org/">Symfony</a> framework integration</li> <li><a href="http://www.audioscrobbler.net/development/ketama/">Ketama</a> support</li> <li>Benchmarks and performance optimization</li> <li>Example application</li> </ul> <p><strong><a href="/download/Rediska-0-3-0.zip">Download Now!</a></strong></p> Fri, 22 Jan 2010 19:11:03 +0000 /news/2010-01-22-great-rediska-0-3-0-release /news/2010-01-22-great-rediska-0-3-0-release Release Rediska 0.2.2 <p>Good news! Rediska is now under <a href="http://www.opensource.org/licenses/bsd-license.php">New BSD</a> license!</p> Fri, 27 Nov 2009 15:46:46 +0000 /news/2009-11-27-release-rediska-0-2-2 /news/2009-11-27-release-rediska-0-2-2 Release Rediska 0.2.1 <p>First public beta release of Rediska (radish on russian) - open source PHP client for key-value database <a href="http://code.google.com/p/redis/">Redis</a>.</p> <h3>Main features</h3> <ul> <li>Multiple servers support</li> <li>Consistent hashing, crc32 or you personal algorythm for key distribution</li> <li>Working with keys as objects</li> <li>Use Lists and Sets as native PHP arrays</li> <li>Full <a href="http://framework.zend.com/">Zend Framework</a> integration</li> </ul> <h3>Coming soon</h3> <ul> <li>Integration with others frameworks</li> <li>Expire keys by tags</li> <li>Server aliases and working with keys on servers specified by alias</li> <li><a href="http://www.audioscrobbler.net/development/ketama/">Ketama</a> (fast C library for key distribution) support </li> <li>More documentation</li> </ul> <p><strong><a href="http://rediska.geometria-lab.net/documentation/get-started">Get started!</a></strong></p> Wed, 25 Nov 2009 15:46:46 +0000 /news/2009-11-25-release-rediska-0-2-1 /news/2009-11-25-release-rediska-0-2-1