Full Code of alphazero/jredis for AI

master 98b4c73701b8 cached
241 files
1.2 MB
318.9k tokens
2018 symbols
1 requests
Download .txt
Showing preview only (1,323K chars total). Download the full file or copy to clipboard to get everything.
Repository: alphazero/jredis
Branch: master
Commit: 98b4c73701b8
Files: 241
Total size: 1.2 MB

Directory structure:
gitextract_s0bg69rx/

├── .gitignore
├── DEV-NOTES.txt
├── LICENSE
├── NOTICE
├── README
├── RELEASE-NOTES.txt
├── Release/
│   ├── RELEASE-NOTES-Update-03122010.txt
│   ├── RELEASE-NOTES-Update-08132009.txt
│   ├── RELEASE-NOTES-Update-11082009.txt
│   ├── RELEASE_BUILD_TIME
│   ├── jredis-core-all-a.0-SNAPSHOT-jar-with-dependencies.jar
│   ├── jredis-core-all-a.0-SNAPSHOT-sources.jar
│   ├── jredis-core-all-a.0-SNAPSHOT.jar
│   ├── jredis-core-api-a.0-SNAPSHOT-sources.jar
│   ├── jredis-core-api-a.0-SNAPSHOT.jar
│   ├── jredis-core-bench-a.0-SNAPSHOT-jar-with-dependencies.jar
│   ├── jredis-core-bench-a.0-SNAPSHOT-sources.jar
│   ├── jredis-core-bench-a.0-SNAPSHOT.jar
│   ├── jredis-core-ri-a.0-SNAPSHOT-jar-with-dependencies.jar
│   ├── jredis-core-ri-a.0-SNAPSHOT-sources.jar
│   ├── jredis-core-ri-a.0-SNAPSHOT.jar
│   ├── jredis-examples-a.0-SNAPSHOT-jar-with-dependencies.jar
│   ├── jredis-examples-a.0-SNAPSHOT-sources.jar
│   └── jredis-examples-a.0-SNAPSHOT.jar
├── core/
│   ├── LICENSE
│   ├── NOTICE
│   ├── README
│   ├── all/
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   └── pom.xml
│   ├── api/
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── org/
│   │       │   │       └── jredis/
│   │       │   │           ├── ClientRuntimeException.java
│   │       │   │           ├── Codec.java
│   │       │   │           ├── Event.java
│   │       │   │           ├── JRedis.java
│   │       │   │           ├── JRedisFuture.java
│   │       │   │           ├── KeyValueSet.java
│   │       │   │           ├── NotSupportedException.java
│   │       │   │           ├── ObjectEncoding.java
│   │       │   │           ├── ObjectInfo.java
│   │       │   │           ├── ProviderException.java
│   │       │   │           ├── Query.java
│   │       │   │           ├── Redis.java
│   │       │   │           ├── RedisException.java
│   │       │   │           ├── RedisInfo.java
│   │       │   │           ├── RedisType.java
│   │       │   │           ├── Semantics.java
│   │       │   │           ├── Sort.java
│   │       │   │           ├── ZSetEntry.java
│   │       │   │           ├── _specification.java
│   │       │   │           ├── connector/
│   │       │   │           │   ├── Connection.java
│   │       │   │           │   ├── ConnectionException.java
│   │       │   │           │   ├── ConnectionFault.java
│   │       │   │           │   ├── ConnectionReset.java
│   │       │   │           │   ├── ConnectionSpec.java
│   │       │   │           │   ├── FaultedConnection.java
│   │       │   │           │   ├── Message.java
│   │       │   │           │   ├── NotConnectedException.java
│   │       │   │           │   ├── RequestListener.java
│   │       │   │           │   └── package-info.java
│   │       │   │           ├── package-info.java
│   │       │   │           ├── protocol/
│   │       │   │           │   ├── BulkResponse.java
│   │       │   │           │   ├── Command.java
│   │       │   │           │   ├── CommandNotImplemented.java
│   │       │   │           │   ├── MultiBulkResponse.java
│   │       │   │           │   ├── Protocol.java
│   │       │   │           │   ├── Request.java
│   │       │   │           │   ├── Response.java
│   │       │   │           │   ├── ResponseStatus.java
│   │       │   │           │   ├── StatusResponse.java
│   │       │   │           │   ├── ValueResponse.java
│   │       │   │           │   └── package-info.java
│   │       │   │           ├── resource/
│   │       │   │           │   ├── Context.java
│   │       │   │           │   ├── Resource.java
│   │       │   │           │   ├── ResourceException.java
│   │       │   │           │   ├── _specification.java
│   │       │   │           │   └── package-info.java
│   │       │   │           └── semantics/
│   │       │   │               ├── BasicCodecManager.java
│   │       │   │               ├── CodecManager.java
│   │       │   │               ├── KeyCodec.java
│   │       │   │               ├── SemanticJRedis.java
│   │       │   │               ├── SemanticQuery.java
│   │       │   │               ├── SemanticSort.java
│   │       │   │               ├── Semantics.java
│   │       │   │               └── package-info.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── redis-commands-2.4.n.txt
│   │       └── test/
│   │           ├── java/
│   │           │   └── org/
│   │           │       └── jredis/
│   │           │           ├── TestBase.java
│   │           │           ├── compliance/
│   │           │           │   └── CheckRedisCompliance.java
│   │           │           ├── connector/
│   │           │           │   └── TestSpecElements.java
│   │           │           └── protocol/
│   │           │               └── TestCommand.java
│   │           └── resources/
│   │               └── log4j.properties
│   ├── bench/
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── org/
│   │           │       └── jredis/
│   │           │           ├── bench/
│   │           │           │   ├── JRedisBenchmark.java
│   │           │           │   ├── JRedisJProfileSubject.java
│   │           │           │   └── Util.java
│   │           │           └── ri/
│   │           │               └── alphazero/
│   │           │                   └── bench/
│   │           │                       ├── JRedisClientBenchmark.java
│   │           │                       ├── JRedisClientJProfileSubject.java
│   │           │                       ├── JRedisPipelineServiceBenchmark.java
│   │           │                       ├── JRedisServiceBenchmark.java
│   │           │                       ├── SimpleBenchJRedisAsync.java
│   │           │                       ├── SimpleBenchJRedisChunkedPipeline.java
│   │           │                       ├── SimpleBenchJRedisClient.java
│   │           │                       └── SimpleBenchJRedisPipeline.java
│   │           └── resources/
│   │               └── log4j.properties
│   ├── pom.xml
│   └── ri/
│       ├── LICENSE
│       ├── NOTICE
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   └── java/
│           │       └── org/
│           │           └── jredis/
│           │               └── ri/
│           │                   ├── RI.java
│           │                   ├── alphazero/
│           │                   │   ├── BulkSetMapping.java
│           │                   │   ├── JRedisAsyncClient.java
│           │                   │   ├── JRedisChunkedPipeline.java
│           │                   │   ├── JRedisClient.java
│           │                   │   ├── JRedisFutureSupport.java
│           │                   │   ├── JRedisPipeline.java
│           │                   │   ├── JRedisPipelineService.java
│           │                   │   ├── JRedisService.java
│           │                   │   ├── JRedisSupport.java
│           │                   │   ├── Pair.java
│           │                   │   ├── RedisVersion.java
│           │                   │   ├── SyncJRedisBase.java
│           │                   │   ├── ZSetEntryImpl.java
│           │                   │   ├── _specification.java
│           │                   │   ├── connection/
│           │                   │   │   ├── AsyncConnection.java
│           │                   │   │   ├── AsyncPipelineConnection.java
│           │                   │   │   ├── ChunkedPipelineConnection.java
│           │                   │   │   ├── ConnectionBase.java
│           │                   │   │   ├── DefaultConnectionFactory.java
│           │                   │   │   ├── DefaultConnectionSpec.java
│           │                   │   │   ├── HeartbeatJinn.java
│           │                   │   │   ├── PendingRequest.java
│           │                   │   │   ├── PipelineConnectionBase.java
│           │                   │   │   ├── SyncConnection.java
│           │                   │   │   ├── SyncPipelineConnection.java
│           │                   │   │   └── UnexpectedEOFException.java
│           │                   │   ├── package-info.java
│           │                   │   ├── protocol/
│           │                   │   │   ├── ConcurrentSyncProtocol.java
│           │                   │   │   ├── DefaultProtocolFactory.java
│           │                   │   │   ├── ProtocolBase.java
│           │                   │   │   ├── ResponseSupport.java
│           │                   │   │   ├── SyncProtocol.java
│           │                   │   │   └── VirtualResponse.java
│           │                   │   ├── semantics/
│           │                   │   │   ├── DefaultKeyCodec.java
│           │                   │   │   ├── DefaultStringCodec.java
│           │                   │   │   └── GZipCompressedStringCodec.java
│           │                   │   └── support/
│           │                   │       ├── Assert.java
│           │                   │       ├── Convert.java
│           │                   │       ├── DefaultCodec.java
│           │                   │       ├── FastBufferedInputStream.java
│           │                   │       ├── GZip.java
│           │                   │       ├── Log.java
│           │                   │       ├── Signal.java
│           │                   │       ├── SortSupport.java
│           │                   │       └── package-info.java
│           │                   └── package-info.java
│           └── test/
│               ├── java/
│               │   └── org/
│               │       └── jredis/
│               │           └── ri/
│               │               ├── JRedisTestSuiteBase.java
│               │               ├── ProviderTestBase.java
│               │               ├── adhoc/
│               │               │   ├── AdHocTestChunkPipeline.java
│               │               │   ├── AdHocTestInfo.java
│               │               │   └── AdHocTestNoConnection.java
│               │               └── alphazero/
│               │                   ├── ConcurrentJRedisProviderTestsBase.java
│               │                   ├── JRedisAsyncClientTest.java
│               │                   ├── JRedisChunkedPipelineClientTest.java
│               │                   ├── JRedisClientTest.java
│               │                   ├── JRedisFutureProviderTestsBase.java
│               │                   ├── JRedisPipelineServiceTest.java
│               │                   ├── JRedisPipelineTest.java
│               │                   ├── JRedisProviderTestsBase.java
│               │                   ├── JRedisServiceTest.java
│               │                   └── support/
│               │                       ├── ConvertTest.java
│               │                       └── GZipTest.java
│               └── resources/
│                   └── log4j.properties
├── documentation/
│   ├── LICENSE
│   ├── NOTICE
│   └── design/
│       └── notes/
│           └── api/
│               └── jredis-api.txt
├── examples/
│   ├── LICENSE
│   ├── NOTICE
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── org/
│           │       └── jredis/
│           │           └── examples/
│           │               ├── HelloAgain.java
│           │               ├── PipelineInAction.java
│           │               ├── UsingConnectionSpec.java
│           │               ├── UsingJRedisFuture.java
│           │               ├── UsingJRedisPipeline.java
│           │               ├── UsingJRedisPipelineService.java
│           │               ├── UsingJRedisService.java
│           │               └── commands/
│           │                   ├── UsingBulkCommands.java
│           │                   ├── UsingZrangeSubset.java
│           │                   └── package-info.java
│           └── resources/
│               └── log4j.properties
├── extensions/
│   ├── 3rd party Licenses/
│   │   ├── NET.SPY.MEMCACHED LICENSE
│   │   └── NET.SPY.MEMCACHED NOTICE
│   ├── LICENSE
│   ├── NOTICE
│   ├── README.markdown
│   ├── api/
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── README.markdown
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── org/
│   │                   └── jredis/
│   │                       └── cluster/
│   │                           ├── ClusterModel.java
│   │                           ├── ClusterNodeSpec.java
│   │                           ├── ClusterSpec.java
│   │                           ├── ClusterType.java
│   │                           ├── connector/
│   │                           │   └── ClusterConnection.java
│   │                           ├── model/
│   │                           │   ├── ConsistentHashCluster.java
│   │                           │   └── StaticHashCluster.java
│   │                           └── support/
│   │                               └── HashAlgorithm.java
│   ├── pom.xml
│   └── ri/
│       ├── LICENSE
│       ├── NOTICE
│       ├── README.markdown
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   └── java/
│           │       └── org/
│           │           └── jredis/
│           │               └── ri/
│           │                   └── cluster/
│           │                       ├── DefaultClusterNodeSpec.java
│           │                       ├── DefaultClusterSpec.java
│           │                       ├── connection/
│           │                       │   ├── ClusterConnectionBase.java
│           │                       │   └── SynchClusterConnection.java
│           │                       ├── model/
│           │                       │   ├── BasicStaticHashCluster.java
│           │                       │   ├── KetamaClusterModel.java
│           │                       │   └── KetamaHashProvider.java
│           │                       └── support/
│           │                           └── CryptoHashUtils.java
│           └── test/
│               └── java/
│                   └── org/
│                       └── jredis/
│                           ├── cluster/
│                           │   ├── ClusterModelProviderTestBase.java
│                           │   ├── ClusterNodeSpecProviderTestBase.java
│                           │   ├── ClusterSpecProviderTestBase.java
│                           │   ├── ClusterSuiteTestData.java
│                           │   ├── ProviderTestBase.java
│                           │   ├── RefImplTestSuiteBase.java
│                           │   ├── models/
│                           │   │   ├── BasicStaticHashClusterTest.java
│                           │   │   ├── ConsistentHashClusterProviderTestBase.java
│                           │   │   ├── KetamaClusterModelTest.java
│                           │   │   ├── KetamaHashAlgoTest.java
│                           │   │   └── StaticHashClusterProviderTestBase.java
│                           │   └── support/
│                           │       └── HashAlgorithmProviderTestBase.java
│                           ├── ri/
│                           │   └── cluster/
│                           │       ├── ClusterNodeSpecImplTest.java
│                           │       ├── DefaultClusterSpecTest.java
│                           │       └── support/
│                           │           └── CryptoHashUtilTest.java
│                           └── test/
│                               └── util/
│                                   └── RunningAverage.java
├── pom.xml
└── redis_version_compliance.txt

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
target
*.log
*.classpath
*.project
*.settings
*.DS_Store
*.class
jredis.tmproj
*.iml
*.idea


================================================
FILE: DEV-NOTES.txt
================================================
Wed Feb 1 2012 

	* Merged chunk-pipelien branch to master
	  REFERENCE commit a9cff24fd8f041ec181598c571989680a4e5ad15 is
	  master prior to merge.



================================================
FILE: LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.



================================================
FILE: NOTICE
================================================
Copyright 2009-2012, Joubin Houshyar. 

All parts of the original works in JReids are licensed under the 
Apache License ver 2.0 http://www.apache.org/licenses.

Each sub-project contains a NOTICE file with additional notices,
which may contain additional licensing information.

END OF NOTICE



================================================
FILE: README
================================================
(This README is mainly addressing the project structure and build.  For information
about JRedis, please see the RELEASE-NOTES.) 

----------------------------------------------------------
BUILD
----------------------------------------------------------

* Requirements:

- maven 

Project uses Maven 2 as the build management system.  You
will need maven to conveniently build and package the 
project jars.

Project master is built on Mac OS X 10.5 using maven 2.0.9.

* howto

Project is not yet using assemblies, but is a multi-module
maven build with master POM in root directory (where you 
found this document).

Each module has its own pom, but you will need to run maven
with specific goals at the level of a major sub-module.  As
of now (intial release alpha.0-04152009) that translates to
a 'Core' and an 'Examples'.  

If you wish to use JRedis only you will need the product of
the Core-RI (reference implementation).  

If you wish to run benchmarks + use JRedis, you will also 
need to build the Core-BENCHMARK.

Simplest thing to do is to run maven with goal package at
the Core module level.  This will initiate and build each
module in Core:

API - The specifications, which are mostly interfaces.
RI - The reference implementation, which is you will use.
BENCH - The benchmark classes
ALL - A convenience virtual module that will build a 
unified jar of all modules besides itself in Core.

On command line in ~/core/., issue:

   mvn install

This will compile, test, package, and install JRedis
core artifacts in your local repository and create a 
set of jars in each core module's 'target' directory.

The pom of the Core as well as the super pom in the root
folder use a source attachment plugin, so a source jar 
will also be created for each module.  

The poms of core-ri, core-bench, and core-all use a 
include dependencies mechanism which will build, besides
the individual module's jar, an aggregate unified jar of
the module's classes + the classes of any dependency it
has declared.  (Only install goal will do this -- package
goal will simply create the module's own jar file(s)).

For example, issuing mvn install from core will create
in module core-bench's target directory the class and
source jars for the BENCH module + a single jar containing
all dependencies, which for BENCH are 'API' and 'RI'.

The build system uses a structured naming convention 
which results in longish names, but it is very effective.
(You can obviously simply change the jar names when you
deploy to your application's lib or jvm classpath as you
see fit.)

The super pom in project root will initiate the same for
all modules of JRedis, which as of now are CORE, and
EXAMPLES.  (Same considerations apply here.)


   **** IMPORTANT NOTE REGARDING UNIT TEST ****

Running unit tests is absolutely critical to a sane process
for developing JRedis, given that it is subject to a very
demanding refactoring regime (as it is a work in progress).

That means testing is critical for the master copy and
accordingly ALL poms in the project require SUCCESSFUL 
tests after compile before continuing.

   **** REDIS MUST BE RUNNING ON LOCALHOST *****

So, as tests on a connector without a server are fairly
pointless, this project will NOT build unless you have 
your localhost (6379) Redis server running.

   **** BUILD USES PASSWORD 'jredis' ****

If you do not have password set on your redis, no 
worries. 

If you do, the build will fail, unless you do one
of the following:

1) Change the password in core/pom.xml to match your
password in redis.conf

2) Alternatively tell maven to skip tests:

   mvn -Dmaven.test.skip=true install


  **** REMEMBER:  TESTS WILL FLUSH DBS 13 AND 10 *****

-

04-21-09 



================================================
FILE: RELEASE-NOTES.txt
================================================


                       ~!! n o ' r o o z !!~
                       
-------------------------------------------------------------------------
 n o ' r o o z                                 R E L E A S E   N O T E S
-------------------------------------------------------------------------

         JREDIS SPECIFICATION AND REFERENCE IMPLEMENTATION

[updated on 04-21-09]

 * About 
 
This is the initial (alpha.0) release of JREDIS, (code named "no'rooz").
Work on this began around the Persian New Year (No'Rooz, meaning New Day)
and has continued since then almost to the exclusion of nearly everything
else. 


 * Redis compliance
 
The specification and the implementation in this release comply with the 
the latest redis development release specification as of 04-21-09 and 
tested against the build of the REDIS server from the github repository.


 * Structure
 
JREDIS is composed of a Reference and a reference Implementation, under
a unified top-level packages.  (A single jar build is provided in this
release, which can be included in your classpath and simply utilized.)

Further Java artifacts include testing, benchmarking, and example source
directories.  All these, and the core, can be found under the java 
directory.  To build JREDIS, you will only need to compile the files
under ~/java/src/.


 * Included features

This initial revision includes a complete functioning Synchronous
connector for REDIS.  (Asynchronous connection and pipelining support are
on the immediate TODO shortlist.)  The initial release connection only
supports (for now) a use case scenario of create, continuously use, and
discard.  Enhanced connection maintenance and transparent re-connect are
also on the immediate TODO list for the initial revision.  This connector
is exposed for use as org.jredis.ri.alphazero.JRedisClient and you simply
need to instantiate and immediately use it to connect to your localhost
REDIS server.  This is a synchronous mode connection, with blocking 
semantics for JRedis API, and is intended for use strictly in a synchronized
request/reply manner.  To achieve concurrent connections, simply create
a client instance per thread.  (See the benchmark classes for examples.)

A queuing synchronous mode connector suitable for use in containers is 
on the drawing board.  (If you can not wait for this, you may hack your
own by placing a JRedis facade in front of a combination of classes from
java.util.concurrent and using a pool of JRedisClients behind the scenes.)

If you elect to do this, do note that connections to Redis are effectively
stateful and you can not trivially use a connection to serve the requests
of multiple requesters (threads) IFF you use commands such as SELECT.

Beyond that, JREDIS as of now supports basic Java serialization and you
can use your Java objects as 'values' for String, Set, and List keys in
REDIS.  And of course, the JRedis interface has been designed to provide
flexibility and 'native' REDIS access, so you can always send whatever
byte[] that you want (which is probably more efficient if you already
have externalization means for your Java classes).


 * Requirements

REDIS:
Obviously you will need a REDIS server to use JREDIS!  JREDIS is fully
compliant with all documented REDIS beta-0.09 commands, and also supports 
EXPIRE.  JREDIS as of now does NOT support the earlier 0.08 versions
but structurally is able to handle a multiplicity of REDIS versions,
and you should be able to create your own variant of ProtocolHandler
to interact with earlier (obsolete) versions of REDIS.

JAVA:
JREDIS has no external dependencies at this time.  The alpha.0 release
has been developed using Java 6 to utilize enhanced reporting afforded
by the compiler to implementations of Java interfaces.  However, JRE 6
or any of its features or libraries are not a fundamental requirement
and this release has the incompatible usage instances commented out to
allow for use with JRE 5.x and above.

Please note that while this software may or may not work under JDK 1.4.x
or earlier, it is simply *not* a goal for this project to support these
earlier version of Java, as that would adversely constrain the options
in both the expression of JRedis semantics and an effective implementation.

TESTS:
Test source files and classes clearly require TestNG library , 
but these test artifacts are not included in the drop-in jar so JUnit is
not a requirement for using JRedis.

BUILD:
JREDIS was built on Eclipse 3.4, on Apple's Mac OS X 10.5 running JVM1.6.
The JREDIS core software itself can be built simply using jacav and jar

That said, the current release uses structured Maven 2 poms to build
the project and execute the tests.

 * Status
 
This software is a *work in progress* and subject to change.  Careful
consideration has been given to the concerns and requirements of the end-
user of this software to minimize the impact of (certain) changes to 
the code-base as development continues, to extend functionality, to 
enhance performance, and to address the feedback of its user community.

That said, this is working code that has been tested and stressed, and
minimally provides a viable and versatile interface between Java systems
and the REDIS database.  Coding to the specification artifacts will 
minimize, but will not eliminate, any impact of the un-going developments.  

Rough edges are to be expected, and your patience appreciated while this
release makes the necessary transition to maturity.

And finally, *all the usual caveats regarding software apply:  So
to repeat from the license terms,  JREDIS is distributed on an "AS IS" 
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
implied.


 * Performance

The performance characteristics of this intial JREDIS No'Rooz implementation
are acceptable.  In developing a connector for a system such as REDIS, there
are a few performance bottle necks which are inevitable.  Based on intial
educated guesses and a few recent insights gained through the use of a 
profiling tool, every attempt has been made to optimize the performance of
this initial revision.  Nevertheless (and thankfully), there remain many
areas for further enhancement of the included sychronous connector (JRedis-
Client).

a) Network IO

This release has a known bottleneck that can be addressed, and will be 
likely after the work on the Asynchronous connection has reached the same 
level of development as the initial synchronous connection in the initial
release.  While it is expected that a blocking network client would be io-
bound to a significant degree, this is actually not that bad in this release.

The wip Asynch connection (still using stream sockets, and not yet NIO),
has been clocked at anywhere from 100,000 to 175,000 PING/INCRs on a single
non-blocking connection to a localhost REDIS.  (These are relative numbers
but a reference point is that the REDIS redis-bench program clocks at around
34K/sec for the same).  The work on this was stopped to get this release
prepared and resumption of work is a high priority as it was way too much
fun!


b) java.lang.String

The worst offender, and an inescapable one at that, is the String class of
Java, as far as performance hotspots are concerned.  On one hand, it is 
great to have a Unicode character string implementations that allows JREDIS
to use (as tested) Russian, Chinese, and Farsi, keys in storing information 
in REDIS, nevertheless, the performance hit of conversion of (typical) ASCII
strings to byte[] required for the protocol are quite annoying: 

Given that String is a final class, little short of caching can be done 
about it. (Any suggestions addressing this is greatly appreciated.) 


c) data conversion and byte shoveling.
 
The current implementation makes every attempt to minimize the allocation
of byte[] buffers, and subsequent copying of bytes from one array to another,
but in some cases there is nothing than can be done about it. 

Also, some attempts have been made to optimize conversion from numbers to
byte[] and back, to avoid a visit to the dreaded String.getBytes <g>. The
current (hack) solution will cost a few hundred Ks of RAM per classloader
but its probably worth it.


 * Documentation
 
Documentation is a priority item.  In the interim please refer to the java
api docs.  If you are not familiar with the REDIS command set, you are 
certainly encouraged to read the Command reference and get to know the
REDIS vocabulary.  The main critical interfaces exposed by JREDIS is the
JRedis interface which is a near analog of the redis command set.

The overall connector design itself is documented as a ~UML diagram image
capture.    
  

 * Updates
 
Updates about JREDIS specification and reference implementation
will be posted at:

   JREDIS project site:
   http://code.google.com/p/jredis/

and

   REDIS Google newsgroup:
   http://groups.google.com/group/redis-db

+spontanous updates will also be posted to twitter under

  http://twitter.com/SunOf27


 * Feedback
    
Your feedback is welcomed and appreciated.  Please direct your
questions, suggestion, comments, concerns, and complaints to
the above public forums, or directly to me @ 

   alphazero@sensesay.net

Most specially, information regarding bugs, performance, and 
usability issues, will be highly appreciated. 


/ Enjoy!


~ Dedicated to my lovely parents, Kiyou and Farideh. ~

Joubin 
04-12-09
Fairfax Station, NoVA




================================================
FILE: Release/RELEASE-NOTES-Update-03122010.txt
================================================
Final release for Redis 1.2.n compliant clients.

REQUIREMENTS CHANGES:

Requires Redis server 1.2.n.  This release is NOT compatible with either Redis 1.000 or 2.n (development edge).

See: 
http://code.google.com/p/redis/downloads/list

NEW FEATURES:

* Heartbeat

Connectors will launch a heartbeat thread to maintain connections.  Frequency can be set using ConnectionSpec, with default of 1/sec.

* Synchronous semantics for Pipeline

See JRedisPipeline.sync().  In a nutshell, allows for mixing in synchronous semantics when using the asynchronous pipelines.  For example, you may issue a set of asynchronous commands (per JRedisFuture interface) and then use pipeline.sync() to obtain a JRedis (synchronous) interface to issue a blocking command.  See UsingJredisPipeline.exampleUseofSyncInPipeline() (in /Examples)


BUG FIX:

A few bugs were reported and have been addressed.  (Thanks to all who provided feedback.)

See: 
http://github.com/alphazero/jredis/issues/closed 

ROAD MAP:

Development focus will be on Redis 2.n compliance in tandem with Redis edge (http://github.com/antirez/redis), and maintenance for (this) 1.2.n compliant clients. 

/enjoy

03-12-2010
NoVA



================================================
FILE: Release/RELEASE-NOTES-Update-08132009.txt
================================================
This update includes changes to the JRedis interface, as previously announced.

API CHANGES:

As of this release update, you will need to specify the password and/or db on connect time.
You will no longer be able to change the selected db for a connection.
The default db selected on connect is db 0.  

The test suites are all positive on these changes.  (Fairly substantial changes in the internal
connector packages.)  That said, I have not had the time to conduct exhaustive testing beyond
the test suites.  If you find a bug, please report it under issues in github.  If you post to 
the Redis newsgroup, please indicate JRedis in the subject line as I usually just skim the 
list's subjects and may miss your feedback.  

BUG FIX:

Previous releases had a bug that reconnected to db 0 on timed out connections.  Per the changes
in this release, the automatic reconnect will connect to the Redis server using the authorization
credentials (if any), and, the db you specified, on the initial connection (using new JRedisClient()).


ROAD MAP:

Now that we have the db select issue out of the way, the way is clear for connection pooling and 
thread safe connections. 

Also, the ConnectionFactory interface of the specification may be finally brought into use to allow
for complete user control over the Redis and TCP connection characteristics.  (Current implementation
relies on a default ConnectionSpec to create its connection.)  This will potentially of use to domains
that require specialized settings for the buffer sizes, tcp preferences, etc.

Pipe-lining is also an upcoming addtion.  Frankly its been held back for no better reason other than
my laziness and/or other pressing issues occupying my time.  A rough implementation has been played
with and the performance characteristic increases are in the order of magnitude. (100,000 ops/sec vs
30,000 for the synch clients on my machine).  Of course these are throughput measures, and not latency.

/enjoy

08-13-2009
NoVA



================================================
FILE: Release/RELEASE-NOTES-Update-11082009.txt
================================================
This is a fairly substantial update release and the final release supporting Redis 1.000.

This update includes changes to the JRedis interface, as previously announced.

REQUIREMENTS CHANGES:

Not so much a change but a strict conformance to Java 5.  For whatever reasons (me?) maven
apparently had ignored the Java 1.5 directives in the build and I was blissfully unaware 
that the project was, in fact, using Java 6 constructs (specificially the enhanced semantics
of @Override).  Well, no more.  JRedis is now strictly 1.5.  


API CHANGES:

* Asynchronous semantics

A new JRedisFuture interface has been introduced to provide asynchronous call interaction
semantics with redis.  This is the very first try at this interface and I am not specially
happy with the amount of angled bracket typing required to use Future<x> directly.  So 
forewarned that JRedisFuture may change (for the better) and we'll introduce new types to 
alleviate the angled bracket typing when using this interface. 
 
* spec package reorg

A few interfaces were shuffled around in course of refactorings and introduction of the
asynch semantics.  Fairly minor stuff, but it could potentially break some of your import
statements.


NEW FEATURES:

(See the examples project for usage details of new additions).

* Pipelining
Pipelines supporting both synchronous and asynchronous call semantics are provided.  
New JRedisPipeline, JRedisPipelineService respectively provide Asynch and Synch access
to redis.  Both are safe for concurrent use.

Note that while this release is Redis 1.000 compliant, there was a rewrite of redis that
changed how pipelining was implemented on server side, and the pipelining in this release
has only passed unit test against Redis 1.050.

* Asynchronous call semantics
Besides the pipelines, the new JRedisAsynchClient also supports the JRedisFuture interface
and (unlike pipelines) provides true fire and forget behaviour, with minimal latencies in
call completion.  Please note that unlike the pipelines (which queue pending responses 
AFTER writing the request to the remote server) the asynch client will queue your request.
So you can fire and forget, but you MUST remember that memory is a constrained resource
and you can not queue more requests that your JVM can handle <g>.

BUG FIX:

A couple of bugs were reported since that last update and have been fixed in this release.

Reconnect has proven to be a can of worms and given that it is *impossible* for JRedis to 
guarantee a completely transparent reconnect without potentially resending commands without
becoming excessively complex (and incurring computation costs for even those who do not require
it) the clients will reconnect but will NOT attempt to transparently resend your
command.  A ClientRuntimeException will be thrown after reconnect to alert the caller that
a reconnect occured at some point during the execution of the request.  (Java sockets will
NOT raise exceptions on write even in case of a disconnection so it is nearly impossible to
guarantee transparent reconnect since it is unknown whether the command write actually went 
through or not.)
 

ROAD MAP:

First up is the addtion of support for the new Redis commands, such as MSet, all the Z*s, etc.

After that, we'll likely introduce a extensible mechanism for the user applications to spec
a server selection/distribution mechanism, with a basic hashing implementation for sharding.

/enjoy

11-08-2009
NoVA



================================================
FILE: Release/RELEASE_BUILD_TIME
================================================
Fri Mar 12 11:19:49 EST 2010


================================================
FILE: core/LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.



================================================
FILE: core/NOTICE
================================================
Copyright 2009-2012, Joubin Houshyar. 

All parts of the original works in JReids are licensed under the 
Apache License ver 2.0 http://www.apache.org/licenses.

Each sub-project contains a NOTICE file with additional notices,
which may contain additional licensing information.

END OF NOTICE



================================================
FILE: core/README
================================================
README : JRedis Module Core

----------------------------------------------------------
BUILD
----------------------------------------------------------

For build instructions refer to the README in root.

----------------------------------------------------------
MODULES
----------------------------------------------------------

The Core module is composed of all the core elements that
are used to create JRedis clients and connectors for the
Redis server.  

This includes: 

- the specification (API),
- the reference implementation (RI),
- the benchmark module (BENCH)

An additional module ALL is a virtual module used to 
create a unified jar for the core.  (Its a hack of manve;
likely will be replaced by an assembly directive in the
future.  If you are a maven guru let me know how to do it
better.)

* JRedis users

If you want to use JRedis clients and connectors, you'll
only need the classes of API and RI.  

Depending on your preferences and requirements, you may
either uses the individual jars for each module, OR,
simply use the jar 'with dependencies' in RI's target 
directory.

Each module should also produce a source jar.  (See build
instructions.)

No javadocs are produced as of now.  (c.f. maven newbiness).

**** PLEASE REFER TO UNIT TEST INFO IN ROOT README *****

/end


================================================
FILE: core/all/LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.



================================================
FILE: core/all/NOTICE
================================================
Copyright 2009-2012, Joubin Houshyar. 

All parts of the original works in JReids are licensed under the 
Apache License ver 2.0 http://www.apache.org/licenses.

Each sub-project contains a NOTICE file with additional notices,
which may contain additional licensing information.

END OF NOTICE



================================================
FILE: core/all/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<!-- parent -->
	<parent>
		<groupId>org.jredis</groupId>
		<artifactId>jredis-core</artifactId>
		<version>a.0-SNAPSHOT</version>
	</parent>

	<!-- production | jar -->
	<!-- NOTE: this something of a hack and perhaps there is a standard way 
		to do it in maven: the 'core-all' is an empty module that simply requires 
		all the other (functional) modules of core and its production creates a jar 
		with all the core classes included. (Assembly is probably what I am looking 
		for .. -->

	<name>JRedis - Core - ALL [Jar POM]</name>
	<groupId>org.jredis</groupId>
	<artifactId>jredis-core-all</artifactId>
	<version>a.0-SNAPSHOT</version>
	<packaging>jar</packaging>

	<dependencies>
		<!-- declare dependency on all core modules for dependency jar -->
		<!-- api -->
		<dependency>
			<groupId>org.jredis</groupId>
			<artifactId>jredis-core-api</artifactId>
			<version>a.0-SNAPSHOT</version>
		</dependency>

		<!-- ri -->
		<dependency>
			<groupId>org.jredis</groupId>
			<artifactId>jredis-core-ri</artifactId>
			<version>a.0-SNAPSHOT</version>
		</dependency>

		<!-- bench -->
		<dependency>
			<groupId>org.jredis</groupId>
			<artifactId>jredis-core-bench</artifactId>
			<version>a.0-SNAPSHOT</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<executions>
					<execution>
						<id>simple-install</id>
						<phase>package</phase>
						<goals>
							<goal>attached</goal>
						</goals>
					</execution>
				</executions>
				<configuration>
					<descriptorRefs>
						<descriptorRef>jar-with-dependencies</descriptorRef>
					</descriptorRefs>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>


================================================
FILE: core/api/LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.



================================================
FILE: core/api/NOTICE
================================================
Copyright 2009-2012, Joubin Houshyar. 

All parts of the original works in JReids are licensed under the 
Apache License ver 2.0 http://www.apache.org/licenses.

Each sub-project contains a NOTICE file with additional notices,
which may contain additional licensing information.

END OF NOTICE



================================================
FILE: core/api/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<!-- parent -->
	<parent>
		<groupId>org.jredis</groupId>
		<artifactId>jredis-core</artifactId>
		<version>a.0-SNAPSHOT</version>
	</parent>

	<!-- production | jar -->
	<name>JRedis - Core - API</name>
	<groupId>org.jredis</groupId>
	<artifactId>jredis-core-api</artifactId>
	<version>a.0-SNAPSHOT</version>
	<packaging>jar</packaging>


	<dependencies>
		<!-- unit testing -->
		<dependency>
			<groupId>org.testng</groupId>
			<artifactId>testng</artifactId>
			<version>7.7.0</version>
			<scope>test</scope>
		</dependency>
		<!-- logging -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.12</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.1</version>
		</dependency>
	</dependencies>

</project>


================================================
FILE: core/api/src/main/java/org/jredis/ClientRuntimeException.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;


/**
 * Base class for all non-Redis exceptions relating to client runtime.  Implementations
 * must only throw this type of exception when the problem(s) encountered are neither Redis usage errors, nor 
 * unexpected code segment execution.
 * <p>
 * For example, failure to establish a connection, or losing the connection, should raise this type of exception.  But
 * encountering parse errors in Redis responses streams is a bug and should be noted by raising a {@link ProviderException}.
 * 
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, 04/02/09
 * @since   alpha.0
 * 
 */
public class ClientRuntimeException extends RuntimeException {

	/**  */
	private static final long	serialVersionUID	= _specification.Version.major;
	
	/**
	 * @param message
	 */
	public ClientRuntimeException(String message) {
		super (message);
	}

	/**
	 * @param message
	 * @param cause
	 */
	public ClientRuntimeException(String message, Throwable cause) {
		super(message, cause);
	}
	
	// ------------------------------------------------------------------------
	//	Super overrides
	// ------------------------------------------------------------------------
	
	/* (non-Javadoc)
	 * @see java.lang.Throwable#getLocalizedMessage()
	 */
	@Override
    final public String getLocalizedMessage () {
		return this.getMessage();
    }

	/* (non-Javadoc)
	 * @see java.lang.Throwable#getMessage()
	 */
	@Override
    final public String getMessage () {
		StringBuffer buff = new StringBuffer();
		
		String message = super.getMessage();
		if(null == message) buff.append("[BUG: null message]");
		else buff.append(message);
		
		Throwable cause = getCause();
		if(null != cause) buff.append(" cause: => [").append(cause.getClass().getSimpleName()).append(": ").append(cause.getMessage()).append("]");
		
		return buff.toString();
    }
}


================================================
FILE: core/api/src/main/java/org/jredis/Codec.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;



/**
 * Defines the necessary methods for a Java type encoder-decoder.  Implementations of this
 * interface can be registered with a {@link CodecManager} used by a {@link JRedis} implementation
 * (whether per instance or by other relations per JRedis provider implementation), and used
 * during the encoding of an semantic java type into {@link byte[]} and back.  
 *
 * @author  Joubin (alphazero@sensesay.net)
 * @version alpha.0, Apr 14, 2009
 * @since   alpha.0
 * 
 */

public interface Codec <T extends Object>  {
	/**
	 * @param bytes
	 * @return an instance of type <code>T</code> corresponding to the value of decoded <code>bytes</code>
	 */
	public T decode (byte[] bytes);
	/**
	 * @param object
	 * @return
	 */
	public byte[] encode (T object);
	/**
	 * @param type
	 * @return whether this codec supports the (en/de)coding of the type <code>T</code>
	 */
	public boolean supports (Class<?> type);
}


================================================
FILE: core/api/src/main/java/org/jredis/Event.java
================================================
/*
 *   Copyright 2009-2010 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.lang.ref.WeakReference;

/**
 * Generic Event class for JRedis and sub-modules.
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, Mar 29, 2010
 * @since   alpha.0
 * 
 * @param <SRC>
 * @param <ETYPE>
 * @param <INFO>
 */
public class Event <SRC, ETYPE, INFO> implements Serializable{
	/**  */
    private static final long serialVersionUID = 1L;
    
	/**  */
	private final ETYPE type;
	/**  */
	private transient WeakReference<SRC> srcRef;
	/**  */
	private final INFO info;
	
	/**
	 * @param src
	 * @param eType
	 * @param info
	 */
	protected Event(SRC src, ETYPE eType, INFO info){
		this.type = eType;
		this.srcRef = new WeakReference<SRC>(src);
		this.info = info;
	}
	/**
	 * @param src
	 * @param eType
	 */
	protected Event(SRC src, ETYPE eType){
		this(src, eType, null);
	}
	/**
	 * @return
	 */
	public ETYPE getType () {
    	return type;
    }
	/**
	 * @return
	 */
	public SRC getSource () {
    	return srcRef.get();
    }
	/**
	 * @return
	 */
	public INFO getInfo () {
    	return info;
    }

	private void writeObject(ObjectOutputStream out) throws IOException {
		out.defaultWriteObject();
		out.writeObject(srcRef.get());
	}

	@SuppressWarnings("unchecked")
	private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
		in.defaultReadObject();
		srcRef = new WeakReference<SRC>((SRC)in.readObject());
	}
}

================================================
FILE: core/api/src/main/java/org/jredis/JRedis.java
================================================
/*
 *   Copyright 2009-2011 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;

import java.io.Serializable;
import java.util.List;
import java.util.Map;


/**
 * <p>This is effectively a one to one mapping to Redis commands.  And that
 * is basically it.
 * <p>Beyond that , just be aware that an implementation may throw {@link ClientRuntimeException}
 * or an extension to report problems (typically connectivity) or features {@link NotSupportedException}
 * or bugs.  These are {@link RuntimeException}.
 * 
 * @author  joubin (alphazero@sensesay.net)
 * @version alpha.0, 04/02/09
 * @since   alpha.0
 * 
 */
@Redis(versions="1.07")
public interface JRedis {
	
	// ------------------------------------------------------------------------
	// Semantic context methods
	// ------------------------------------------------------------------------

	// TODO: reach a decision on whether to include this or not.
//	/**
//	 * Provides for access to an interface providing standard Java collections
//	 * semantics on the specified parametric type.  
//	 * <p>
//	 * The type <code>T</code> can be of 3 categories:
//	 * <ol>
//	 * <li>It is 
//	 * </ol>
//	 * @param <T> a Java class type that you wish to perform {@link Set}, 
//	 * {@link List}, or {@link Map}, operations. 
//	 * @return the {@link JavaSemantics} for type <code>T</code>, if the type specified meets
//	 * the required initialization characteristics.
//	 */
//	public <K extends Object, T> JavaSemantics<T>  semantic (Class<T>  type) throws ClientRuntimeException;
	
	// ------------------------------------------------------------------------
	// Security and User Management
	// NOTE: Moved to ConnectionSpec
	// ------------------------------------------------------------------------

	
	// ------------------------------------------------------------------------
	// "Connection Handling"
	// ------------------------------------------------------------------------

	/**
	 * Ping redis
	 * @return true (unless not authorized)
	 * @throws RedisException (as of ver. 0.09) in case of unauthorized access
	 */
	public <K extends Object> JRedis ping () throws RedisException;

	/**
	 * Disconnects the client.
	 * @Redis QUIT
	 */
	public <K extends Object> void quit ();
	
	// ------------------------------------------------------------------------
	// "Commands operating on string values"
	// ------------------------------------------------------------------------

	/**
	 * Bind the value to key.  
	 * @Redis SET
	 * @param key any UTF-8 {@link String}
	 * @param value any bytes.  For current data size limitations, refer to
	 * Redis documentation.
	 * @throws RedisException on user error.
	 * @throws ProviderException on un-documented features/bug
	 * @throws ClientRuntimeException on errors due to operating environment (Redis or network)
	 */
	public <K extends Object> void set (K key, byte[] value) throws RedisException;
	/**
	 * Convenient method for {@link String} data binding
	 * @Redis SET
	 * @param key
	 * @param stringValue
	 * @throws RedisException
	 * @see {@link JRedis#set(String, byte[])}
	 */
	public <K extends Object> void set (K key, String stringValue) throws RedisException;
	/**
	 * Convenient method for {@link String} numeric values binding
	 * @Redis SET
	 * @param key
	 * @param numberValue
	 * @throws RedisException
	 * @see {@link JRedis#set(String, byte[])}
	 */
	public <K extends Object> void set (K key, Number numberValue) throws RedisException;
	/**
	 * Binds the given java {@link Object} to the key.  Serialization format is
	 * implementation specific.  Simple implementations may apply the basic {@link Serializable}
	 * protocol.
	 * @Redis SET
	 * @param <T>
	 * @param key
	 * @param object
	 * @throws RedisException
	 * @see {@link JRedis#set(String, byte[])}
	 */
	public <K extends Object, T extends Serializable> 
		   void set (K key, T object) throws RedisException;

	/**
	 * @Redis SETNX
	 * @param key
	 * @param value
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> boolean setnx (K key, byte[] value) throws RedisException;
	public <K extends Object> boolean setnx (K key, String stringValue) throws RedisException;
	public <K extends Object> boolean setnx (K key, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		   boolean setnx (K key, T object) throws RedisException;

	/**
	 * @Redis GET
	 * @param key
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> byte[] get (K key)  throws RedisException;

	public <K extends Object> byte[] getset (K key, byte[] value) throws RedisException;
	public <K extends Object> byte[] getset (K key, String stringValue) throws RedisException;
	public <K extends Object> byte[] getset (K key, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		byte[] getset (K key, T object) throws RedisException;

	
	/**
	 * @Redis MGET
	 * @param key
	 * @param moreKeys
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> List<byte[]> mget(K...keys) throws RedisException;

	/**
	 * @Redis MSET
	 * @param keyValueMap a {@link Map}ping of {@link String} key names to byte[] values.
	 * @return 
	 * @throws RedisException
	 */
	public <K extends Object> void mset(Map<K, byte[]> keyValueMap) throws RedisException;
	
	public <K extends Object> void mset(KeyValueSet.ByteArrays<K> mappings) throws RedisException;
	public <K extends Object> void mset(KeyValueSet.Strings<K> mappings) throws RedisException;
	public <K extends Object> void mset(KeyValueSet.Numbers<K> mappings) throws RedisException;
	public <K extends Object, T extends Serializable> void mset(KeyValueSet.Objects<K, T> mappings) throws RedisException;
	
	/**
	 * @Redis MSETNX
	 * @param keyValueMap a {@link Map}ping of {@link String} key names to byte[] values.
	 * @return false if ANY of the keys in the map already existed, true if all were new and were set.
	 * @throws RedisException
	 */
	public <K extends Object> boolean msetnx(Map<K, byte[]> keyValueMap) throws RedisException;
	
	public <K extends Object> boolean msetnx(KeyValueSet.ByteArrays<K> mappings) throws RedisException;
	public <K extends Object> boolean msetnx(KeyValueSet.Strings<K> mappings) throws RedisException;
	public <K extends Object> boolean msetnx(KeyValueSet.Numbers<K> mappings) throws RedisException;
	public <K extends Object, T extends Serializable> boolean msetnx(KeyValueSet.Objects<K, T> mappings) throws RedisException;
	
	/**
	 * @Redis INCR
	 * @param key
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> long incr (K key) throws RedisException;

	/**
	 * @Redis INCRBY
	 * @param key
	 * @param delta
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> long incrby (K key, int delta) throws RedisException;

	/**
	 * @Redis DECR
	 * @param key
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> long decr (K key) throws RedisException;

	/**
	 * @Redis DECRBY
	 * @param key
	 * @param delta
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> long decrby (K key, int delta) throws RedisException;

	/**
	 * @Redis SUBSTR
	 * @param key
	 * @param from
	 * @param to
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> byte[] substr (K key, long from, long to) throws RedisException;
	
	
	/**
	 * @Redis APPEND
	 * @param key
	 * @param value
	 * @return length (byte count) of appended value
	 * @throws RedisException
	 */
	public <K extends Object> long append (K key, byte[] value) throws RedisException;
	public <K extends Object> long append (K key, String stringValue) throws RedisException;
	public <K extends Object> long append (K key, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		   long append (K key, T object) throws RedisException;

	// ------------------------------------------------------------------------
	// "Commands operating on the key space"
	// ------------------------------------------------------------------------
	
	/**
	 * @Redis EXISTS
	 * @param key
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> boolean exists(K key) throws RedisException;

	/**
	 * @Redis DEL
	 * @param keys one or more non-null, non-zero-length, keys to be deleted
	 * @return number of keys actually deleted
	 * @throws RedisException
	 */
//	public <K extends Object> boolean del (K key) throws RedisException;
	public <K extends Object> long del (K ... keys) throws RedisException;

	/**
	 * @Redis TYPE
	 * @param key
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> RedisType type (K key) throws RedisException;
	
	
	/**
	 * @Redis KEYS
	 * @param pattern
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> List<byte[]> keys (K pattern) throws RedisException;
	
	/**
	 * Convenience method.  Equivalent to calling <code>jredis.keys("*");</code>
	 * @Redis KEYS
	 * @return
	 * @throws RedisException
	 * @see {@link JRedis#keys(String)}
	 */
	public <K extends Object> List<byte[]> keys () throws RedisException;

	/**
	 * @Redis RANDOMKEY
	 * @return
	 * @throws RedisException
	 */
	public byte[] randomkey() throws RedisException;
	
	/**
	 * @Redis RENAME
	 * @param oldkey
	 * @param newkey
	 * @throws RedisException
	 */
	public <K extends Object> void rename (K oldkey, K newkey) throws RedisException;
	
	/**
	 * @Redis RENAMENX
	 * @param oldkey
	 * @param brandnewkey
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> boolean renamenx (K oldkey, K brandnewkey) throws RedisException;
	
	/**
	 * @Redis DBSIZE
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> long dbsize () throws RedisException;
	
	/**
	 * @Redis EXPIRE
	 * @param key
	 * @param ttlseconds
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> boolean expire (K key, int ttlseconds) throws RedisException; 
	
	/**
	 * 
	 * @Redis EXPIREAT
	 * @param key
	 * @param UNIX epoch-time in <b>milliseconds</b>.  Note that Redis expects epochtime
	 * in seconds. Implementations are responsible for converting to seconds.
	 * method   
	 * @return
	 * @throws RedisException
	 * @see {@link System#currentTimeMillis()}
	 */
	public <K extends Object> boolean expireat (K key, long epochtimeMillisecs) throws RedisException; 
	
	/**
	 * @Redis TTL
	 * @param key
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> long ttl (K key) throws RedisException;
	
	// ------------------------------------------------------------------------
	// Commands operating on lists
	// ------------------------------------------------------------------------

	/**
	 * @Redis RPUSH
	 * @param listkey
	 * @param value
	 * @throws RedisException
	 */
	public <K extends Object> void rpush (K listkey, byte[] value) throws RedisException;
	public <K extends Object> void rpush (K listkey, String stringValue) throws RedisException;
	public <K extends Object> void rpush (K listkey, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		   void rpush (K listkey, T object) throws RedisException;
	
	/**
	 * @Redis LPUSH
	 * @param listkey
	 * @param value
	 * @throws RedisException
	 */
	public <K extends Object> void lpush (K listkey, byte[] value) throws RedisException;
	public <K extends Object> void lpush (K listkey, String stringValue) throws RedisException;
	public <K extends Object> void lpush (K listkey, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		   void lpush (K listkey, T object) throws RedisException;
	
	/**
	 * @Redis LSET
	 * @param key
	 * @param index
	 * @param value
	 * @throws RedisException
	 */
	public <K extends Object> void lset (K key, long index, byte[] value) throws RedisException;
	public <K extends Object> void lset (K key, long index, String stringValue) throws RedisException;
	public <K extends Object> void lset (K key, long index, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		   void lset (K key, long index, T object) throws RedisException;
	

	/**
	 * @Redis LREM
	 * @param listKey
	 * @param value
	 * @param count
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> long lrem (K listkey, byte[] value,       int count) throws RedisException;
	public <K extends Object> long lrem (K listkey, String stringValue, int count) throws RedisException;
	public <K extends Object> long lrem (K listkey, Number numberValue, int count) throws RedisException;
	public <K extends Object, T extends Serializable> 
		   long lrem (K listkey, T object, int count) throws RedisException;
	
	/**
	 * Given a 'list' key, returns the number of items in the list.
	 * @Redis LLEN
	 * @param listkey
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> long llen (K listkey) throws RedisException;
	
	/**
	 * @Redis LRANGE
	 * @param listkey
	 * @param from
	 * @param to
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> List<byte[]> lrange (K listkey, long from, long to) throws RedisException; 

	/**
	 * @Redis LTRIM
	 * @param listkey
	 * @param keepFrom
	 * @param keepTo
	 * @throws RedisException
	 */
	public <K extends Object> void ltrim (K listkey, long keepFrom, long keepTo) throws RedisException;
	
	/**
	 * @Redis LINDEX
	 * @param listkey
	 * @param index
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> byte[] lindex (K listkey, long index) throws RedisException;
	
	/**
	 * @Redis LPOP
	 * @param listKey
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> byte[] lpop (K listkey) throws RedisException;
	
	/**
	 * @Redis RPOP
	 * @param listKey
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> byte[] rpop (K listkey) throws RedisException;

	/**
	 * @Redis RPOPLPUSH
	 * @param srcList
	 * @param destList
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> byte[] rpoplpush (K srcList, K destList) throws RedisException;

	// ------------------------------------------------------------------------
	// Commands operating on sets
	// ------------------------------------------------------------------------
	
	/**
	 * @Redis SADD
	 * @param setkey
	 * @param member
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> boolean sadd (K setkey, byte[] member) throws RedisException;
	public <K extends Object> boolean sadd (K setkey, String stringValue) throws RedisException;
	public <K extends Object> boolean sadd (K setkey, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		   boolean sadd (K setkey, T object) throws RedisException;

	/**
	 * @Redis SREM
	 * @param setKey
	 * @param member
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> boolean srem (K setkey, byte[] member) throws RedisException;
	public <K extends Object> boolean srem (K setkey, String stringValue) throws RedisException;
	public <K extends Object> boolean srem (K setkey, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		   boolean srem (K setkey, T object) throws RedisException;

	/**
	 * @Redis SISMEMBER
	 * @param setKey
	 * @param member
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> boolean sismember (K setkey, byte[] member) throws RedisException;
	public <K extends Object> boolean sismember (K setkey, String stringValue) throws RedisException;
	public <K extends Object> boolean sismember (K setkey, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		   boolean sismember (K setkey, T object) throws RedisException;
	
	/**
	 * @Redis SMOVE
	 * @param srcKey
	 * @param destKey
	 * @param member
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> boolean smove (K srcKey, K destKey, byte[] member) throws RedisException;
	public <K extends Object> boolean smove (K srcKey, K destKey, String stringValue) throws RedisException;
	public <K extends Object> boolean smove (K srcKey, K destKey, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		   boolean smove (K srcKey, K destKey, T object) throws RedisException;
	
	/**
	 * @Redis SCARD
	 * @param setKey
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> long scard (K setKey) throws RedisException;	
	
	/**
	 * @Redis SINTER
	 * @param set1
	 * @param sets
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> List<byte[]> sinter (K set1, K...sets) throws RedisException;
	/**
	 * @Redis SINTERSTORE
	 * @param destSetKey
	 * @param sets
	 * @throws RedisException
	 */
	public <K extends Object> void sinterstore (K destSetKey, K...sets) throws RedisException;

	/**
	 * @Redis SUNION
	 * @param set1
	 * @param sets
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> List<byte[]> sunion (K set1, K...sets) throws RedisException;
	
	/**
	 * @Redis SUNIONSTORE
	 * @param destSetKey
	 * @param sets
	 * @throws RedisException
	 */
	public <K extends Object> void sunionstore (K destSetKey, K...sets) throws RedisException;

	/**
	 * @Redis SDIFF
	 * @param set1
	 * @param sets
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> List<byte[]> sdiff (K set1, K...sets) throws RedisException;
	
	/**
	 * @Redis SDIFFSTORE
	 * @param destSetKey
	 * @param sets
	 * @throws RedisException
	 */
	public <K extends Object> void sdiffstore (K destSetKey, K...sets) throws RedisException;

	/**
	 * @Redis SMEMBERS
	 * @param setkey
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> List<byte[]> smembers (K setKey) throws RedisException;
	
	/**
	 * @Redis SRANDMEMBER
	 * @param setkey
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> byte[] srandmember (K setKey) throws RedisException;
	
	/**
	 * @Redis SPOP
	 * @param setkey
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> byte[] spop (K setKey) throws RedisException;
	// ------------------------------------------------------------------------
	// Commands operating on sets
	// ------------------------------------------------------------------------
	
	/**
	 * @Redis ZADD
	 * @param setkey
	 * @param score
	 * @param member
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> boolean zadd (K setkey, double score, byte[] member) throws RedisException;
	public <K extends Object> boolean zadd (K setkey, double score, String stringValue) throws RedisException;
	public <K extends Object> boolean zadd (K setkey, double score, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		   boolean zadd (K setkey, double score, T object) throws RedisException;

	/**
	 * @Redis ZREM
	 * @param setKey
	 * @param member
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> boolean zrem (K setkey, byte[] member) throws RedisException;
	public <K extends Object> boolean zrem (K setkey, String stringValue) throws RedisException;
	public <K extends Object> boolean zrem (K setkey, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		   boolean zrem (K setkey, T object) throws RedisException;
	
	/**
	 * @Redis ZCARD
	 * @param setKey
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> long zcard (K setKey) throws RedisException;	
	
	
	/**
	 * @Redis ZSCORE
	 * @param setkey
	 * @param member
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> Double zscore (K setkey, byte[] member) throws RedisException;
	public <K extends Object> Double zscore (K setkey, String stringValue) throws RedisException;
	public <K extends Object> Double zscore (K setkey, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		Double zscore (K setkey, T object) throws RedisException;

	/**
	 * @Redis ZRANK
	 * @param setkey
	 * @param member
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> long zrank (K setkey, byte[] member) throws RedisException;
	public <K extends Object> long zrank (K setkey, String stringValue) throws RedisException;
	public <K extends Object> long zrank (K setkey, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		long zrank (K setkey, T object) throws RedisException;

	/**
	 * @Redis ZREVRANK
	 * @param setkey
	 * @param member
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> long zrevrank (K setkey, byte[] member) throws RedisException;
	public <K extends Object> long zrevrank (K setkey, String stringValue) throws RedisException;
	public <K extends Object> long zrevrank (K setkey, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		long zrevrank (K setkey, T object) throws RedisException;

	/**
	 * @Redis ZRANGE
	 * @param setkey
	 * @param from
	 * @param to
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> List<byte[]> zrange (K setkey, long from, long to) throws RedisException; 

	/**
	 * @Redis ZREVRANGE
	 * @param setkey
	 * @param from
	 * @param to
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> List<byte[]> zrevrange (K setkey, long from, long to) throws RedisException; 

	/**
	 * Equivalent to {@link JRedis#zrange(String, long, long)} with the {@link Option.Options#WITHSCORES}.
	 * Unlike the general ZRANGE command that only returns the values, this method returns both
	 * values and associated scores for the specified range.
	 *  
	 * @Redis ZRANGE ... WITHSCORES
	 * @param setkey
	 * @param from
	 * @param to
	 * @return the subset of the specified set 
	 * @throws RedisException
	 * @see JRedis#zrange(String, long, long)
	 * @see ZSetEntry
	 */
	public <K extends Object> List<ZSetEntry> zrangeSubset (K setkey, long from, long to) throws RedisException; 

	/**
	 * Equivalent to {@link JRedis#zrevrange(String, long, long)} with the {@link Option.Options#WITHSCORES}.
	 * Unlike the general ZREVRANGE command that only returns the values, this method returns both
	 * values and associated scores for the specified range.
	 *  
	 * @Redis ZREVRANGE ... WITHSCORES
	 * @param setkey
	 * @param from
	 * @param to
	 * @return the subset of the specified set 
	 * @throws RedisException
	 * @see JRedis#zrevrange(String, long, long)
	 * @see ZSetEntry
	 */
	public <K extends Object> List<ZSetEntry> zrevrangeSubset (K setkey, long from, long to) throws RedisException; 

	/**
	 * @Redis ZRANGE
	 * @param setkey
	 * @param minScore
	 * @param maxScore
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> List<byte[]> zrangebyscore (K setkey, double minScore, double maxScore) throws RedisException; 

	/**
	 * @Redis ZRANGEBYSCORE ... WITHSCORES
	 * @param setkey
	 * @param minScore
	 * @param maxScore
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> List<ZSetEntry> zrangebyscoreSubset (K setkey, double minScore, double maxScore) throws RedisException;

	/**
	 * @Redis ZREMRANGEBYSCORE
	 * @param setkey
	 * @param minScore
	 * @param maxScore
	 * @return number of removed elements
	 * @throws RedisException
	 */
	public <K extends Object> long zremrangebyscore (K setkey, double minScore, double maxScore) throws RedisException; 

	/**
	 * @Redis ZREMRANGEBYRANK
	 * @param setkey
	 * @param minRank
	 * @param maxRank
	 * @return number of removed elements
	 * @throws RedisException
	 */
	public <K extends Object> long zremrangebyrank (K setkey, long minRank, long maxRank) throws RedisException; 

	/**
	 * @Redis ZINCRBY
	 * @param setkey
	 * @param score
	 * @param member
	 * @return
	 * @throws RedisException
	 */
	@Redis(versions="1.07")
	public <K extends Object> Double zincrby (K setkey, double score, byte[] member) throws RedisException;
	public <K extends Object> Double zincrby (K setkey, double score, String stringValue) throws RedisException;
	public <K extends Object> Double zincrby (K setkey, double score, Number numberValue) throws RedisException;
	public <K extends Object, T extends Serializable> 
		Double zincrby (K setkey, double score, T object) throws RedisException;

	/**
	 * @Redis ZCOUNT
	 * @param setkey
	 * @param minScore
	 * @param maxScore
	 * @return count of set members with score in the given range.
	 * @throws RedisException
	 */
	public <K extends Object> long zcount (K setkey, double minScore, double maxScore) throws RedisException; 
	// ------------------------------------------------------------------------
	// Commands operating on hashes
	// ------------------------------------------------------------------------
	
	/**
	 * @Redis HSET
	 * @param key
	 * @param field
	 * @param value
	 * @return
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> boolean hset(K key, K field, byte[] value)  throws RedisException;
	
	/**
	 * @Redis HSET
	 * @param key
	 * @param field
	 * @param string
	 * @return
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> boolean hset(K key, K field, String string)  throws RedisException;
	
	/**
	 * @Redis HSET
	 * @param key
	 * @param field
	 * @param number
	 * @return
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> boolean hset(K key, K field, Number number)  throws RedisException;
	
	/**
	 * @Redis HSET
	 * @param <T>
	 * @param key
	 * @param field
	 * @param object
	 * @return
	 */
	@Redis(versions="1.3.4")
	public <K extends Object, T extends Serializable> 
		boolean hset(K key, K field, T object)  throws RedisException;
	
	/**
	 * @Redis HGET
	 * @param key
	 * @param field
	 * @return
	 */
	@Redis(versions="1.3.4")
	public <K extends Object> byte[] hget(K key, K field)  throws RedisException;
	
	
	/**
	 * 
	 * @Redis HEXISTS
	 * @param key
	 * @param field
	 * @return true if the spec'd field exists for the spec'd (hash type) key
	 * @throws RedisException
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> boolean hexists(K key, K field)  throws RedisException;
	
	/**
	 * 
	 * @Redis HDEL
	 * @param key
	 * @param field
	 * @return true if the spec'd field exists for the spec'd (hash type) key
	 * @throws RedisException
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> boolean hdel(K key, K field)  throws RedisException;
	
	/**
	 * 
	 * @Redis HLEN
	 * @param key
	 * @return # of fields/entries in the given hashtable.
	 * @throws RedisException
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> long hlen(K key)  throws RedisException;
	
	/**
	 * 
	 * @Redis HKEYS
	 * @param key
	 * @return list of keys in the given hashtable.
	 * @throws RedisException
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> List<byte[]> hkeys(K key)  throws RedisException;
	
	/**
	 * 
	 * @Redis HVALS
	 * @param key
	 * @return list of values in the given hashtable.
	 * @throws RedisException
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> List<byte[]> hvals(K key)  throws RedisException;
	
	/**
	 * 
	 * @Redis HGETALL
	 * @param key
	 * @return the given hash as a Map<String, byte[]>
	 * @throws RedisException
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> Map<byte[], byte[]> hgetall(K key)  throws RedisException;
	
	// ------------------------------------------------------------------------
	// Transactional commands
	// ------------------------------------------------------------------------
	/**
	 * one option is to return a subclass of JRedis (e.g. JRedisCommandSequence)
	 * and have that interface declare discard and multi.  Benefit is being able
	 * to associate state with the transaction.
	 * @throws RedisException
	 */
	@Redis(versions="2.0")
	public <K extends Object> JRedis multi() throws RedisException;
	/**
	 * @throws RedisException
	 */
	@Redis(versions="2.0")
	public <K extends Object> JRedis discard () throws RedisException;
	
	// ------------------------------------------------------------------------
	// Multiple databases handling commands
	// ------------------------------------------------------------------------
	
//	@Deprecated
//	public <K extends Object> JRedis select (int index) throws RedisException;

	/**
	 * Flushes the db you selected when connecting to Redis server.  Typically,
	 * implementations will select db 0 on connecting if non was specified.  Remember
	 * that there is no roll-back.
	 * @Redis FLUSHDB
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> JRedis flushdb () throws RedisException;

	/**
	 * Flushes all dbs in the connect Redis server, regardless of which db was selected
	 * on connect time.  Remember that there is no rollback.
	 * @Redis FLUSHALL
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> JRedis flushall () throws RedisException;

	/**
	 * Moves the given key from the currently selected db to the one indicated
	 * by <code>dbIndex</code>.
	 * @Redis MOVE
	 * @param key
	 * @param dbIndex
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> boolean move (K key, int dbIndex) throws RedisException;
	
	// ------------------------------------------------------------------------
	// Sorting
	// ------------------------------------------------------------------------
	
	/**
	 * Usage:
	 * <p>Usage:
	 * <p><code><pre>
	 * List<byte[]>  results = redis.sort("my-list-or-set-key").BY("weight*").LIMIT(1, 11).GET("object*").DESC().ALPHA().exec();
	 * for(byte[] item : results) {
	 *     // do something with item ..
	 *  }
	 * </pre></code>
	 * <p>Sort specification elements are all options.  You could simply say:
	 * <p><code><pre>
	 * List<byte[]>  results = redis.sort("my-list-or-set-key").exec();
	 * for(byte[] item : results) {
	 *     // do something with item ..
	 *  }
	 * </pre></code>
	 * <p>Sort specification elements are also can appear in any order -- the client implementation will send them to the server
	 * in the order expected by the protocol, although it is good form to specify the predicates in natural order:
	 * <p><code><pre>
	 * List<byte[]>  results = redis.sort("my-list-or-set-key").GET("object*").DESC().ALPHA().BY("weight*").LIMIT(1, 11).exec();
	 * for(byte[] item : results) {
	 *     // do something with item ..
	 *  }
	 * </pre></code>
	 * 
	 * @Redis SORT
	 */
	public <K extends Object> Sort sort(K key);
	
	// ------------------------------------------------------------------------
	// Persistence control commands
	// ------------------------------------------------------------------------

	/**
	 * @Redis SAVE
	 * @throws RedisException
	 */
	public <K extends Object> void save() throws RedisException;

	/**
	 * @Redis BGSAVE
	 * @throws RedisException
	 */
	public <K extends Object> void bgsave () throws RedisException;

	/**
	 * @Redis BGREWRITEAOF
	 * @return ack message.  
	 * @throws RedisException
	 */
	public <K extends Object> String bgrewriteaof () throws RedisException;

	/**
	 * @Redis LASTSAVE
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> long lastsave () throws RedisException;

//	@Deprecated
//	public <K extends Object> void shutdown () throws RedisException;

// ------------------------------------------------------------------------
// Remote server control commands
// ------------------------------------------------------------------------

	/**
	 * @Redis INFO
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> Map<String, String>	info ()  throws RedisException;
	
	/**
	 * @Redis SLAVEOF
	 * @param host ip address 
	 * @param port
	 */
	public <K extends Object> void slaveof(String host, int port) throws RedisException;
	
	/**
	 * Convenience method.  Turns off replication.
	 * @Redis SLAVEOF "no one"
	 */
	public <K extends Object> void slaveofnone() throws RedisException;
	
	// ------------------------------------------------------------------------
	// Diagnostics commands
	// ------------------------------------------------------------------------
	
	/**
	 * @Redis ECHO
	 * @param msg
	 * @return
	 * @throws RedisException
	 */
	public <K extends Object> byte[] echo (byte[] msg) throws RedisException;
	public <K extends Object> byte[] echo (String msg) throws RedisException;
	public <K extends Object> byte[] echo (Number msg) throws RedisException;
	public <K extends Object, T extends Serializable> 
		byte[] echo (T msg) throws RedisException;
	
	/**
	 * @Redis DEBUG OBJECT <key>
	 * @param key
	 * @return
	 * @throws RedisException
	 * @see {@link ObjectInfo}
	 */
	public <K extends Object> ObjectInfo debug (K key) throws RedisException;
	
	public <K extends Object> boolean setbit(K key, int offset, boolean value) throws RedisException;

	public <K extends Object> boolean getbit(K key, int offset) throws RedisException;
	
}


================================================
FILE: core/api/src/main/java/org/jredis/JRedisFuture.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import org.jredis.protocol.ResponseStatus;


/**
 * The asynchronous interface to Redis.
 * <p>
 * This is effectively a one to one mapping to Redis commands.  Depending on the implementation
 * either the redis response and/or redis write are asynchronous.  Regardless, each method returns
 * an extension of {@link Future} and the returned results conforms to the contract of that interface (which
 * you should review).
 * <p>
 * If your request results in a {@link RedisException}, the call to {@link Future#get()} (of either flavor)
 * will raise a {@link ExecutionException} with {@link ExecutionException#getCause()} returning the underlying
 * {@link RedisException}.
 * <p>
 * Similarly, if the request results in either {@link ClientRuntimeException} or {@link ProviderException}, the
 * {@link Future}'s {@link ExecutionException} will wrap these as the cause.
 * <p>
 * Beyond that , just be aware that an implementation may throw {@link ClientRuntimeException}
 * or an extension to report problems (typically connectivity) or {@link ProviderException}
 * (to highlight implementation features/bugs).  
 * These are {@link RuntimeException} that have been encountered while trying to queue your request.
 * <p>
 * <b>Note</b> that this interface provides no guarantees whatsoever regarding the execution of your requests beyond
 * the strict ordering of the requests per your invocations.  Specifically, in the event of connection issues, this
 * interface's contract does not place any requirements on the implementation beyond to notify the user of such issues
 * either during a call to this interface, or, on the attempt to get the result of a pending response on {@link Future#get()}.
 * Refer to the documentation of the implementation of {@link JRedisFuture} for the specifics of behavior in context of
 * errors. 
 * 
 * @author  Joubin (alphazero@sensesay.net)
 * @version alpha.0, 04/02/09
 * @since   alpha.0
 * 
 */
@Redis(versions="1.07")
public interface JRedisFuture {
	
	// ------------------------------------------------------------------------
	// "Connection Handling"
	// ------------------------------------------------------------------------

	/**
	 * Ping redis
	 */
	public <K extends Object> Future<ResponseStatus> ping ();

	/**
	 * Disconnects the client.
	 * @Redis QUIT
	 */
	public <K extends Object> Future<ResponseStatus> quit ();
	
	/**
	 * Optional connection control command. 
	 * @param <K>
	 * @return
	 */
	public Future<ResponseStatus> flush ();
	
	// ------------------------------------------------------------------------
	// "Commands operating on string values"
	// ------------------------------------------------------------------------

	/**
	 * Bind the value to key.  
	 * @Redis SET
	 * @param key any UTF-8 {@link String}
	 * @param value any bytes.  For current data size limitations, refer to
	 * Redis documentation.
	 * @throws ProviderException on un-documented features/bug
	 * @throws ClientRuntimeException on errors due to operating environment (Redis or network)
	 */
	public <K extends Object> Future<ResponseStatus> set (K key, byte[] value);
	/**
	 * Convenient method for {@link String} data binding
	 * @Redis SET
	 * @param key
	 * @param stringValue
	 * @see {@link JRedis#set(String, byte[])}
	 */
	public <K extends Object> Future<ResponseStatus> set (K key, String stringValue);
	/**
	 * Convenient method for {@link String} numeric values binding
	 * @Redis SET
	 * @param key
	 * @param numberValue
	 * @see {@link JRedis#set(String, byte[])}
	 */
	public <K extends Object> Future<ResponseStatus> set (K key, Number numberValue);
	/**
	 * Binds the given java {@link Object} to the key.  Serialization format is
	 * implementation specific.  Simple implementations may apply the basic {@link Serializable}
	 * protocol.
	 * @Redis SET
	 * @param <T>
	 * @param key
	 * @param object
	 * @see {@link JRedis#set(String, byte[])}
	 */
	public <K extends Object, T extends Serializable> 
		   Future<ResponseStatus> set (K key, T object);

	/**
	 * @Redis SETNX
	 * @param key
	 * @param value
	 * @return
	 */
	public <K extends Object> Future<Boolean> setnx (K key, byte[] value);
	public <K extends Object> Future<Boolean> setnx (K key, String stringValue);
	public <K extends Object> Future<Boolean> setnx (K key, Number numberValue);
	public <K extends Object, T extends Serializable> 
		   Future<Boolean> setnx (K key, T object);

	public <K extends Object> Future<Boolean> setbit(K key, int offset, boolean value);


	
	/**
	 * @Redis GET
	 * @param key
	 * @return
	 */
	public <K extends Object> Future<byte[]> get (K key) ;

	public <K extends Object> Future<byte[]> getset (K key, byte[] value);
	public <K extends Object> Future<byte[]> getset (K key, String stringValue);
	public <K extends Object> Future<byte[]> getset (K key, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<byte[]> getset (K key, T object);


	public <K extends Object> Future<Boolean> getbit(K key, int offset);

		
	/**
	 * @Redis MGET
	 * @param key
	 * @param moreKeys
	 * @return
	 */
	public <K extends Object> Future<List<byte[]>> mget(String ... keys);

	/**
	 * @Redis MSET
	 * @param keyValueMap a {@link Map}ping of {@link String} key names to byte[] values.
	 * @return Future<Boolean> indicating if all of sets were OK or not
	 * @throws RedisException
	 */
	public <K extends Object> Future<ResponseStatus> mset(Map<K, byte[]> keyValueMap);
	
	public <K extends Object> Future<ResponseStatus> mset(KeyValueSet.ByteArrays<K> mappings);
	public <K extends Object> Future<ResponseStatus> mset(KeyValueSet.Strings<K> mappings);
	public <K extends Object> Future<ResponseStatus> mset(KeyValueSet.Numbers<K> mappings);
	public <K extends Object, T extends Serializable> Future<ResponseStatus> mset(KeyValueSet.Objects<K, T> mappings);
	
	/**
	 * @Redis MSETNX
	 * @param keyValueMap a {@link Map}ping of {@link String} key names to byte[] values.
	 * @return Future<Boolean> indicating if all of sets were OK or not
	 * @throws RedisException
	 */
	public <K extends Object> Future<Boolean> msetnx(Map<K, byte[]> keyValueMap);
	
	public <K extends Object> Future<Boolean> msetnx(KeyValueSet.ByteArrays<K> mappings);
	public <K extends Object> Future<Boolean> msetnx(KeyValueSet.Strings<K> mappings);
	public <K extends Object> Future<Boolean> msetnx(KeyValueSet.Numbers<K> mappings);
	public <K extends Object, T extends Serializable> Future<Boolean> msetnx(KeyValueSet.Objects<K, T> mappings);
	
	/**
	 * @Redis INCR
	 * @param key
	 * @return
	 */
	public <K extends Object> Future<Long> incr (K key);

	/**
	 * @Redis INCRBY
	 * @param key
	 * @param delta
	 * @return
	 */
	public <K extends Object> Future<Long> incrby (K key, int delta);

	/**
	 * @Redis DECR
	 * @param key
	 * @return
	 */
	public <K extends Object> Future<Long> decr (K key);

	/**
	 * @Redis DECRBY
	 * @param key
	 * @param delta
	 * @return
	 */
	public <K extends Object> Future<Long> decrby (K key, int delta);

	/**
	 * @Redis SUBSTR
	 * @param listkey
	 * @param from
	 * @param to
	 * @return
	 */
	public <K extends Object> Future<byte[]> substr (K listkey, long from, long to); 
	
	/**
	 * @Redis APPEND
	 * @param key
	 * @param value
	 * @return the length (byte count) of appended key.
	 */
	public <K extends Object> Future<Long> append (K key, byte[] value);
	public <K extends Object> Future<Long> append (K key, String stringValue);
	public <K extends Object> Future<Long> append (K key, Number numberValue);
	public <K extends Object, T extends Serializable> 
		   Future<Long> append (K key, T object);

	/**
	 * @Redis EXISTS
	 * @param key
	 * @return
	 */
	public <K extends Object> Future<Boolean> exists(K key);

	/**
	 * @Redis DEL
	 * @param keys one or more, non-null, non-zero-length, keys to be deleted
	 * @return Future<Long> of number keys actually deleted.
	 */
	public <K extends Object> Future<Long> del (K ... keys);

	/**
	 * @Redis TYPE
	 * @param key
	 * @return
	 */
	public <K extends Object> Future<RedisType> type (K key);
	
	
	// ------------------------------------------------------------------------
	// "Commands operating on the key space"
	// ------------------------------------------------------------------------
	
	/**
	 * @Redis KEYS
	 * @param pattern
	 * @return
	 */
	public <K extends Object> Future<List<byte[]>> keys (K pattern);
	
	/**
	 * Convenience method.  Equivalent to calling <code>jredis.keys("*");</code>
	 * @Redis KEYS
	 * @return
	 * @see {@link JRedis#keys(String)}
	 */
	public <K extends Object> Future<List<byte[]>> keys ();

	/**
	 * @Redis RANDOMKEY
	 * @return
	 */
	public <K extends Object> Future<byte[]> randomkey();
	
	/**
	 * @Redis RENAME
	 * @param oldkey
	 * @param newkey
	 */
	public <K extends Object> Future<ResponseStatus> rename (K oldkey, K newkey);
	
	/**
	 * @Redis RENAMENX
	 * @param oldkey
	 * @param brandnewkey
	 * @return
	 */
	public <K extends Object> Future<Boolean> renamenx (K oldkey, K brandnewkey);
	
	/**
	 * @Redis DBSIZE
	 * @return
	 */
	public <K extends Object> Future<Long> dbsize ();
	
	/**
	 * @Redis EXPIRE
	 * @param key
	 * @param ttlseconds
	 * @return
	 */
	public <K extends Object> Future<Boolean> expire (K key, int ttlseconds); 
	
	/**
	 * @Redis EXPIREAT
	 * @param key
	 * @param UNIX epoch-time in <b>milliseconds</b>.  Note that Redis expects epochtime
	 * in seconds. Implementations are responsible for converting to seconds.
	 * method   
	 * @return
	 * @see {@link System#currentTimeMillis()}
	 */
	public <K extends Object> Future<Boolean> expireat (K key, long epochtimeMillisecs); 
	
	/**
	 * @Redis TTL
	 * @param key
	 * @return
	 */
	public <K extends Object> Future<Long> ttl (K key);
	
	// ------------------------------------------------------------------------
	// Commands operating on lists
	// ------------------------------------------------------------------------

	/**
	 * @Redis RPUSH
	 * @param listkey
	 * @param value
	 */
	public <K extends Object> Future<Long> rpush (K listkey, byte[] value);
	public <K extends Object> Future<Long> rpush (K listkey, String stringValue);
	public <K extends Object> Future<Long> rpush (K listkey, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<Long> rpush (K listkey, T object);
	
	/**
	 * @Redis LPUSH
	 * @param listkey
	 * @param value
	 */
	public <K extends Object> Future<Long> lpush (K listkey, byte[] value);
	public <K extends Object> Future<Long> lpush (K listkey, String stringValue);
	public <K extends Object> Future<Long> lpush (K listkey, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<Long> lpush (K listkey, T object);
	
	/**
	 * @Redis LSET
	 * @param key
	 * @param index
	 * @param value
	 */
	public <K extends Object> Future<ResponseStatus> lset (K key, long index, byte[] value);
	public <K extends Object> Future<ResponseStatus> lset (K key, long index, String stringValue);
	public <K extends Object> Future<ResponseStatus> lset (K key, long index, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<ResponseStatus> lset (K key, long index, T object);
	

	/**
	 * @Redis LREM
	 * @param listKey
	 * @param value
	 * @param count
	 * @return
	 */
	public <K extends Object> Future<Long> lrem (K listkey, byte[] value,       int count);
	public <K extends Object> Future<Long> lrem (K listkey, String stringValue, int count);
	public <K extends Object> Future<Long> lrem (K listkey, Number numberValue, int count);
	public <K extends Object, T extends Serializable> 
		Future<Long> lrem (K listkey, T object, int count);
	
	/**
	 * Given a 'list' key, returns the number of items in the list.
	 * @Redis LLEN
	 * @param listkey
	 * @return
	 */
	public <K extends Object> Future<Long> llen (K listkey);
	
	/**
	 * @Redis LRANGE
	 * @param listkey
	 * @param from
	 * @param to
	 * @return
	 */
	public <K extends Object> Future<List<byte[]>> lrange (K listkey, long from, long to); 

	/**
	 * @Redis LTRIM
	 * @param listkey
	 * @param keepFrom
	 * @param keepTo
	 */
	public <K extends Object> Future<ResponseStatus> ltrim (K listkey, long keepFrom, long keepTo);
	
	/**
	 * @Redis LINDEX
	 * @param listkey
	 * @param index
	 * @return
	 */
	public <K extends Object> Future<byte[]> lindex (K listkey, long index);
	
	/**
	 * @Redis LPOP
	 * @param listKey
	 * @return
	 */
	public <K extends Object> Future<byte[]> lpop (K listkey);
	
	/**
	 * @Redis RPOP
	 * @param listKey
	 * @return
	 */
	public <K extends Object> Future<byte[]> rpop (K listkey);

	/**
	 * @Redis RPOPLPUSH
	 * @param srcList
	 * @param destList
	 * @return
	 */
	public <K extends Object> Future<byte[]> rpoplpush (String srcList, String destList);
	// ------------------------------------------------------------------------
	// Commands operating on sets
	// ------------------------------------------------------------------------
	
	/**
	 * @Redis SADD
	 * @param setkey
	 * @param member
	 * @return
	 */
	public <K extends Object> Future<Boolean> sadd (K setkey, byte[] member);
	public <K extends Object> Future<Boolean> sadd (K setkey, String stringValue);
	public <K extends Object> Future<Boolean> sadd (K setkey, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<Boolean> sadd (K setkey, T object);

	/**
	 * @Redis SREM
	 * @param setKey
	 * @param member
	 * @return
	 */
	public <K extends Object> Future<Boolean> srem (K setkey, byte[] member);
	public <K extends Object> Future<Boolean> srem (K setkey, String stringValue);
	public <K extends Object> Future<Boolean> srem (K setkey, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<Boolean> srem (K setkey, T object);

	/**
	 * @Redis SISMEMBER
	 * @param setKey
	 * @param member
	 * @return
	 */
	public <K extends Object> Future<Boolean> sismember (K setkey, byte[] member);
	public <K extends Object> Future<Boolean> sismember (K setkey, String stringValue);
	public <K extends Object> Future<Boolean> sismember (K setkey, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<Boolean> sismember (K setkey, T object);
	
	/**
	 * @Redis SMOVE
	 * @param srcKey
	 * @param destKey
	 * @param member
	 * @return
	 */
	public <K extends Object> Future<Boolean> smove (K srcKey, K destKey, byte[] member);
	public <K extends Object> Future<Boolean> smove (K srcKey, K destKey, String stringValue);
	public <K extends Object> Future<Boolean> smove (K srcKey, K destKey, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<Boolean> smove (K srcKey, K destKey, T object);
	
	/**
	 * @Redis SCARD
	 * @param setKey
	 * @return
	 */
	public <K extends Object> Future<Long> scard (K setKey);	
	
	/**
	 * @Redis SINTER
	 * @param set1
	 * @param sets
	 * @return
	 */
	public <K extends Object> Future<List<byte[]>> sinter (K set1, K...sets);
	/**
	 * @Redis SINTERSTORE
	 * @param destSetKey
	 * @param sets
	 */
	public <K extends Object> Future<ResponseStatus> sinterstore (K destSetKey, K...sets);

	/**
	 * @Redis SUNION
	 * @param set1
	 * @param sets
	 * @return
	 */
	public <K extends Object> Future<List<byte[]>> sunion (K set1, K...sets);
	
	/**
	 * @Redis SUNIONSTORE
	 * @param destSetKey
	 * @param sets
	 */
	public <K extends Object> Future<ResponseStatus> sunionstore (K destSetKey, K...sets);

	/**
	 * @Redis SDIFF
	 * @param set1
	 * @param sets
	 * @return
	 */
	public <K extends Object> Future<List<byte[]>> sdiff (K set1, K...sets);
	
	/**
	 * @Redis SDIFFSTORE
	 * @param destSetKey
	 * @param sets
	 */
	public <K extends Object> Future<ResponseStatus> sdiffstore (K destSetKey, K...sets);

	/**
	 * @Redis SMEMBERS
	 * @param setkey
	 * @return
	 */
	public <K extends Object> Future<List<byte[]>> smembers (K setkey);
	
	/**
	 * @Redis SRANDMEMBER
	 * @param setkey
	 * @return
	 */
	public <K extends Object> Future<byte[]> srandmember (K setkey);

	/**
	 * @Redis SPOP
	 * @param setkey
	 * @return
	 */
	public <K extends Object> Future<byte[]> spop (K setkey);
	// ------------------------------------------------------------------------
	// Commands operating on sorted sets
	// ------------------------------------------------------------------------
	
	/**
	 * @Redis ZADD
	 * @param setkey
	 * @param score
	 * @param member
	 * @return
	 */
	public <K extends Object> Future<Boolean> zadd (K setkey, double score, byte[] member);
	public <K extends Object> Future<Boolean> zadd (K setkey, double score, String stringValue);
	public <K extends Object> Future<Boolean> zadd (K setkey, double score, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<Boolean> zadd (K setkey, double score, T object);

	/**
	 * @Redis ZREM
	 * @param setKey
	 * @param member
	 * @return
	 */
	public <K extends Object> Future<Boolean> zrem (K setkey, byte[] member);
	public <K extends Object> Future<Boolean> zrem (K setkey, String stringValue);
	public <K extends Object> Future<Boolean> zrem (K setkey, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<Boolean> zrem (K setkey, T object);

	/**
	 * @Redis ZCARD
	 * @param setKey
	 * @return
	 */
	public <K extends Object> Future<Long> zcard (K setKey);	
	
	/**
	 * @Redis ZSCORE
	 * @param setkey
	 * @param member
	 * @return
	 */
	public <K extends Object> Future<Double> zscore (K setkey, byte[] member);
	public <K extends Object> Future<Double> zscore (K setkey, String stringValue);
	public <K extends Object> Future<Double> zscore (K setkey, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<Double> zscore (K setkey, T object);

	/**
	 * @Redis ZRANK
	 * @param setkey
	 * @param member
	 * @return
	 */
	public <K extends Object> Future<Long> zrank (K setkey, byte[] member);
	public <K extends Object> Future<Long> zrank (K setkey, String stringValue);
	public <K extends Object> Future<Long> zrank (K setkey, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<Long> zrank (K setkey, T object);

	/**
	 * @Redis ZREVRANK
	 * @param setkey
	 * @param member
	 * @return
	 */
	public <K extends Object> Future<Long> zrevrank (K setkey, byte[] member);
	public <K extends Object> Future<Long> zrevrank (K setkey, String stringValue);
	public <K extends Object> Future<Long> zrevrank (K setkey, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<Long> zrevrank (K setkey, T object);

	/**
	 * @Redis ZRANGE
	 * @param setkey
	 * @param from
	 * @param to
	 * @return
	 */
	public <K extends Object> Future<List<byte[]>> zrange (K setkey, long from, long to); 

	/**
	 * @Redis ZREVRANGE
	 * @param setkey
	 * @param from
	 * @param to
	 * @return
	 */
	public <K extends Object> Future<List<byte[]>> zrevrange (K setkey, long from, long to); 

	/**
	 * Equivalent to {@link JRedis#zrange(String, long, long)} with the {@link Command.Option#WITHSCORES}.
	 * Unlike the general ZRANGE command that only returns the values, this method returns both
	 * values and associated scores for the specified range.
	 * 
	 * @Redis ZRANGE ... WITHSCORES
	 * @param setkey
	 * @param from
	 * @param to
	 * @return
	 * @see JRedis#zrange(String, long, long)
	 * @see ZSetEntry
	 */
	public <K extends Object> Future<List<ZSetEntry>> zrangeSubset (K setkey, long from, long to); 

	/**
	 * Equivalent to {@link JRedis#zrange(String, long, long)} with the {@link Command.Option#WITHSCORES}.
	 * Unlike the general ZRANGE command that only returns the values, this method returns both
	 * values and associated scores for the specified range.
	 * 
	 * @Redis ZREVRANGE ... WITHSCORES
	 * @param setkey
	 * @param from
	 * @param to
	 * @return
	 * @see JRedis#zrevrange(String, long, long)
	 * @see ZSetEntry
	 */
	public <K extends Object> Future<List<ZSetEntry>> zrevrangeSubset (K setkey, long from, long to); 

	/**
	 * @Redis ZINCRBY
	 * @param setkey
	 * @param score
	 * @param member
	 * @return
	 */
	@Redis(versions="1.07")
	public <K extends Object> Future<Double> zincrby (K setkey, double score, byte[] member);
	public <K extends Object> Future<Double> zincrby (K setkey, double score, String stringValue);
	public <K extends Object> Future<Double> zincrby (K setkey, double score, Number numberValue);
	public <K extends Object, T extends Serializable> 
		Future<Double> zincrby (K setkey, double score, T object);

	/**
	 * @Redis ZRANGEBYSCORE
	 * @param setkey
	 * @param from
	 * @param to
	 * @return
	 */
	public <K extends Object> Future<List<byte[]>> zrangebyscore (K setkey, double minScore, double maxScore); 

	/**
	 * @Redis ZRANGEBYSCORE ... WITHSCORES
	 * @param setkey
	 * @param minScore
	 * @param maxScore
	 * @return
	 */
	public <K extends Object> Future<List<ZSetEntry>> zrangebyscoreSubset (K setkey, double minScore, double maxScore);

	/**
	 * @Redis ZREMRANGEBYSCORE
	 * @param setkey
	 * @param from
	 * @param to
	 * @return number of removed elements
	 */
	public <K extends Object> Future<Long> zremrangebyscore (K setkey, double minScore, double maxScore); 

	/**
	 * @Redis ZCOUNT
	 * @param setkey
	 * @param minScore
	 * @param maxScore
	 * @return number of removed elements
	 */
	public <K extends Object> Future<Long> zcount (K setkey, double minScore, double maxScore); 

	/**
	 * @Redis ZREMRANGEBYRANK
	 * @param setkey
	 * @param from
	 * @param to
	 * @return number of removed elements
	 */
	public <K extends Object> Future<Long> zremrangebyrank (K setkey, long minRank, long maxRank); 
	
	
	// ------------------------------------------------------------------------
	// Commands operating on hashes
	// ------------------------------------------------------------------------
	
	/**
	 * @Redis HSET
	 * @param key
	 * @param field
	 * @param value
	 * @return
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> Future<Boolean> hset(K key, K entry, byte[] value);
	
	/**
	 * @Redis HSET
	 * @param key
	 * @param field
	 * @param string
	 * @return
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> Future<Boolean> hset(K key, K entry, String string);
	
	/**
	 * @Redis HSET
	 * @param key
	 * @param field
	 * @param number
	 * @return
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> Future<Boolean> hset(K key, K entry, Number number);
	
	/**
	 * @Redis HSET
	 * @param <T>
	 * @param key
	 * @param field
	 * @param object
	 * @return
	 */
	@Redis(versions="1.3.4")
	public <K extends Object, T extends Serializable> 
		Future<Boolean> hset(K key, K entry, T object);
	
	/**
	 * @Redis HGET
	 * @param key
	 * @param field
	 * @return
	 */
	@Redis(versions="1.3.4")
	public <K extends Object> Future<byte[]> hget(K key, K entry);
	

	/**
	 * @Redis HINCRBY
	 * @param key
	 * @param entry
	 * @param increment
	 * @return
	 */
	public <K extends Object> Future<Long> hincrby(K key, K entry, long increment);
	
	
	/**
	 * 
	 * @Redis HEXISTS
	 * @param key
	 * @param field
	 * @return true if the spec'd field exists for the spec'd (hash type) key
	 */
	@Redis(versions="1.3.5")
	public <K extends Object> Future<Boolean> hexists(K key, K entry);
	
	/**
	 * 
	 * @Redis HDEL
	 * @param key
	 * @param field
	 * @return true if the spec'd field exists for the spec'd (hash type) key
	 */
	@Redis(versions="1.3.5")
	public <K extends Object> Future<Boolean> hdel(K key, K entry);
	
	/**
	 * 
	 * @Redis HLEN
	 * @param key
	 * @param field
	 * @return # of fields/entries for the given hash type key
	 */
	@Redis(versions="1.3.5")
	public <K extends Object> Future<Long> hlen(K key);
	
	/**
	 * 
	 * @Redis HKEYS
	 * @param key
	 * @return list of keys in the given hashtable.
	 * @throws RedisException
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> Future<List<byte[]>> hkeys(K key);
	
	/**
	 * 
	 * @Redis HVALS
	 * @param key
	 * @return list of values in the given hashtable.
	 * @throws RedisException
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> Future<List<byte[]>> hvals(K key);
	
	/**
	 * 
	 * @Redis HGETALL
	 * @param key
	 * @return the given hash as a Map<String, byte[]>
	 * @throws RedisException
	 */
	@Redis(versions="1.3.n")
	public <K extends Object> Future<Map<byte[], byte[]>> hgetall(K key);
	
	// ------------------------------------------------------------------------
	// Multiple databases handling commands
	// ------------------------------------------------------------------------
	
//	@Deprecated
//	public <K extends Object> Future<ResponseStatus> select (int index);

	/**
	 * Flushes the db you selected when connecting to Redis server.  Typically,
	 * implementations will select db 0 on connecting if non was specified.  Remember
	 * that there is no roll-back.
	 * @Redis FLUSHDB
	 * @return
	 */
	public <K extends Object> Future<ResponseStatus> flushdb ();

	/**
	 * Flushes all dbs in the connect Redis server, regardless of which db was selected
	 * on connect time.  Remember that there is no rollback.
	 * @Redis FLUSHALL
	 * @return
	 */
	public <K extends Object> Future<ResponseStatus> flushall ();

	/**
	 * Moves the given key from the currently selected db to the one indicated
	 * by <code>dbIndex</code>.
	 * @Redis MOVE
	 * @param key
	 * @param dbIndex
	 * @return
	 */
	public <K extends Object> Future<Boolean> move (K key, int dbIndex);
	
	// ------------------------------------------------------------------------
	// Sorting
	// ------------------------------------------------------------------------
	
	/**
	 * <p>For Usage details regarding sort semantics, see {@link JRedis#sort}.  The
	 * only difference in usage is that you must use the {@link Sort#execAsync()} method
	 * which returns a {@link Future} instances.
	 * <p>Usage:
	 * <p><code><pre>
	 * Future<List<byte[]>>  futureResults = redis.sort("my-list-or-set-key").BY("weight*").LIMIT(1, 11).GET("object*").DESC().ALPHA().execAsync();
	 * List<byte[]> results = futureResult.get();  // wait for the asynchronous response to be processed
	 * for(byte[] item : results) {
	 *     // do something with item ..
	 *  }
	 * </pre></code>
	 * 
	 * @Redis SORT
	 * @see Redis
	 * @see Future
	 * 
	 */
	public <K extends Object> Sort sort(K key);
	
	// ------------------------------------------------------------------------
	// Persistence control commands
	// ------------------------------------------------------------------------

	/**
	 * @Redis SAVE
	 */
	public <K extends Object> Future<ResponseStatus> save();

	/**
	 * @Redis BGSAVE
	 */
	public <K extends Object> Future<ResponseStatus> bgsave ();

	/**
	 * @Redis BGREWRITEAOF
	 * @return ack message.  
	 */
	public <K extends Object> Future<String> bgrewriteaof ();

	/**
	 * @Redis LASTSAVE
	 * @return
	 */
	public <K extends Object> Future<Long> lastsave ();


// ------------------------------------------------------------------------
// Remote server control commands
// ------------------------------------------------------------------------

	/**
	 * @Redis INFO
	 * @return
	 */
	public <K extends Object> Future<Map<String, String>>	info () ;

	/**
	 * @Redis SLAVEOF
	 * @param host ip address 
	 * @param port
	 */
	public <K extends Object> Future<ResponseStatus>  slaveof(String host, int port);
	
	/**
	 * Convenience method.  Turns off replication.
	 * @Redis SLAVEOF "no one"
	 */
	public <K extends Object> Future<ResponseStatus>  slaveofnone();
	// ------------------------------------------------------------------------
	// Diagnostics commands
	// ------------------------------------------------------------------------
	
	/**
	 * @Redis ECHO
	 * @param msg
	 * @return
	 */
	public <K extends Object> Future<byte[]> echo (byte[] msg);
	public <K extends Object> Future<byte[]> echo (String msg);
	public <K extends Object> Future<byte[]> echo (Number msg);
	public <K extends Object, T extends Serializable> 
		Future<byte[]> echo (T msg);
		
	/**
	 * @Redis DEBUG OBJECT <key>
	 * @param key
	 * @return
	 */
	public <K extends Object> Future<ObjectInfo> debug (K key);
	

}


================================================
FILE: core/api/src/main/java/org/jredis/KeyValueSet.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;

import java.io.Serializable;


/**
 * [TODO: document me!]
 *
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, Nov 25, 2009
 * @since   alpha.0
 * 
 */

public interface KeyValueSet <K extends Object, T> {
	public KeyValueSet<K, T> add(K key, T value);
	byte[][] getMappings ();
	
	public interface ByteArrays<K extends Object> extends KeyValueSet<K, byte[]>{/* nop */}
	public interface Numbers<K extends Object>  extends KeyValueSet<K, Number>{/* nop */}
	public interface Strings<K extends Object>  extends KeyValueSet<K, String>{/* nop */}
	public interface Objects<K extends Object, T extends Serializable> extends KeyValueSet<K, T>{/* nop */}
	
//	abstract static class  GenImpl<T> implements  BulkSetMappings<T> {
//		protected final Map<String, T> map = new HashMap<String, T>();
//        public BulkSetMappings<T> add (String key, T value) {
//        	map.put(key, value);
//	        return this;
//        }
//        public Map<String, T> getMappings () { return map; }
//        abstract protected byte[] toBytes(T value) ;
//	}
//	public final static class BytesValueMappings extends GenImpl<byte[]> implements  BulkSetMappings<byte[]> {
//        abstract protected byte[] toBytes(T value) {
//        	
//        }
//	}
//	public final static class StringValueMappings extends GenImpl<String> implements  BulkSetMappings<String> {
//        abstract protected byte[] toBytes(T value) {
//        	
//        }
//	}
//	public final static class NumberValueMappings extends GenImpl<Number> implements  BulkSetMappings<Number> {
//        abstract protected byte[] toBytes(T value) {
//        	
//        }
//	}
//	public final static class ObjectValueMappings <T extends Serializable> extends GenImpl<T> implements  BulkSetMappings<T> {
//        abstract protected byte[] toBytes(T value) {
//        	
//        }
//	}
//	
//	public static final class TestMe {
//		@SuppressWarnings("null")
//        public static void main (String[] args) {
//	        BulkSetMappings<byte[]> byteMappings = new BytesValueMappings();
//	        byteMappings
//	        	.add("foo", "woof".getBytes())
//	        	.add("bar", "meow".getBytes())
//	        	.add("paz", "the salt".getBytes())
//	        	.add("x?", "yz!".getBytes());
//	        
//	        try {
//		        JRedis jredis = null;
//	            if(jredis.mset(byteMappings)) {
//	            	System.out.println("ok!");
//	            }
//            }
//            catch (RedisException e) {
//	            // TODO Auto-generated catch block
//	            e.printStackTrace();
//            }
//        }
//	}
}


================================================
FILE: core/api/src/main/java/org/jredis/NotSupportedException.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;


/**
 * Providers can throw this exception in response for requests for <i>optional</i>
 * aspects of Redis Specification.
 * 
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, 04/02/09
 * @since   alpha.0
 * 
 */
public class NotSupportedException extends ProviderException {

	/** 	 */
	private static final long serialVersionUID = _specification.Version.major;

	/**
	 * @param string
	 */
	public NotSupportedException(String string) {
		super (string);
	}
	/**
	 * @param string
	 */
	public NotSupportedException(String string, Throwable cause) {
		super (string, cause);
	}

}


================================================
FILE: core/api/src/main/java/org/jredis/ObjectEncoding.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;

/**
 * Internal Redis object encoding schemes.
 *   
 * @see ObjectInfo#getEncoding()
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, Mar 17, 2010
 * @since   alpha.0 | Redis 1.3.5
 *
 */
public enum ObjectEncoding {
	/** Redis 'raw'  */
	RAW (),
	/** Redis 'int'  */
	INT (),
	/** Redis 'zipmap'  */
	ZIPMAP(),
	/** Redis 'hashtable'  */
	HASHTABLE,
	/** Redis 'embstr'  */
	EMBSTR,
}

================================================
FILE: core/api/src/main/java/org/jredis/ObjectInfo.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;

import java.util.ArrayList;
import java.util.Formatter;
import java.util.List;
import java.util.StringTokenizer;

/**
 * Encapsulates the debug information returned by Redis in response to DEBUG
 * OBJECT <key>.
 * 
 * @author Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, Mar 16, 2010
 * @since alpha.0
 * @see JRedis#debug(String)
 */

public class ObjectInfo {
	private static final long numTokens = 7;
	private final String keyAddress;
	private final long keyRefCount;
	private final ObjectEncoding encoding;
	private final long serializedLength;
	private final long lru;
	private final long lruSecondsIdle;

	public ObjectInfo(String keyAddress, long keyRefCount,
			ObjectEncoding encoding, long serializedLength, long lru,
			long lruSecondsIdle) {
		this.keyAddress = keyAddress;
		this.keyRefCount = keyRefCount;
		this.encoding = encoding;
		this.serializedLength = serializedLength;
		this.lru = lru;
		this.lruSecondsIdle = lruSecondsIdle;
	}

	/**
	 * @return the keyAddress as {@link String} representation of hex address.
	 *         Ex: "0x100d60"
	 */
	public String getKeyAddress() {
		return keyAddress;
	}

	/** @return the keyRefCount */
	public long getKeyRefCount() {
		return keyRefCount;
	}

	/**
	 * @return the valueAddress as {@link String} representation of hex address.
	 *         Ex: "0x100d60"
	 */

	/** @return the encoding */
	public ObjectEncoding getEncoding() {
		return encoding;
	}

	/**
	 * Convenience method to convert the address info to long. Ex: "0x101860" =>
	 * 1054816. (Note that the returned number is (obviously) base 10.)
	 * 
	 * @param addressStrRep
	 * @return
	 */
	public static long toLong(String addressStrRep) {
		return Long.parseLong(addressStrRep.substring(2), 16);
	}

	@SuppressWarnings("boxing")
	@Override
	public String toString() {
		Formatter formatter = new Formatter();
		formatter
				.format("ObjectInfo: key [addr:%s  refCnt: %d] encoding:%s serializedLength: %d lru %d lruSecondsIdle %d",
						keyAddress, keyRefCount, encoding, serializedLength,
						lru, lruSecondsIdle);
		return formatter.toString();
	}

	/**
	 * Strictly speaking, this doesn't belong here but cuts down on redundant
	 * code. Parses the DEBUG OBJECT <key> response to return an instance of
	 * {@link ObjectInfo}.
	 * 
	 * @param strRep
	 * @return {@link ObjectInfo}
	 */
	static public final ObjectInfo valueOf(String strRep) {
		StringTokenizer tokenizer = new StringTokenizer(strRep);
		int tokenCnt = tokenizer.countTokens();

		if (tokenCnt != numTokens)
			throw new ProviderException(
					"DEBUG OBJECT <key> response does not conform to expected format.  Got: ["
							+ strRep + "]");

		List<String> tokens = new ArrayList<String>(tokenCnt);

		while (tokenizer.hasMoreElements())
			tokens.add(tokenizer.nextToken());

		String keyAddr = tokens.get(1).substring(3);
		String keyCnt = tokens.get(2).substring("refcount:".length());
		String encodingRep = tokens.get(3).substring("encoding:".length());
		String serlen = tokens.get(4).substring("serializedlength:".length());
		String lru = tokens.get(5).substring("lru:".length());
		String lruSecondsIdle = tokens.get(6).substring(
				"lru_seconds_idle:".length());

		ObjectInfo info = new ObjectInfo(keyAddr, Integer.parseInt(keyCnt),
				ObjectEncoding.valueOf(encodingRep.toUpperCase()),
				Integer.parseInt(serlen), Integer.parseInt(lru),
				Integer.parseInt(lruSecondsIdle));

		return info;
	}
}


================================================
FILE: core/api/src/main/java/org/jredis/ProviderException.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;



/**
 * Used by JRedis implementation providers to indicate an exception related to the
 * implementation of the specification.  Effectively, this exception and its extensions
 * should only be thrown when a fault has occurred that is neither a {@link SystemException},
 * nor a Redis prompted server side error.
 * 
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, 04/02/09
 * @since   alpha.0
 * 
 */
public class ProviderException extends ClientRuntimeException {

	/** */
	public static final long version = _specification.Version.major;

	/**  */
	private static final long	serialVersionUID	= _specification.Version.major;
	

	/**
	 * @param message
	 */
	public ProviderException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param message
	 * @param cause
	 */
	public ProviderException(String message, Throwable cause) {
		super(message, cause);
		// TODO Auto-generated constructor stub
	}

}


================================================
FILE: core/api/src/main/java/org/jredis/Query.java
================================================
/*
 *   Copyright 2009-2010 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;

import java.util.List;
import java.util.concurrent.Future;

/**
 * Provides for specifying and chaining query predicates.  The results of the query directive are returned
 * as an ordered {@link List} of <code>byte[]</code> values.
 * 
 * <p>Specific {@link Query} types are obtained from the {@link JRedis} api.  Extensions of this interface
 * allow for the definition of natural expression of the query clauses.  Such interfaces should <b>only</b> 
 * define methods for the optional elements of the specific query type.  Redis interface itself will also
 * only allow for obtaining a reference to such an interface by specifying the required arguments in the
 * associated method signature.
 * 
 * <p>For example, to get a {@link Sort} instance, {@link JRedis} api specifies the required argument,  
 * (namely the <i>the key</i>) in the method signature for {@link JRedis#sort(String)}, and all the optional
 * elements of the SORT command are provided for in the {@link Sort} interface:
 * <p>
 * <pre><code>
 * Sort    sort = redis.sort (key)
 * List<byte[]>  results = BY("foo*").LIMIT(1, 11).GET("*woof*").DESC().<b>exec()</b>;
 * for(byte[] item : results) {
 *     // do something with item ..
 *  }
 * 
 * </code></pre>
 * 
 * @see Sort
 *
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, 04/02/09
 * @since   alpha.0
 * 
 */
public interface Query {
	
	/**
	 * Executes the query.
	 * 
	 * @return the resultant value list from redis.
	 * @throws IllegalStateException
	 * @throws RedisException
	 */
	// TODO: why illegal state?
	public List<byte[]> exec () throws IllegalStateException, RedisException;	
	public Future<List<byte[]>> execAsync ();	
	
	public static class Support {
		public static long unpackValue (List<byte[]> queryResult){
			if(null == queryResult) throw new ClientRuntimeException("queryResult is null");
			if(queryResult.size() < 1) throw new ClientRuntimeException("queryResult must have at least 1 entry");
			return Long.parseLong(new String(queryResult.get(0)));
		}
	}
}


================================================
FILE: core/api/src/main/java/org/jredis/Redis.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Annotation to mark complaint elements of JRedis implementations.
 * 
 * [TODO: document me!]
 *
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, 04/02/09
 * @since   alpha.0
 * 
 */
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PACKAGE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Redis {
	/**
	 * @return array of strings denoting version of redis protocol supported
	 */
	String[] versions();
}


================================================
FILE: core/api/src/main/java/org/jredis/RedisException.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;

import org.jredis.protocol.Command;

//import org.jredis.connector.ProviderException;

/**
 * [TODO: update doc regarding "extensions"]
 * 
 * RedisExceptions are only created/raised subsequent to an error result from the redis server.
 * These exceptions are <b>_not_</b> intended as a general purpose exception mechanism for
 * implementations of this specification.  Accordingly, this exception (and extensions if any)
 * do not (and must not) provide default no arg constructors.  (Minimal information required is
 * an associated {@link Command} object.)  
 * 
 * <p>Further, this class (and extension if any) should never expose a constructor accepting 
 * an underlying 'cause' (as in {@link Exception#Exception(Throwable)}), since this excpetion,
 * to repeat, has very specific semantics:  <b>Redis has responded with an error 
 * status to an issued command and the content of that message (e.g. "-ERR operation on wrong type"</b>
 * is what is required for instantiating a {@link RedisException}.
 * 
 * @see ClientRuntimeException
 *
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, 04/02/09
 * @since   alpha.0
 * 
 */
public final class RedisException extends Exception {

	/**  */
	public static final long version = _specification.Version.major;

	/**  */
	private static final long	serialVersionUID = version;

	/**  */
	private final Command command;
	
//	public RedisException (String message) {
//		super (message);
//	}
	
	public RedisException (Command command, String message){
		super (message);
		this.command = command;
	}

	/**  @return the associated {@link Command} if any */
	public Command getCommand () { return command; }
	
	public String toString () {
		return "Exception on [" + command.code + "] => " + getMessage(); 
	}
}


================================================
FILE: core/api/src/main/java/org/jredis/RedisInfo.java
================================================
/*
 *   Copyright 2009-2012 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;

import java.util.Map;

/**
 * RedisInfo is a convenience enum that tracks the canonical entries returned by INFO command.
 * Exception to this is the db## when ## is db number e.g. db10.  
 * <b>
 * Note that of course the {@link JRedis#info()} command returns a {@link Map} so you can always
 * query for the db info directly using the returned map.
 * 
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0-05062012
 * @since   alpha.0
 * 
 */
public enum RedisInfo {
	redis_git_dirty,
	redis_git_sha1,
	used_cpu_user,
	client_longest_output_list,
	latest_fork_usec,
	used_memory_peak,
	pubsub_patterns,
	used_cpu_sys_children,
	used_memory_rss,
	lru_clock,
	aof_enabled,
	mem_fragmentation_ratio,
	used_memory_peak_human,
	loading,
	client_biggest_input_buf,
	used_cpu_sys,
	keyspace_hits,
	evicted_keys,
	pubsub_channels,
	used_cpu_user_children,
	gcc_version,
	expired_keys,
	mem_allocator,
	keyspace_misses,
	arch_bits,
	multiplexing_api,
	redis_version,
	process_id,
	connected_clients,
	connected_slaves,
	blocked_clients,
	used_memory,
	used_memory_human,
	changes_since_last_save,
	bgsave_in_progress,
	last_save_time,
	bgrewriteaof_in_progress,
	total_connections_received,
	total_commands_processed,
	uptime_in_seconds,
	uptime_in_days,
//	hash_max_zipmap_entries,
//	hash_max_zipmap_value,
//	vm_enabled,
	os,
	tcp_port,
	used_memory_lua,
	last_bgsave_status,
	instantaneous_ops_per_sec,
	rejected_connections,
	run_id,
	bgrewriteaof_scheduled,	
	role
}

================================================
FILE: core/api/src/main/java/org/jredis/RedisType.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;

/**
 * 
 * @author Joubin Houshyar (alphazero@sensesay.net)
 */
public enum RedisType {
	NONE, 
	string,
	list,
	set,
	hash
}

================================================
FILE: core/api/src/main/java/org/jredis/Semantics.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;


/**
 * Interface to specify the semantics of the actual key/values stored in the Redis server.
 *
 * @author  Joubin (alphazero@sensesay.net)
 * @version alpha.0, Aug 23, 2009
 * @since   alpha.0
 * 
 */

public interface Semantics {
	/**
	 * @param <T>
	 * @param keyClass
	 * @return the Codec used to 
	 */
	public <T> Codec<T> getKeyCodec(Class<T> keyClass);
	/**
	 * @param <T>
	 * @param keyClass
	 * @param keyCodec
	 * @return
	 */
	public <T> Semantics setKeyCodec(Class<T> keyClass, Codec<T> keyCodec);
	/**
	 * @param <T>
	 * @param valueClass
	 * @return
	 */
	public <T> Codec<T> getValueCodec(Class<T> valueClass);
	/**
	 * @param <T>
	 * @param valueClass
	 * @param valueCdec
	 * @return
	 */
	public <T> Semantics setValueCodec(Class<T> valueClass, Codec<T> valueCdec);
}


================================================
FILE: core/api/src/main/java/org/jredis/Sort.java
================================================
/*
 *   Copyright 2009-2010 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */


package org.jredis;

import java.util.List;


/**
 * Sort, a type of {@link Query}, provides for specifying and chaining the query predicates.  The results of the sort directive are returned
 * as an ordered {@link List} of <code>byte[]</code> values.
 *
 * <p>Sort instances are obtained directly from the {@link JRedis} client, by calling the eponymous method {@link JRedis#sort(String)}, which expects
 * a <i>key name</i> as its required arguments.  
 * 
 * <br><i>[Note: this provides the pattern for all future query types: required args are specified in the method that returns the {@link Query} form.]</i>
 *  
 * <p>As with all {@link Query} forms, 
 * <b>do not forget to call {@link Query#exec()} at the end</b>! 
 *
 * <p>Usage:
 * <p><code><pre>
 * List<byte[]>  results = redis.<b>sort</b>("my-list-or-set-key").BY("weight*").LIMIT(1, 11).GET("object*").DESC().ALPHA().<b>exec()</b>;
 * for(byte[] item : results) {
 *     // do something with item ..
 *  }
 * </pre></code>
 * <p>Sort specification elements are all optional.  You could simply say:
 * <p><code><pre>
 * List<byte[]>  results = redis.sort("my-list-or-set-key").<b>exec()</b>;
 * for(byte[] item : results) {
 *     // do something with item ..
 *  }
 * </pre></code>
 * <p>Sort specification elements are also can appear in any order -- the client implementation will send them to the server
 * in the order expected by the protocol, although it is good form to specify the predicates in natural order:
 * <p><code><pre>
 * List<byte[]>  results = redis.sort("my-list-or-set-key").GET("object*").DESC().ALPHA().BY("weight*").LIMIT(1, 11).<b>exec()</b>;
 * for(byte[] item : results) {
 *     // do something with item ..
 *  }
 * </pre></code>
 * 
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, 04/02/09
 * @since   alpha.0
 * 
 */
public interface Sort extends Query {
	/** species the BY clause */
	<K extends Object> Sort BY    (K pattern);
	
	/** specifies the GET clause */
	<K extends Object> Sort GET   (K pattern);
	
	/** 
	 * Specifies the LIMIT class: from is the initial index, count is the number of results 
	 * @param from  limit sort results to element at index 'from'
	 * @param count limit sort results to count - results will be result[from] to result[from+count], inclusve.
	 */
	Sort LIMIT (long from, long count);
	
	/** default sort is ASCending -- use this in your sort to specify DESC sort */
	Sort DESC  ();
	
	/** sort is be default numeric -- use this to indicate lexiographic alphanumeric sort */
	Sort ALPHA ();
	
	/** 
	 * Store the sort results in another key.
	 * <p>
	 * <b>This command alters the semantics of the {@link Query#exec()} (or  {@link Query#execAsync()()}</b>
	 * to return a list of size 1, with the single entry being the long value representing the size
	 * of the created (store destination) list.  
	 * <p>
	 * <pre>
	 *	// NOTE: this is a Long List - javadoc doesn't print the brackets.
	 *	//
	 *	List<Long> storeResult = DefaultCodec.toLong(jredis.sort(srcSet).DESC().STORE(destKey).exec());
	 *
	 *	// the STORE() option changes result semantics -- now we expect our list to have a single entry
	 *	// for the size of the stored list
	 *	//
	 *	size = sortedSet.get(0);
	 * 
	 * 	System.out.format("Sorted list (size: %d):\n", size);
	 * </pre>
 	 */
	<K extends Object> Sort STORE (K destKey);
}


================================================
FILE: core/api/src/main/java/org/jredis/ZSetEntry.java
================================================
/*
 *   Copyright 2010 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;

/**
 * An entry in a Redis "sorted set" and returned by a subset Z* commands.  
 *
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, Mar 20, 2010
 * @since   alpha.0
 * 
 */

public interface ZSetEntry{
	/**  @return the value of this entry in a Redis sorted set */
	byte[] getValue();
	
	/** @return the score associated with the value */
	double getScore();
}


================================================
FILE: core/api/src/main/java/org/jredis/_specification.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis;

/**
 * [TODO: document me!]
 *
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, 04/02/09
 * @since   alpha.0
 * 
 */
public interface _specification {

	/** specification level */
	public interface Version {
		long	major	= 0xA;
	    long 	minor	= 0x1;
	}
}

================================================
FILE: core/api/src/main/java/org/jredis/connector/Connection.java
================================================
/*
 *   Copyright 2009-2010 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis.connector;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import org.jredis.ClientRuntimeException;
import org.jredis.NotSupportedException;
import org.jredis.ProviderException;
import org.jredis.RedisException;
import org.jredis.protocol.Command;
import org.jredis.protocol.Protocol;
import org.jredis.protocol.Response;

/**
 * {@link Connection} defines the general (required) and optional 
 * contract of a JRedis connection.
 * <p>
 * Redis protocol does not provide for request sequencing (for a
 * variety of good reasons) and guaranteed delivery semantics are
 * supported only by multi-exec (redis transaction) protocol.  Accordingly,
 * {@link Connection} is not required (given that it can not) to support
 * fault-tolerant semantics.  
 * <p>
 * If a connection <i>faults</i> during an interaction with the server 
 * (e.g. anytime during send and receive) it must raise one of the following:
 * <ul>
 * <li>{@link ConnectionReset} - connection faulted but connection re-established
 * <li>{@link ConnectionFault} - connection faulted and reconnect not possible.
 * </ul>  
 * In the former case, the specific request that was being processed will not
 * be transparently re-issued by the connector.  The application layer must
 * determine what course of action to take.  
 * <p>
 * In either case, it should be noted that there exists a tiny (but possible)
 * window where even with append logging on the server, where the server received
 * and processed the request but never could reply (e.g. the server crashes for
 * whatever reason).  These considerations are irrelevant to read only commands,
 * but are significant in context of write ops (e.g. INCR).  If you require
 * guarantees on writes, you must use redis transactions (e.g. multi-bulk).
 * 
 * <p>
 * That said, the {@link Connection}'s optional event and state management
 * do provide sufficient support for a softer set of guarantees for 
 * transparent connection management (on fault detection, connect on demand,
 * etc.).
 * 
 * <br> 
 * @author  joubin (alphazero@sensesay.net)
 * @date    Sep 12, 2010
 * 
 */
public interface Connection {

	/**
	 * The {@link ConnectionSpec} of a Connection must be invariant during its life-cycle.
	 * @return the associated {@link ConnectionSpec} for this Connection. 
	 */
	public ConnectionSpec getSpec();
	
	/**
	 * A <b>blocking call</b> to service the specified request.  This method will return upon 
	 * the completion of the request response protocol with the connected redis server.  Timeouts
	 * and related matters are not addressed by this method or the {@link Protocol} interface
	 * and can (and should) be addressed at the implementation level (for example when creating 
	 * handler instances using a specification set, including max wait for synchronous response.)
	 * 
	 * <p>{@link Modality#Asynchronous} handlers must always throw a {@link ClientRuntimeException}
	 * for <b>this method which violates the contract for</b> {@link Modality#Asynchronous}  <b>handlers</b>.
	 * 
	 * @param cmd
	 * @param args
	 * @return
	 * @throws RedisException
	 * @throws ClientRuntimeException
	 * @throws ProviderException
	 */
	public Response serviceRequest (Command cmd, byte[]...args) throws RedisException, ClientRuntimeException, ProviderException; 
	
	
	/**
	 * A <b>non-blocking call</b> to service the specified request at some point in the future.  
	 * This method will return immediately with a {@link Future} object of parametric type {@link Response}
	 * <p>
	 * When the request is serviced, call to {@link Future#get()} will return the request response.
	 * <p>{@link Modality#Synchronous} handlers must always throw a {@link ClientRuntimeException}
	 * for <b>this method which violates the contract for</b> {@link Modality#Synchronous}  <b>handlers</b>.
	 * <p>
	 * If request resulted in a redis error ({@link RedisException}), the exception will be set as the cause of
	 * the corresponding {@link ExecutionException} of the {@link Future} object returned.
	 * @param cmd
	 * @param args
	 * @return the {@link Future} {@link Response}.
	 * @throws ClientRuntimeException
	 * @throws ProviderException
	 * @see Future
	 * @see ExecutionException
	 */

	public Future<Response> queueRequest (Command cmd,  byte[]...args) throws ClientRuntimeException, ProviderException;
	
	// ------------------------------------------------------------------------
	// State management -- optional
	/**
	 */
	public enum State {
		/** Connection is initialized and ready. Will connect on demand */
		INITIALIZED,
		/** Connection is established. */
		CONNECTED,
		/** Not connected to remote server.  Can connect on demand. */
		DISCONNECTED,
		/** Connection is shutdown and can be disposed. */
		TERMINATED
	}
	
	// ------------------------------------------------------------------------
	// Event management -- optional
	 
	 	/**
		 * Connection.Event propagation.
		 * @optional  
	 	 * @param connListener
		 * @return true if listener was successfully added.
	 	 */
	 	public boolean addListener(Listener connListener);
	 
	/**
	 * <b>Optional</b> event propagation method.  Removes the specified listenr
	 * from the list of {@link Connection.Listener}s.
	 * @param connListener
	 * @return true if the listener was actually present and was removed.
	 */
	public boolean removeListener(Listener connListener);

	// ========================================================================
	// Innner Types
	// ========================================================================
	
	/**
	 * Enumeration of the top-level properties of the {@link Connection} that can be
	 * specified by the User.  
	 *
	 * @author  joubin (alphazero@sensesay.net)
	 * @date    Sep 13, 2010
	 * 
	 */
	public enum Property {
		/** the redis server host name or ip */
		HOST,
		/** the Redis server port */
		PORT,
		/** the password used   */
		CREDENTIAL,
		/** The db selected on (re-)connect */
		DB,
		/** Defines the {@link Connection}'s {@link Connection.Modality} */
		MODALITY,
		/** On Connect (or reconnect after faults or timeouts) the maximum duration that you are willing to wait, milliseconds */
		MAX_CONNECT_WAIT,
		/** number of reconnect attempts after timeouts or faults. */
		MAX_CONNECT_ATTEMPT,
		/** if specified, is used to create the new protocol */
		PROTOCOL_CLASS,
		/** if specified, is used to create the new protocol */
		PROTOCOL_FACTORY,
		/** if specified, is used to create the new connection */
		CONNECTION_CLASS,
		/** if specified, is used to create the new connection. */
		CONNECTION_FACTORY,
		;// -- fini
	}
	/**
	 * Enum for defining the operational modality of the protocol handlers.
	 *   
	 * @author  Joubin Houshyar (alphazero@sensesay.net)
	 * @version alpha.0, 04/02/09
	 * @since   alpha.0
	 * 
	 */
	public enum Modality {
		/** blocking request/reply semantics */
		Synchronous,
		/** non-blocking request/future-response semantics */
		Asynchronous,
		/**  */
		PubSub,
		/**  */
		Monitor,
		;
		// -- end
	}
	
	/**
	 * {@link Connection} listeners' callback API.
	 * @optional
	 * @author  Joubin Houshyar (alphazero@sensesay.net)
	 * @version alpha.0, Mar 29, 2010
	 * @since   alpha.0
	 * 
	 */
	public interface Listener {
		public void onEvent(Connection.Event event);
	}
	
	/**
	 * Events raised by the {@link Connection}.
	 * <br>Events are typed and may have optional event info (Objects).
	 * @optional
	 * @author  Joubin Houshyar (alphazero@sensesay.net)
	 * @version alpha.0, Mar 29, 2010
	 * @since   alpha.0
	 * 
	 */
	@SuppressWarnings("serial")
    final public static class Event extends org.jredis.Event<Connection, Event.Type, Object>{
		/**
         * @param src
         * @param type
         */
        public Event (Connection src, Type type) {
	        super(src, type);
        }
        public Event (Connection src, Type type, Object eventInfo) {
	        super(src, type, eventInfo);
        }
		/** Connector.Event types. */
		public enum Type {
//			INITIALIZED,
			/** Raised when Connector is about to initiate the connect protocol */
			CONNECTING,
			/** Raised when Connector has established connectivity to the remote server */
			CONNECTED,
			/** Raised when Connector is about to initiate the disconnect protocol */
			DISCONNECTING,
			/** Raised when Connector has disconnected from the remote server */
			DISCONNECTED,
			/** Raised when the Connector encounters a {@link ClientRuntimeException} or {@link ProviderException}.  */
			FAULTED,
			/** 
			 * Raised to signal the beginning of the shutdown sequence (commences after listerners are notified.  
			 * Cease all activity on receipt 
			 * */
//			STOPPING,
			/** Raised when Connector is terminated.  Dispose of your references on receipt. */
			SHUTDOWN
		}
	}

	// ------------------------------------------------------------------------
    // Connection.Flag
    // ------------------------------------------------------------------------
    /**
     * Connection flags - not necessarily mutually exclusive.  Uses a 32 bit
     * mask for 32 (max) disctinct flags for Connnections.
     *
     * @author  joubin (alphazero@sensesay.net)
     * @date    Sep 18, 2010
     * 
     */
    public enum Flag {  	
    	/** if true will connect immediately on initialization.  otherwise on first use. */
    	CONNECT_IMMEDIATELY,
//    	/**  */
//    	TRANSPARENT_RECONNECT,
//    	/**  */
//    	RETRY_AFTER_RESET, 
    	/** if true uses pipelining */
    	PIPELINE,
    	/** Connection can be used by more than 1 client concurrently */
    	SHARED,
    	/** if true attempts to maintain connection. drops are detected. Better fault tolerance guarantees, w/ some performance impact */
    	RELIABLE,
    	/** if true connection maintains conversational state - for use with multi-exec */
    	STATEFUL,
    	/** if true service requests are logged (verbose/slower due to io)  */
    	TRACE,
    	;
		public final int bitmask;
		static final int OPAQUE_BITMASK = 0x0000;
		Flag (){
			this.bitmask = (int)Math.pow(2, ordinal());
		}
		static final public int bitset(Flag...flags){
			int bitset = OPAQUE_BITMASK;
			return bitset(bitset, flags);
		}
		static final public int bitset(final int bitset, Flag...flags){
			int _bitset = bitset;
			for(Flag f : flags) _bitset = _bitset | f.bitmask;
			return _bitset;
		}
		static final public int bitclear(final int bitset, Flag...flags){
			int _bitset = bitset;
			for(Flag f : flags) _bitset = _bitset ^ f.bitmask;
			return _bitset;
		}
		public static boolean isSet(int bitset, Flag flag) {
			return (bitset & flag.bitmask) > OPAQUE_BITMASK;
		}
    }
    
	// ------------------------------------------------------------------------
    // Connection.Socket
    // ------------------------------------------------------------------------
    public interface Socket {
    	/**
    	 * Flag keys for SocketFlag settings of the connection specification.
    	 * @see ConnectionSpec#getSocketFlag(SocketFlag)
    	 * @author Joubin Houshyar (alphazero@sensesay.net)
    	 *
    	 */
    	public enum Flag {
    		/** Corresponds to SO_KEEP_ALIVE flag of {@link Socket}.  @see {@link Socket#setSoTimeout(int)} */
    		SO_KEEP_ALIVE,
    		;
    	}
    	/**
    	 * Property keys for SocketProperty settings of the connection specification.
    	 * @see ConnectionSpec#getSocketProperty(SocketProperty)
    	 * @author Joubin Houshyar (alphazero@sensesay.net)
    	 *
    	 */
    	public enum Property {
    		/** 
    		 * Corresponds to <code><b>SO_SNDBUF</b></code> flag. see {@link Socket#setSendBufferSize(int)} 
    		 * <p>expected value is an <b><code>int</code></b> or an {@link Integer}.
    		 */
    		SO_SNDBUF,
    		
    		/** 
    		 * corresponds to SO_RCVBUF flag. see {@link Socket#setReceiveBufferSize(int)} 
    		 */
    		SO_RCVBUF,
    		
    		/** 
    		 * corresponds to SO_TIMEOUT flag.  see {@link Socket#setSoTimeout(int)} 
    		 */
    		SO_TIMEOUT,
    		
    		/**
    		 * Socket performance preferences.
    		 * <p> This property will be used in conjunction with other associated properties.
    		 * @See {@link SocketProperty#latency}
    		 * @See {@link SocketProperty#bandwidth}
    		 * @See {@link Socket#setPerformancePreferences(int, int, int)} for details.
    		 */
    		SO_PREF_CONN_TIME,

    		/**
    		 * Socket performance preferences.
    		 * <p> This property will be used in conjunction with other associated properties.
    		 * @See {@link SocketProperty#bandwidth}
    		 * @See {@link SocketProperty#connection_time}
    		 * @See {@link Socket#setPerformancePreferences(int, int, int)} for details.
    		 */
    		SO_PREF_LATENCY,

    		/**
    		 * Socket performance preferences.
    		 * <p> This property will be used in conjunction with other associated properties.
    		 * @See {@link SocketProperty#latency}
    		 * @See {@link SocketProperty#connection_time}
    		 * @See {@link Socket#setPerformancePreferences(int, int, int)} for details.
    		 */
    		SO_PREF_BANDWIDTH,
    	}
    }
	// ------------------------------------------------------------------------
    // Connection.Factor
    // ------------------------------------------------------------------------
    public interface Factory {
    	/**
    	 * Creates a connection to a redis server using the specified connection attributes.
    	 * @param spec of the new connection
    	 * @return a new {@link Connection} initialized per <code>spec</code>.
    	 * @throws ClientRuntimeException if the requirements exceed system resources/limits.
    	 * @throws NotSupportedException if the {@link ConnectionSpec} provided 
    	 * can not be supported by the provider.
    	 */
    	public Connection newConnection (ConnectionSpec spec) throws ClientRuntimeException, NotSupportedException;
    }
}


================================================
FILE: core/api/src/main/java/org/jredis/connector/ConnectionException.java
================================================
/*
 *   Copyright 2009 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis.connector;

import java.net.SocketException;

import org.jredis.ClientRuntimeException;
import org.jredis._specification;

/**
 * [TODO: document me!]
 *
 * @author  Joubin Houshyar (alphazero@sensesay.net)
 * @version alpha.0, Apr 15, 2009
 * @since   alpha.0
 * 
 */

abstract public class ConnectionException extends ClientRuntimeException{

	/**  */
	private static final long serialVersionUID = _specification.Version.major;
	
	/**
	 * TODO: not sure if specifying {@link SocketException} is a good idea.
	 * @param msg
	 * @param e
	 */
	public ConnectionException(String msg, SocketException e) {
		super(msg, e);
	}

	/**
	 * @param msg
	 */
	public ConnectionException(String msg) {
		super(msg);
	}
}


================================================
FILE: core/api/src/main/java/org/jredis/connector/ConnectionFault.java
================================================
/*
 *   Copyright 2010 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis.connector;

import java.net.SocketException;
import org.jredis._specification;

/**
 * [TODO: document me!]
 *
 * @author  joubin (alphazero@sensesay.net)
 * @date    Sep 12, 2010
 * 
 */

public class ConnectionFault extends ConnectionException {
	/**  */
	private static final long serialVersionUID = _specification.Version.major;

	/**
	 * @param string
	 * @param e
	 */
	public ConnectionFault(String msg, SocketException e) {
		super(msg, e);
	}
	public ConnectionFault(String msg) {
		super(msg);
	}
}


================================================
FILE: core/api/src/main/java/org/jredis/connector/ConnectionReset.java
================================================
/*
 *   Copyright 2009-2011 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis.connector;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketException;

import org.jredis._specification;
import org.jredis.protocol.Command;

/**
 * This exception is thrown by a {@link Connection} to indicate that the connection to redis was
 * reset (typically due to timeout on Redis side).  
 * <p>
 * If the {@link Connection} is specified to use
 * auto-reconnect, the connection has been re-established, but, the status of the request that
 * gave rise to this exception is indeterminate, in the sense that while this exception certainly indicates
 * that the response was not received from Redis, it is not clear whether the request itself was
 * received by the server.  This is due to the fact that writing to the {@link OutputStream} of a {@link Socket}
 * that has been closed by the remote peer does NOT raise an exception.  The exception is raised (reliably) only
 * on the receive when reading from the {@link Socket}'s {@link InputStream}.
 * <p>
 * Depending on the application domain and the {@link Command} of the request, the user may retry 
 * the request. 
 * 
 * @author  Joubin (alphazero@sensesay.net)
 * @version alpha.0, Apr 15, 2009
 * @since   alpha.0
 * 
 */

public class ConnectionReset extends ConnectionException {

	/**  */
	private static final long serialVersionUID = _specification.Version.major;
	
	private static final String info = "potential redis timeout";
	/**
	 * @param string
	 * @param e
	 */
	public ConnectionReset(String msg, SocketException e) {
		super(String.format("(%s) %s", info, msg), e);
	}
	public ConnectionReset(String msg) {
		super(String.format("(%s) %s", info, msg));
	}
}


================================================
FILE: core/api/src/main/java/org/jredis/connector/ConnectionSpec.java
================================================
/*
 *   Copyright 2009-2010 Joubin Houshyar
 * 
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *    
 *   http://www.apache.org/licenses/LICENSE-2.0
 *    
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.jredis.connector;

import java.net.InetAddress;
import java.util.HashMap;
import java.util.Map;
import org.jredis.connector.Connection.Modality;
import org.jredis.connector.Connection.Property;


/**
 * ConnectionSpec specifies the parameters used in the creation and
 * runtime operation of JRedis connections.
 * 
 * @author joubin (alphazero@sensesay.net)
 *
 * @see Factory#newConnection(ConnectionSpec)
 * @see java.resource.cci.ConnectionSpec
 * 
 */
public interface ConnectionSpec {
	/**
	 * @return
	 */
	public InetAddress getAddress();
	/**
	 * @param address
     * @return the {@link ConnectionSpec}
	 */
	public ConnectionSpec setAddress(InetAddress address);
	/**
	 * @return the port number for the connection
	 */
	public int getPort ();
	/**
	 * @param port
     * @return the {@link ConnectionSpec}
	 */
	public ConnectionSpec setPort(int port);
	/**
	 * @return the password (if any) for the connection.  Used on (re-)connect to authenticate 
	 * the client after connectivity has been established
	 * @Redis AUTH  
	 * @see Command#AUTH
	 */
	public byte[] getCredentials();
	/**
	 * Set the Connection's credentials, presented to Redis on (re)connects.
	 * @param credentials
	 * @see ConnectionSpec#setCredentials(String)
     * @return the {@link ConnectionSpec}
	 */
	public ConnectionSpec setCredentials(byte[] credentials);
	/**
	 * Convenience method 
	 * @param credentials
	 * @see ConnectionSpec#setCredentials(byte[])
     * @return the {@link ConnectionSpec}
	 */
	public ConnectionSpec setCredentials(String credentials);
	/**
	 * @return the database selected for the connection.  Used on (re-)connect to select the db 
	 * after network connectivity has been established.
	 * @Redis SELECT
	 * @see Command#SELECT
	 */
	public int getDatabase ();
	/**
	 * @param database
     * @return the {@link ConnectionSpec}
	 */
	public ConnectionSpec setDatabase(int database);
	/**
	 * @return the {@link Modality} of this protocol handler.
	 */
	public Modality getModality ();
	/**
	 * @param modality
	 * @return the the {@link ConnectionSpec}
	 */
	public ConnectionSpec setModality (Modality modality);
	/**
	 * Get the {@link SocketFlag} for the {@link ConnectionSpec}
	 * @param flag
	 * @return the specified TCP socket flag used for the connection.
	 * @see SocketFlag
	 */
	public boolean getSocketFlag (Connection.Socket.Flag flag);
	/**
	 * Set the {@link Connection.Socket.Flag} for the {@link ConnectionSpec}
	 * @param flag
	 * @param value
	 * @return {@link ConnectionSpec} this
	 */
	public ConnectionSpec setSocketFlag(Connection.Socket.Flag flag, Boolean value);
	/**
	 * Get the {@link Connection.Socket.Property} for the {@link ConnectionSpec}
	 * @param property
	 * @return the specified socket property used for the connection.
	 * @see SocketFlag
	 */
	public Integer getSocketProperty (Connection.Socket.Property property);
	/**
	 * Set the {@link SocketProperty} for the {@link ConnectionSpec}
	 * @param property
	 * @param value
	 * @return the previous value (if any).  Null if none existed, per {@link Map#put(Object, Object)} semantics.
	 */
	public ConnectionSpec setSocketProperty(Connection.Socket.Property property, Integer value);
 	/**
	 * @param flag
	 * @return the {@link Connection.Flag}
	 * @see SocketFlag
	 */
	public boolean getConnectionFlag (Connection.Flag flag);
	/**
	 * Sets the specified {@link Connection.Flag}
	 * @param flag
	 * @param value
	 * @return the referenced {@link ConnectionSpec}
	 */
	public ConnectionSpec setConnectionFlag(Connection.Flag flag, Boolean value);
	/**
	 * @param <T>
	 * @param proptype
	 * @return
	 */
	public Object getConnectionProperty(Property prop);
	/**
	 * @param <T>
	 * @param property
	 * @param value
	 * @return
	 */
	public ConnectionSpec setConnectionProperty(Property prop, Object value);
	/**
	 * @return
	 */
	public int	getReconnectCnt ();
	/**
	 * @param cnt
	 * @return the {@link ConnectionSpec}
	 */
	public ConnectionSpec setReconnectCnt(int cnt);
	/**
	 * @return
	 */
	public int	getMaxConnectWait ();
	/**
	 * @param cnt
     * @return the {@link ConnectionSpec}
	 */
	public ConnectionSpec setMaxConnectWait(int cnt);
    /**
     * @return the heartbeat period in seconds
     */
    public int	getHeartbeat();
    /**
     * @param seconds heartbeat period
     * @return the {@link ConnectionSpec}
     */
    public ConnectionSpec setHeartbeat(int seconds);
    
	// ------------------------------------------------------------------------
	// Reference Implementation 
	// ------------------------------------------------------------------------

	/**
	 * Reference implementation of {@link ConnectionSpec}.
	 * <p>
	 * This implementation is a read/write implementation providing no default
	 * values of any kind.  It can be used as is and initialized as required,
	 * or (as it is intended) it will provide support for various connection
	 * profiles (e.g. server connectors), etc.
	 *
	 * @author  joubin (alphazero@sensesay.net)
	 * @version alpha.0, Aug 23, 2009
	 * @since   alpha.0
	 * 
	 */
	public static class RefImpl implements ConnectionSpec {

		// ------------------------------------------------------------------------
		// Attributes
		// ------------------------------------------------------------------------
		
		/** {@link Map} of the {@link SocketFlag}s of the {@link ConnectionSpec} */
		Map<Connection.Socket.Flag, Boolean> socketFlags = new HashMap<Connection.Socket.Flag, Boolean>();
		
		/** {@link Map} of the {@link SocketProperty}s of the {@link ConnectionSpec} */
		Map<Connection.Socket.Property, Integer> socketProperties = new HashMap<Connection.Socket.Property, Integer>();
		
		/** Connection.Flag bitmask */
		int		connectionFlagBitmask;
		
		/** {@link Map} of the {@link Conn
Download .txt
gitextract_s0bg69rx/

├── .gitignore
├── DEV-NOTES.txt
├── LICENSE
├── NOTICE
├── README
├── RELEASE-NOTES.txt
├── Release/
│   ├── RELEASE-NOTES-Update-03122010.txt
│   ├── RELEASE-NOTES-Update-08132009.txt
│   ├── RELEASE-NOTES-Update-11082009.txt
│   ├── RELEASE_BUILD_TIME
│   ├── jredis-core-all-a.0-SNAPSHOT-jar-with-dependencies.jar
│   ├── jredis-core-all-a.0-SNAPSHOT-sources.jar
│   ├── jredis-core-all-a.0-SNAPSHOT.jar
│   ├── jredis-core-api-a.0-SNAPSHOT-sources.jar
│   ├── jredis-core-api-a.0-SNAPSHOT.jar
│   ├── jredis-core-bench-a.0-SNAPSHOT-jar-with-dependencies.jar
│   ├── jredis-core-bench-a.0-SNAPSHOT-sources.jar
│   ├── jredis-core-bench-a.0-SNAPSHOT.jar
│   ├── jredis-core-ri-a.0-SNAPSHOT-jar-with-dependencies.jar
│   ├── jredis-core-ri-a.0-SNAPSHOT-sources.jar
│   ├── jredis-core-ri-a.0-SNAPSHOT.jar
│   ├── jredis-examples-a.0-SNAPSHOT-jar-with-dependencies.jar
│   ├── jredis-examples-a.0-SNAPSHOT-sources.jar
│   └── jredis-examples-a.0-SNAPSHOT.jar
├── core/
│   ├── LICENSE
│   ├── NOTICE
│   ├── README
│   ├── all/
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   └── pom.xml
│   ├── api/
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── org/
│   │       │   │       └── jredis/
│   │       │   │           ├── ClientRuntimeException.java
│   │       │   │           ├── Codec.java
│   │       │   │           ├── Event.java
│   │       │   │           ├── JRedis.java
│   │       │   │           ├── JRedisFuture.java
│   │       │   │           ├── KeyValueSet.java
│   │       │   │           ├── NotSupportedException.java
│   │       │   │           ├── ObjectEncoding.java
│   │       │   │           ├── ObjectInfo.java
│   │       │   │           ├── ProviderException.java
│   │       │   │           ├── Query.java
│   │       │   │           ├── Redis.java
│   │       │   │           ├── RedisException.java
│   │       │   │           ├── RedisInfo.java
│   │       │   │           ├── RedisType.java
│   │       │   │           ├── Semantics.java
│   │       │   │           ├── Sort.java
│   │       │   │           ├── ZSetEntry.java
│   │       │   │           ├── _specification.java
│   │       │   │           ├── connector/
│   │       │   │           │   ├── Connection.java
│   │       │   │           │   ├── ConnectionException.java
│   │       │   │           │   ├── ConnectionFault.java
│   │       │   │           │   ├── ConnectionReset.java
│   │       │   │           │   ├── ConnectionSpec.java
│   │       │   │           │   ├── FaultedConnection.java
│   │       │   │           │   ├── Message.java
│   │       │   │           │   ├── NotConnectedException.java
│   │       │   │           │   ├── RequestListener.java
│   │       │   │           │   └── package-info.java
│   │       │   │           ├── package-info.java
│   │       │   │           ├── protocol/
│   │       │   │           │   ├── BulkResponse.java
│   │       │   │           │   ├── Command.java
│   │       │   │           │   ├── CommandNotImplemented.java
│   │       │   │           │   ├── MultiBulkResponse.java
│   │       │   │           │   ├── Protocol.java
│   │       │   │           │   ├── Request.java
│   │       │   │           │   ├── Response.java
│   │       │   │           │   ├── ResponseStatus.java
│   │       │   │           │   ├── StatusResponse.java
│   │       │   │           │   ├── ValueResponse.java
│   │       │   │           │   └── package-info.java
│   │       │   │           ├── resource/
│   │       │   │           │   ├── Context.java
│   │       │   │           │   ├── Resource.java
│   │       │   │           │   ├── ResourceException.java
│   │       │   │           │   ├── _specification.java
│   │       │   │           │   └── package-info.java
│   │       │   │           └── semantics/
│   │       │   │               ├── BasicCodecManager.java
│   │       │   │               ├── CodecManager.java
│   │       │   │               ├── KeyCodec.java
│   │       │   │               ├── SemanticJRedis.java
│   │       │   │               ├── SemanticQuery.java
│   │       │   │               ├── SemanticSort.java
│   │       │   │               ├── Semantics.java
│   │       │   │               └── package-info.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── redis-commands-2.4.n.txt
│   │       └── test/
│   │           ├── java/
│   │           │   └── org/
│   │           │       └── jredis/
│   │           │           ├── TestBase.java
│   │           │           ├── compliance/
│   │           │           │   └── CheckRedisCompliance.java
│   │           │           ├── connector/
│   │           │           │   └── TestSpecElements.java
│   │           │           └── protocol/
│   │           │               └── TestCommand.java
│   │           └── resources/
│   │               └── log4j.properties
│   ├── bench/
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── org/
│   │           │       └── jredis/
│   │           │           ├── bench/
│   │           │           │   ├── JRedisBenchmark.java
│   │           │           │   ├── JRedisJProfileSubject.java
│   │           │           │   └── Util.java
│   │           │           └── ri/
│   │           │               └── alphazero/
│   │           │                   └── bench/
│   │           │                       ├── JRedisClientBenchmark.java
│   │           │                       ├── JRedisClientJProfileSubject.java
│   │           │                       ├── JRedisPipelineServiceBenchmark.java
│   │           │                       ├── JRedisServiceBenchmark.java
│   │           │                       ├── SimpleBenchJRedisAsync.java
│   │           │                       ├── SimpleBenchJRedisChunkedPipeline.java
│   │           │                       ├── SimpleBenchJRedisClient.java
│   │           │                       └── SimpleBenchJRedisPipeline.java
│   │           └── resources/
│   │               └── log4j.properties
│   ├── pom.xml
│   └── ri/
│       ├── LICENSE
│       ├── NOTICE
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   └── java/
│           │       └── org/
│           │           └── jredis/
│           │               └── ri/
│           │                   ├── RI.java
│           │                   ├── alphazero/
│           │                   │   ├── BulkSetMapping.java
│           │                   │   ├── JRedisAsyncClient.java
│           │                   │   ├── JRedisChunkedPipeline.java
│           │                   │   ├── JRedisClient.java
│           │                   │   ├── JRedisFutureSupport.java
│           │                   │   ├── JRedisPipeline.java
│           │                   │   ├── JRedisPipelineService.java
│           │                   │   ├── JRedisService.java
│           │                   │   ├── JRedisSupport.java
│           │                   │   ├── Pair.java
│           │                   │   ├── RedisVersion.java
│           │                   │   ├── SyncJRedisBase.java
│           │                   │   ├── ZSetEntryImpl.java
│           │                   │   ├── _specification.java
│           │                   │   ├── connection/
│           │                   │   │   ├── AsyncConnection.java
│           │                   │   │   ├── AsyncPipelineConnection.java
│           │                   │   │   ├── ChunkedPipelineConnection.java
│           │                   │   │   ├── ConnectionBase.java
│           │                   │   │   ├── DefaultConnectionFactory.java
│           │                   │   │   ├── DefaultConnectionSpec.java
│           │                   │   │   ├── HeartbeatJinn.java
│           │                   │   │   ├── PendingRequest.java
│           │                   │   │   ├── PipelineConnectionBase.java
│           │                   │   │   ├── SyncConnection.java
│           │                   │   │   ├── SyncPipelineConnection.java
│           │                   │   │   └── UnexpectedEOFException.java
│           │                   │   ├── package-info.java
│           │                   │   ├── protocol/
│           │                   │   │   ├── ConcurrentSyncProtocol.java
│           │                   │   │   ├── DefaultProtocolFactory.java
│           │                   │   │   ├── ProtocolBase.java
│           │                   │   │   ├── ResponseSupport.java
│           │                   │   │   ├── SyncProtocol.java
│           │                   │   │   └── VirtualResponse.java
│           │                   │   ├── semantics/
│           │                   │   │   ├── DefaultKeyCodec.java
│           │                   │   │   ├── DefaultStringCodec.java
│           │                   │   │   └── GZipCompressedStringCodec.java
│           │                   │   └── support/
│           │                   │       ├── Assert.java
│           │                   │       ├── Convert.java
│           │                   │       ├── DefaultCodec.java
│           │                   │       ├── FastBufferedInputStream.java
│           │                   │       ├── GZip.java
│           │                   │       ├── Log.java
│           │                   │       ├── Signal.java
│           │                   │       ├── SortSupport.java
│           │                   │       └── package-info.java
│           │                   └── package-info.java
│           └── test/
│               ├── java/
│               │   └── org/
│               │       └── jredis/
│               │           └── ri/
│               │               ├── JRedisTestSuiteBase.java
│               │               ├── ProviderTestBase.java
│               │               ├── adhoc/
│               │               │   ├── AdHocTestChunkPipeline.java
│               │               │   ├── AdHocTestInfo.java
│               │               │   └── AdHocTestNoConnection.java
│               │               └── alphazero/
│               │                   ├── ConcurrentJRedisProviderTestsBase.java
│               │                   ├── JRedisAsyncClientTest.java
│               │                   ├── JRedisChunkedPipelineClientTest.java
│               │                   ├── JRedisClientTest.java
│               │                   ├── JRedisFutureProviderTestsBase.java
│               │                   ├── JRedisPipelineServiceTest.java
│               │                   ├── JRedisPipelineTest.java
│               │                   ├── JRedisProviderTestsBase.java
│               │                   ├── JRedisServiceTest.java
│               │                   └── support/
│               │                       ├── ConvertTest.java
│               │                       └── GZipTest.java
│               └── resources/
│                   └── log4j.properties
├── documentation/
│   ├── LICENSE
│   ├── NOTICE
│   └── design/
│       └── notes/
│           └── api/
│               └── jredis-api.txt
├── examples/
│   ├── LICENSE
│   ├── NOTICE
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── org/
│           │       └── jredis/
│           │           └── examples/
│           │               ├── HelloAgain.java
│           │               ├── PipelineInAction.java
│           │               ├── UsingConnectionSpec.java
│           │               ├── UsingJRedisFuture.java
│           │               ├── UsingJRedisPipeline.java
│           │               ├── UsingJRedisPipelineService.java
│           │               ├── UsingJRedisService.java
│           │               └── commands/
│           │                   ├── UsingBulkCommands.java
│           │                   ├── UsingZrangeSubset.java
│           │                   └── package-info.java
│           └── resources/
│               └── log4j.properties
├── extensions/
│   ├── 3rd party Licenses/
│   │   ├── NET.SPY.MEMCACHED LICENSE
│   │   └── NET.SPY.MEMCACHED NOTICE
│   ├── LICENSE
│   ├── NOTICE
│   ├── README.markdown
│   ├── api/
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── README.markdown
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── org/
│   │                   └── jredis/
│   │                       └── cluster/
│   │                           ├── ClusterModel.java
│   │                           ├── ClusterNodeSpec.java
│   │                           ├── ClusterSpec.java
│   │                           ├── ClusterType.java
│   │                           ├── connector/
│   │                           │   └── ClusterConnection.java
│   │                           ├── model/
│   │                           │   ├── ConsistentHashCluster.java
│   │                           │   └── StaticHashCluster.java
│   │                           └── support/
│   │                               └── HashAlgorithm.java
│   ├── pom.xml
│   └── ri/
│       ├── LICENSE
│       ├── NOTICE
│       ├── README.markdown
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   └── java/
│           │       └── org/
│           │           └── jredis/
│           │               └── ri/
│           │                   └── cluster/
│           │                       ├── DefaultClusterNodeSpec.java
│           │                       ├── DefaultClusterSpec.java
│           │                       ├── connection/
│           │                       │   ├── ClusterConnectionBase.java
│           │                       │   └── SynchClusterConnection.java
│           │                       ├── model/
│           │                       │   ├── BasicStaticHashCluster.java
│           │                       │   ├── KetamaClusterModel.java
│           │                       │   └── KetamaHashProvider.java
│           │                       └── support/
│           │                           └── CryptoHashUtils.java
│           └── test/
│               └── java/
│                   └── org/
│                       └── jredis/
│                           ├── cluster/
│                           │   ├── ClusterModelProviderTestBase.java
│                           │   ├── ClusterNodeSpecProviderTestBase.java
│                           │   ├── ClusterSpecProviderTestBase.java
│                           │   ├── ClusterSuiteTestData.java
│                           │   ├── ProviderTestBase.java
│                           │   ├── RefImplTestSuiteBase.java
│                           │   ├── models/
│                           │   │   ├── BasicStaticHashClusterTest.java
│                           │   │   ├── ConsistentHashClusterProviderTestBase.java
│                           │   │   ├── KetamaClusterModelTest.java
│                           │   │   ├── KetamaHashAlgoTest.java
│                           │   │   └── StaticHashClusterProviderTestBase.java
│                           │   └── support/
│                           │       └── HashAlgorithmProviderTestBase.java
│                           ├── ri/
│                           │   └── cluster/
│                           │       ├── ClusterNodeSpecImplTest.java
│                           │       ├── DefaultClusterSpecTest.java
│                           │       └── support/
│                           │           └── CryptoHashUtilTest.java
│                           └── test/
│                               └── util/
│                                   └── RunningAverage.java
├── pom.xml
└── redis_version_compliance.txt
Download .txt
SYMBOL INDEX (2018 symbols across 157 files)

FILE: core/api/src/main/java/org/jredis/ClientRuntimeException.java
  class ClientRuntimeException (line 33) | public class ClientRuntimeException extends RuntimeException {
    method ClientRuntimeException (line 41) | public ClientRuntimeException(String message) {
    method ClientRuntimeException (line 49) | public ClientRuntimeException(String message, Throwable cause) {
    method getLocalizedMessage (line 60) | @Override
    method getMessage (line 68) | @Override

FILE: core/api/src/main/java/org/jredis/Codec.java
  type Codec (line 33) | public interface Codec <T extends Object>  {
    method decode (line 38) | public T decode (byte[] bytes);
    method encode (line 43) | public byte[] encode (T object);
    method supports (line 48) | public boolean supports (Class<?> type);

FILE: core/api/src/main/java/org/jredis/Event.java
  class Event (line 35) | public class Event <SRC, ETYPE, INFO> implements Serializable{
    method Event (line 51) | protected Event(SRC src, ETYPE eType, INFO info){
    method Event (line 60) | protected Event(SRC src, ETYPE eType){
    method getType (line 66) | public ETYPE getType () {
    method getSource (line 72) | public SRC getSource () {
    method getInfo (line 78) | public INFO getInfo () {
    method writeObject (line 82) | private void writeObject(ObjectOutputStream out) throws IOException {
    method readObject (line 87) | @SuppressWarnings("unchecked")

FILE: core/api/src/main/java/org/jredis/JRedis.java
  type JRedis (line 36) | @Redis(versions="1.07")
    method ping (line 74) | public <K extends Object> JRedis ping () throws RedisException;
    method quit (line 80) | public <K extends Object> void quit ();
    method set (line 96) | public <K extends Object> void set (K key, byte[] value) throws RedisE...
    method set (line 105) | public <K extends Object> void set (K key, String stringValue) throws ...
    method set (line 114) | public <K extends Object> void set (K key, Number numberValue) throws ...
    method set (line 126) | public <K extends Object, T extends Serializable>
    method setnx (line 136) | public <K extends Object> boolean setnx (K key, byte[] value) throws R...
    method setnx (line 137) | public <K extends Object> boolean setnx (K key, String stringValue) th...
    method setnx (line 138) | public <K extends Object> boolean setnx (K key, Number numberValue) th...
    method setnx (line 139) | public <K extends Object, T extends Serializable>
    method get (line 148) | public <K extends Object> byte[] get (K key)  throws RedisException;
    method getset (line 150) | public <K extends Object> byte[] getset (K key, byte[] value) throws R...
    method getset (line 151) | public <K extends Object> byte[] getset (K key, String stringValue) th...
    method getset (line 152) | public <K extends Object> byte[] getset (K key, Number numberValue) th...
    method getset (line 153) | public <K extends Object, T extends Serializable>
    method mget (line 164) | public <K extends Object> List<byte[]> mget(K...keys) throws RedisExce...
    method mset (line 172) | public <K extends Object> void mset(Map<K, byte[]> keyValueMap) throws...
    method mset (line 174) | public <K extends Object> void mset(KeyValueSet.ByteArrays<K> mappings...
    method mset (line 175) | public <K extends Object> void mset(KeyValueSet.Strings<K> mappings) t...
    method mset (line 176) | public <K extends Object> void mset(KeyValueSet.Numbers<K> mappings) t...
    method mset (line 177) | public <K extends Object, T extends Serializable> void mset(KeyValueSe...
    method msetnx (line 185) | public <K extends Object> boolean msetnx(Map<K, byte[]> keyValueMap) t...
    method msetnx (line 187) | public <K extends Object> boolean msetnx(KeyValueSet.ByteArrays<K> map...
    method msetnx (line 188) | public <K extends Object> boolean msetnx(KeyValueSet.Strings<K> mappin...
    method msetnx (line 189) | public <K extends Object> boolean msetnx(KeyValueSet.Numbers<K> mappin...
    method msetnx (line 190) | public <K extends Object, T extends Serializable> boolean msetnx(KeyVa...
    method incr (line 198) | public <K extends Object> long incr (K key) throws RedisException;
    method incrby (line 207) | public <K extends Object> long incrby (K key, int delta) throws RedisE...
    method decr (line 215) | public <K extends Object> long decr (K key) throws RedisException;
    method decrby (line 224) | public <K extends Object> long decrby (K key, int delta) throws RedisE...
    method substr (line 234) | public <K extends Object> byte[] substr (K key, long from, long to) th...
    method append (line 244) | public <K extends Object> long append (K key, byte[] value) throws Red...
    method append (line 245) | public <K extends Object> long append (K key, String stringValue) thro...
    method append (line 246) | public <K extends Object> long append (K key, Number numberValue) thro...
    method append (line 247) | public <K extends Object, T extends Serializable>
    method exists (line 260) | public <K extends Object> boolean exists(K key) throws RedisException;
    method del (line 269) | public <K extends Object> long del (K ... keys) throws RedisException;
    method type (line 277) | public <K extends Object> RedisType type (K key) throws RedisException;
    method keys (line 286) | public <K extends Object> List<byte[]> keys (K pattern) throws RedisEx...
    method keys (line 295) | public <K extends Object> List<byte[]> keys () throws RedisException;
    method randomkey (line 302) | public byte[] randomkey() throws RedisException;
    method rename (line 310) | public <K extends Object> void rename (K oldkey, K newkey) throws Redi...
    method renamenx (line 319) | public <K extends Object> boolean renamenx (K oldkey, K brandnewkey) t...
    method dbsize (line 326) | public <K extends Object> long dbsize () throws RedisException;
    method expire (line 335) | public <K extends Object> boolean expire (K key, int ttlseconds) throw...
    method expireat (line 348) | public <K extends Object> boolean expireat (K key, long epochtimeMilli...
    method ttl (line 356) | public <K extends Object> long ttl (K key) throws RedisException;
    method rpush (line 368) | public <K extends Object> void rpush (K listkey, byte[] value) throws ...
    method rpush (line 369) | public <K extends Object> void rpush (K listkey, String stringValue) t...
    method rpush (line 370) | public <K extends Object> void rpush (K listkey, Number numberValue) t...
    method rpush (line 371) | public <K extends Object, T extends Serializable>
    method lpush (line 380) | public <K extends Object> void lpush (K listkey, byte[] value) throws ...
    method lpush (line 381) | public <K extends Object> void lpush (K listkey, String stringValue) t...
    method lpush (line 382) | public <K extends Object> void lpush (K listkey, Number numberValue) t...
    method lpush (line 383) | public <K extends Object, T extends Serializable>
    method lset (line 393) | public <K extends Object> void lset (K key, long index, byte[] value) ...
    method lset (line 394) | public <K extends Object> void lset (K key, long index, String stringV...
    method lset (line 395) | public <K extends Object> void lset (K key, long index, Number numberV...
    method lset (line 396) | public <K extends Object, T extends Serializable>
    method lrem (line 408) | public <K extends Object> long lrem (K listkey, byte[] value,       in...
    method lrem (line 409) | public <K extends Object> long lrem (K listkey, String stringValue, in...
    method lrem (line 410) | public <K extends Object> long lrem (K listkey, Number numberValue, in...
    method lrem (line 411) | public <K extends Object, T extends Serializable>
    method llen (line 421) | public <K extends Object> long llen (K listkey) throws RedisException;
    method lrange (line 431) | public <K extends Object> List<byte[]> lrange (K listkey, long from, l...
    method ltrim (line 440) | public <K extends Object> void ltrim (K listkey, long keepFrom, long k...
    method lindex (line 449) | public <K extends Object> byte[] lindex (K listkey, long index) throws...
    method lpop (line 457) | public <K extends Object> byte[] lpop (K listkey) throws RedisException;
    method rpop (line 465) | public <K extends Object> byte[] rpop (K listkey) throws RedisException;
    method rpoplpush (line 474) | public <K extends Object> byte[] rpoplpush (K srcList, K destList) thr...
    method sadd (line 487) | public <K extends Object> boolean sadd (K setkey, byte[] member) throw...
    method sadd (line 488) | public <K extends Object> boolean sadd (K setkey, String stringValue) ...
    method sadd (line 489) | public <K extends Object> boolean sadd (K setkey, Number numberValue) ...
    method sadd (line 490) | public <K extends Object, T extends Serializable>
    method srem (line 500) | public <K extends Object> boolean srem (K setkey, byte[] member) throw...
    method srem (line 501) | public <K extends Object> boolean srem (K setkey, String stringValue) ...
    method srem (line 502) | public <K extends Object> boolean srem (K setkey, Number numberValue) ...
    method srem (line 503) | public <K extends Object, T extends Serializable>
    method sismember (line 513) | public <K extends Object> boolean sismember (K setkey, byte[] member) ...
    method sismember (line 514) | public <K extends Object> boolean sismember (K setkey, String stringVa...
    method sismember (line 515) | public <K extends Object> boolean sismember (K setkey, Number numberVa...
    method sismember (line 516) | public <K extends Object, T extends Serializable>
    method smove (line 527) | public <K extends Object> boolean smove (K srcKey, K destKey, byte[] m...
    method smove (line 528) | public <K extends Object> boolean smove (K srcKey, K destKey, String s...
    method smove (line 529) | public <K extends Object> boolean smove (K srcKey, K destKey, Number n...
    method smove (line 530) | public <K extends Object, T extends Serializable>
    method scard (line 539) | public <K extends Object> long scard (K setKey) throws RedisException;
    method sinter (line 548) | public <K extends Object> List<byte[]> sinter (K set1, K...sets) throw...
    method sinterstore (line 555) | public <K extends Object> void sinterstore (K destSetKey, K...sets) th...
    method sunion (line 564) | public <K extends Object> List<byte[]> sunion (K set1, K...sets) throw...
    method sunionstore (line 572) | public <K extends Object> void sunionstore (K destSetKey, K...sets) th...
    method sdiff (line 581) | public <K extends Object> List<byte[]> sdiff (K set1, K...sets) throws...
    method sdiffstore (line 589) | public <K extends Object> void sdiffstore (K destSetKey, K...sets) thr...
    method smembers (line 597) | public <K extends Object> List<byte[]> smembers (K setKey) throws Redi...
    method srandmember (line 605) | public <K extends Object> byte[] srandmember (K setKey) throws RedisEx...
    method spop (line 613) | public <K extends Object> byte[] spop (K setKey) throws RedisException;
    method zadd (line 626) | public <K extends Object> boolean zadd (K setkey, double score, byte[]...
    method zadd (line 627) | public <K extends Object> boolean zadd (K setkey, double score, String...
    method zadd (line 628) | public <K extends Object> boolean zadd (K setkey, double score, Number...
    method zadd (line 629) | public <K extends Object, T extends Serializable>
    method zrem (line 639) | public <K extends Object> boolean zrem (K setkey, byte[] member) throw...
    method zrem (line 640) | public <K extends Object> boolean zrem (K setkey, String stringValue) ...
    method zrem (line 641) | public <K extends Object> boolean zrem (K setkey, Number numberValue) ...
    method zrem (line 642) | public <K extends Object, T extends Serializable>
    method zcard (line 651) | public <K extends Object> long zcard (K setKey) throws RedisException;
    method zscore (line 661) | public <K extends Object> Double zscore (K setkey, byte[] member) thro...
    method zscore (line 662) | public <K extends Object> Double zscore (K setkey, String stringValue)...
    method zscore (line 663) | public <K extends Object> Double zscore (K setkey, Number numberValue)...
    method zscore (line 664) | public <K extends Object, T extends Serializable>
    method zrank (line 674) | public <K extends Object> long zrank (K setkey, byte[] member) throws ...
    method zrank (line 675) | public <K extends Object> long zrank (K setkey, String stringValue) th...
    method zrank (line 676) | public <K extends Object> long zrank (K setkey, Number numberValue) th...
    method zrank (line 677) | public <K extends Object, T extends Serializable>
    method zrevrank (line 687) | public <K extends Object> long zrevrank (K setkey, byte[] member) thro...
    method zrevrank (line 688) | public <K extends Object> long zrevrank (K setkey, String stringValue)...
    method zrevrank (line 689) | public <K extends Object> long zrevrank (K setkey, Number numberValue)...
    method zrevrank (line 690) | public <K extends Object, T extends Serializable>
    method zrange (line 701) | public <K extends Object> List<byte[]> zrange (K setkey, long from, lo...
    method zrevrange (line 711) | public <K extends Object> List<byte[]> zrevrange (K setkey, long from,...
    method zrangeSubset (line 727) | public <K extends Object> List<ZSetEntry> zrangeSubset (K setkey, long...
    method zrevrangeSubset (line 743) | public <K extends Object> List<ZSetEntry> zrevrangeSubset (K setkey, l...
    method zrangebyscore (line 753) | public <K extends Object> List<byte[]> zrangebyscore (K setkey, double...
    method zrangebyscoreSubset (line 763) | public <K extends Object> List<ZSetEntry> zrangebyscoreSubset (K setke...
    method zremrangebyscore (line 773) | public <K extends Object> long zremrangebyscore (K setkey, double minS...
    method zremrangebyrank (line 783) | public <K extends Object> long zremrangebyrank (K setkey, long minRank...
    method zincrby (line 793) | @Redis(versions="1.07")
    method zincrby (line 795) | public <K extends Object> Double zincrby (K setkey, double score, Stri...
    method zincrby (line 796) | public <K extends Object> Double zincrby (K setkey, double score, Numb...
    method zincrby (line 797) | public <K extends Object, T extends Serializable>
    method zcount (line 808) | public <K extends Object> long zcount (K setkey, double minScore, doub...
    method hset (line 820) | @Redis(versions="1.3.n")
    method hset (line 830) | @Redis(versions="1.3.n")
    method hset (line 840) | @Redis(versions="1.3.n")
    method hset (line 851) | @Redis(versions="1.3.4")
    method hget (line 861) | @Redis(versions="1.3.4")
    method hexists (line 873) | @Redis(versions="1.3.n")
    method hdel (line 884) | @Redis(versions="1.3.n")
    method hlen (line 894) | @Redis(versions="1.3.n")
    method hkeys (line 904) | @Redis(versions="1.3.n")
    method hvals (line 914) | @Redis(versions="1.3.n")
    method hgetall (line 924) | @Redis(versions="1.3.n")
    method multi (line 936) | @Redis(versions="2.0")
    method discard (line 941) | @Redis(versions="2.0")
    method flushdb (line 959) | public <K extends Object> JRedis flushdb () throws RedisException;
    method flushall (line 968) | public <K extends Object> JRedis flushall () throws RedisException;
    method move (line 979) | public <K extends Object> boolean move (K key, int dbIndex) throws Red...
    method sort (line 1012) | public <K extends Object> Sort sort(K key);
    method save (line 1022) | public <K extends Object> void save() throws RedisException;
    method bgsave (line 1028) | public <K extends Object> void bgsave () throws RedisException;
    method bgrewriteaof (line 1035) | public <K extends Object> String bgrewriteaof () throws RedisException;
    method lastsave (line 1042) | public <K extends Object> long lastsave () throws RedisException;
    method info (line 1056) | public <K extends Object> Map<String, String>	info ()  throws RedisExc...
    method slaveof (line 1063) | public <K extends Object> void slaveof(String host, int port) throws R...
    method slaveofnone (line 1069) | public <K extends Object> void slaveofnone() throws RedisException;
    method echo (line 1081) | public <K extends Object> byte[] echo (byte[] msg) throws RedisException;
    method echo (line 1082) | public <K extends Object> byte[] echo (String msg) throws RedisException;
    method echo (line 1083) | public <K extends Object> byte[] echo (Number msg) throws RedisException;
    method echo (line 1084) | public <K extends Object, T extends Serializable>
    method debug (line 1094) | public <K extends Object> ObjectInfo debug (K key) throws RedisException;
    method setbit (line 1096) | public <K extends Object> boolean setbit(K key, int offset, boolean va...
    method getbit (line 1098) | public <K extends Object> boolean getbit(K key, int offset) throws Red...

FILE: core/api/src/main/java/org/jredis/JRedisFuture.java
  type JRedisFuture (line 75) | @Redis(versions="1.07")
    method ping (line 85) | public <K extends Object> Future<ResponseStatus> ping ();
    method quit (line 91) | public <K extends Object> Future<ResponseStatus> quit ();
    method flush (line 98) | public Future<ResponseStatus> flush ();
    method set (line 113) | public <K extends Object> Future<ResponseStatus> set (K key, byte[] va...
    method set (line 121) | public <K extends Object> Future<ResponseStatus> set (K key, String st...
    method set (line 129) | public <K extends Object> Future<ResponseStatus> set (K key, Number nu...
    method set (line 140) | public <K extends Object, T extends Serializable>
    method setnx (line 149) | public <K extends Object> Future<Boolean> setnx (K key, byte[] value);
    method setnx (line 150) | public <K extends Object> Future<Boolean> setnx (K key, String stringV...
    method setnx (line 151) | public <K extends Object> Future<Boolean> setnx (K key, Number numberV...
    method setnx (line 152) | public <K extends Object, T extends Serializable>
    method setbit (line 155) | public <K extends Object> Future<Boolean> setbit(K key, int offset, bo...
    method get (line 164) | public <K extends Object> Future<byte[]> get (K key) ;
    method getset (line 166) | public <K extends Object> Future<byte[]> getset (K key, byte[] value);
    method getset (line 167) | public <K extends Object> Future<byte[]> getset (K key, String stringV...
    method getset (line 168) | public <K extends Object> Future<byte[]> getset (K key, Number numberV...
    method getset (line 169) | public <K extends Object, T extends Serializable>
    method getbit (line 173) | public <K extends Object> Future<Boolean> getbit(K key, int offset);
    method mget (line 182) | public <K extends Object> Future<List<byte[]>> mget(String ... keys);
    method mset (line 190) | public <K extends Object> Future<ResponseStatus> mset(Map<K, byte[]> k...
    method mset (line 192) | public <K extends Object> Future<ResponseStatus> mset(KeyValueSet.Byte...
    method mset (line 193) | public <K extends Object> Future<ResponseStatus> mset(KeyValueSet.Stri...
    method mset (line 194) | public <K extends Object> Future<ResponseStatus> mset(KeyValueSet.Numb...
    method mset (line 195) | public <K extends Object, T extends Serializable> Future<ResponseStatu...
    method msetnx (line 203) | public <K extends Object> Future<Boolean> msetnx(Map<K, byte[]> keyVal...
    method msetnx (line 205) | public <K extends Object> Future<Boolean> msetnx(KeyValueSet.ByteArray...
    method msetnx (line 206) | public <K extends Object> Future<Boolean> msetnx(KeyValueSet.Strings<K...
    method msetnx (line 207) | public <K extends Object> Future<Boolean> msetnx(KeyValueSet.Numbers<K...
    method msetnx (line 208) | public <K extends Object, T extends Serializable> Future<Boolean> mset...
    method incr (line 215) | public <K extends Object> Future<Long> incr (K key);
    method incrby (line 223) | public <K extends Object> Future<Long> incrby (K key, int delta);
    method decr (line 230) | public <K extends Object> Future<Long> decr (K key);
    method decrby (line 238) | public <K extends Object> Future<Long> decrby (K key, int delta);
    method substr (line 247) | public <K extends Object> Future<byte[]> substr (K listkey, long from,...
    method append (line 255) | public <K extends Object> Future<Long> append (K key, byte[] value);
    method append (line 256) | public <K extends Object> Future<Long> append (K key, String stringVal...
    method append (line 257) | public <K extends Object> Future<Long> append (K key, Number numberVal...
    method append (line 258) | public <K extends Object, T extends Serializable>
    method exists (line 266) | public <K extends Object> Future<Boolean> exists(K key);
    method del (line 273) | public <K extends Object> Future<Long> del (K ... keys);
    method type (line 280) | public <K extends Object> Future<RedisType> type (K key);
    method keys (line 292) | public <K extends Object> Future<List<byte[]>> keys (K pattern);
    method keys (line 300) | public <K extends Object> Future<List<byte[]>> keys ();
    method randomkey (line 306) | public <K extends Object> Future<byte[]> randomkey();
    method rename (line 313) | public <K extends Object> Future<ResponseStatus> rename (K oldkey, K n...
    method renamenx (line 321) | public <K extends Object> Future<Boolean> renamenx (K oldkey, K brandn...
    method dbsize (line 327) | public <K extends Object> Future<Long> dbsize ();
    method expire (line 335) | public <K extends Object> Future<Boolean> expire (K key, int ttlseconds);
    method expireat (line 346) | public <K extends Object> Future<Boolean> expireat (K key, long epocht...
    method ttl (line 353) | public <K extends Object> Future<Long> ttl (K key);
    method rpush (line 364) | public <K extends Object> Future<Long> rpush (K listkey, byte[] value);
    method rpush (line 365) | public <K extends Object> Future<Long> rpush (K listkey, String string...
    method rpush (line 366) | public <K extends Object> Future<Long> rpush (K listkey, Number number...
    method rpush (line 367) | public <K extends Object, T extends Serializable>
    method lpush (line 375) | public <K extends Object> Future<Long> lpush (K listkey, byte[] value);
    method lpush (line 376) | public <K extends Object> Future<Long> lpush (K listkey, String string...
    method lpush (line 377) | public <K extends Object> Future<Long> lpush (K listkey, Number number...
    method lpush (line 378) | public <K extends Object, T extends Serializable>
    method lset (line 387) | public <K extends Object> Future<ResponseStatus> lset (K key, long ind...
    method lset (line 388) | public <K extends Object> Future<ResponseStatus> lset (K key, long ind...
    method lset (line 389) | public <K extends Object> Future<ResponseStatus> lset (K key, long ind...
    method lset (line 390) | public <K extends Object, T extends Serializable>
    method lrem (line 401) | public <K extends Object> Future<Long> lrem (K listkey, byte[] value, ...
    method lrem (line 402) | public <K extends Object> Future<Long> lrem (K listkey, String stringV...
    method lrem (line 403) | public <K extends Object> Future<Long> lrem (K listkey, Number numberV...
    method lrem (line 404) | public <K extends Object, T extends Serializable>
    method llen (line 413) | public <K extends Object> Future<Long> llen (K listkey);
    method lrange (line 422) | public <K extends Object> Future<List<byte[]>> lrange (K listkey, long...
    method ltrim (line 430) | public <K extends Object> Future<ResponseStatus> ltrim (K listkey, lon...
    method lindex (line 438) | public <K extends Object> Future<byte[]> lindex (K listkey, long index);
    method lpop (line 445) | public <K extends Object> Future<byte[]> lpop (K listkey);
    method rpop (line 452) | public <K extends Object> Future<byte[]> rpop (K listkey);
    method rpoplpush (line 460) | public <K extends Object> Future<byte[]> rpoplpush (String srcList, St...
    method sadd (line 471) | public <K extends Object> Future<Boolean> sadd (K setkey, byte[] member);
    method sadd (line 472) | public <K extends Object> Future<Boolean> sadd (K setkey, String strin...
    method sadd (line 473) | public <K extends Object> Future<Boolean> sadd (K setkey, Number numbe...
    method sadd (line 474) | public <K extends Object, T extends Serializable>
    method srem (line 483) | public <K extends Object> Future<Boolean> srem (K setkey, byte[] member);
    method srem (line 484) | public <K extends Object> Future<Boolean> srem (K setkey, String strin...
    method srem (line 485) | public <K extends Object> Future<Boolean> srem (K setkey, Number numbe...
    method srem (line 486) | public <K extends Object, T extends Serializable>
    method sismember (line 495) | public <K extends Object> Future<Boolean> sismember (K setkey, byte[] ...
    method sismember (line 496) | public <K extends Object> Future<Boolean> sismember (K setkey, String ...
    method sismember (line 497) | public <K extends Object> Future<Boolean> sismember (K setkey, Number ...
    method sismember (line 498) | public <K extends Object, T extends Serializable>
    method smove (line 508) | public <K extends Object> Future<Boolean> smove (K srcKey, K destKey, ...
    method smove (line 509) | public <K extends Object> Future<Boolean> smove (K srcKey, K destKey, ...
    method smove (line 510) | public <K extends Object> Future<Boolean> smove (K srcKey, K destKey, ...
    method smove (line 511) | public <K extends Object, T extends Serializable>
    method scard (line 519) | public <K extends Object> Future<Long> scard (K setKey);
    method sinter (line 527) | public <K extends Object> Future<List<byte[]>> sinter (K set1, K...sets);
    method sinterstore (line 533) | public <K extends Object> Future<ResponseStatus> sinterstore (K destSe...
    method sunion (line 541) | public <K extends Object> Future<List<byte[]>> sunion (K set1, K...sets);
    method sunionstore (line 548) | public <K extends Object> Future<ResponseStatus> sunionstore (K destSe...
    method sdiff (line 556) | public <K extends Object> Future<List<byte[]>> sdiff (K set1, K...sets);
    method sdiffstore (line 563) | public <K extends Object> Future<ResponseStatus> sdiffstore (K destSet...
    method smembers (line 570) | public <K extends Object> Future<List<byte[]>> smembers (K setkey);
    method srandmember (line 577) | public <K extends Object> Future<byte[]> srandmember (K setkey);
    method spop (line 584) | public <K extends Object> Future<byte[]> spop (K setkey);
    method zadd (line 596) | public <K extends Object> Future<Boolean> zadd (K setkey, double score...
    method zadd (line 597) | public <K extends Object> Future<Boolean> zadd (K setkey, double score...
    method zadd (line 598) | public <K extends Object> Future<Boolean> zadd (K setkey, double score...
    method zadd (line 599) | public <K extends Object, T extends Serializable>
    method zrem (line 608) | public <K extends Object> Future<Boolean> zrem (K setkey, byte[] member);
    method zrem (line 609) | public <K extends Object> Future<Boolean> zrem (K setkey, String strin...
    method zrem (line 610) | public <K extends Object> Future<Boolean> zrem (K setkey, Number numbe...
    method zrem (line 611) | public <K extends Object, T extends Serializable>
    method zcard (line 619) | public <K extends Object> Future<Long> zcard (K setKey);
    method zscore (line 627) | public <K extends Object> Future<Double> zscore (K setkey, byte[] memb...
    method zscore (line 628) | public <K extends Object> Future<Double> zscore (K setkey, String stri...
    method zscore (line 629) | public <K extends Object> Future<Double> zscore (K setkey, Number numb...
    method zscore (line 630) | public <K extends Object, T extends Serializable>
    method zrank (line 639) | public <K extends Object> Future<Long> zrank (K setkey, byte[] member);
    method zrank (line 640) | public <K extends Object> Future<Long> zrank (K setkey, String stringV...
    method zrank (line 641) | public <K extends Object> Future<Long> zrank (K setkey, Number numberV...
    method zrank (line 642) | public <K extends Object, T extends Serializable>
    method zrevrank (line 651) | public <K extends Object> Future<Long> zrevrank (K setkey, byte[] memb...
    method zrevrank (line 652) | public <K extends Object> Future<Long> zrevrank (K setkey, String stri...
    method zrevrank (line 653) | public <K extends Object> Future<Long> zrevrank (K setkey, Number numb...
    method zrevrank (line 654) | public <K extends Object, T extends Serializable>
    method zrange (line 664) | public <K extends Object> Future<List<byte[]>> zrange (K setkey, long ...
    method zrevrange (line 673) | public <K extends Object> Future<List<byte[]>> zrevrange (K setkey, lo...
    method zrangeSubset (line 688) | public <K extends Object> Future<List<ZSetEntry>> zrangeSubset (K setk...
    method zrevrangeSubset (line 703) | public <K extends Object> Future<List<ZSetEntry>> zrevrangeSubset (K s...
    method zincrby (line 712) | @Redis(versions="1.07")
    method zincrby (line 714) | public <K extends Object> Future<Double> zincrby (K setkey, double sco...
    method zincrby (line 715) | public <K extends Object> Future<Double> zincrby (K setkey, double sco...
    method zincrby (line 716) | public <K extends Object, T extends Serializable>
    method zrangebyscore (line 726) | public <K extends Object> Future<List<byte[]>> zrangebyscore (K setkey...
    method zrangebyscoreSubset (line 735) | public <K extends Object> Future<List<ZSetEntry>> zrangebyscoreSubset ...
    method zremrangebyscore (line 744) | public <K extends Object> Future<Long> zremrangebyscore (K setkey, dou...
    method zcount (line 753) | public <K extends Object> Future<Long> zcount (K setkey, double minSco...
    method zremrangebyrank (line 762) | public <K extends Object> Future<Long> zremrangebyrank (K setkey, long...
    method hset (line 776) | @Redis(versions="1.3.n")
    method hset (line 786) | @Redis(versions="1.3.n")
    method hset (line 796) | @Redis(versions="1.3.n")
    method hset (line 807) | @Redis(versions="1.3.4")
    method hget (line 817) | @Redis(versions="1.3.4")
    method hincrby (line 828) | public <K extends Object> Future<Long> hincrby(K key, K entry, long in...
    method hexists (line 838) | @Redis(versions="1.3.5")
    method hdel (line 848) | @Redis(versions="1.3.5")
    method hlen (line 858) | @Redis(versions="1.3.5")
    method hkeys (line 868) | @Redis(versions="1.3.n")
    method hvals (line 878) | @Redis(versions="1.3.n")
    method hgetall (line 888) | @Redis(versions="1.3.n")
    method flushdb (line 905) | public <K extends Object> Future<ResponseStatus> flushdb ();
    method flushall (line 913) | public <K extends Object> Future<ResponseStatus> flushall ();
    method move (line 923) | public <K extends Object> Future<Boolean> move (K key, int dbIndex);
    method sort (line 947) | public <K extends Object> Sort sort(K key);
    method save (line 956) | public <K extends Object> Future<ResponseStatus> save();
    method bgsave (line 961) | public <K extends Object> Future<ResponseStatus> bgsave ();
    method bgrewriteaof (line 967) | public <K extends Object> Future<String> bgrewriteaof ();
    method lastsave (line 973) | public <K extends Object> Future<Long> lastsave ();
    method info (line 984) | public <K extends Object> Future<Map<String, String>>	info () ;
    method slaveof (line 991) | public <K extends Object> Future<ResponseStatus>  slaveof(String host,...
    method slaveofnone (line 997) | public <K extends Object> Future<ResponseStatus>  slaveofnone();
    method echo (line 1007) | public <K extends Object> Future<byte[]> echo (byte[] msg);
    method echo (line 1008) | public <K extends Object> Future<byte[]> echo (String msg);
    method echo (line 1009) | public <K extends Object> Future<byte[]> echo (Number msg);
    method echo (line 1010) | public <K extends Object, T extends Serializable>
    method debug (line 1018) | public <K extends Object> Future<ObjectInfo> debug (K key);

FILE: core/api/src/main/java/org/jredis/KeyValueSet.java
  type KeyValueSet (line 31) | public interface KeyValueSet <K extends Object, T> {
    method add (line 32) | public KeyValueSet<K, T> add(K key, T value);
    method getMappings (line 33) | byte[][] getMappings ();
    type ByteArrays (line 35) | public interface ByteArrays<K extends Object> extends KeyValueSet<K, b...
    type Numbers (line 36) | public interface Numbers<K extends Object>  extends KeyValueSet<K, Num...
    type Strings (line 37) | public interface Strings<K extends Object>  extends KeyValueSet<K, Str...
    type Objects (line 38) | public interface Objects<K extends Object, T extends Serializable> ext...

FILE: core/api/src/main/java/org/jredis/NotSupportedException.java
  class NotSupportedException (line 29) | public class NotSupportedException extends ProviderException {
    method NotSupportedException (line 37) | public NotSupportedException(String string) {
    method NotSupportedException (line 43) | public NotSupportedException(String string, Throwable cause) {

FILE: core/api/src/main/java/org/jredis/ObjectEncoding.java
  type ObjectEncoding (line 28) | public enum ObjectEncoding {

FILE: core/api/src/main/java/org/jredis/ObjectInfo.java
  class ObjectInfo (line 34) | public class ObjectInfo {
    method ObjectInfo (line 43) | public ObjectInfo(String keyAddress, long keyRefCount,
    method getKeyAddress (line 58) | public String getKeyAddress() {
    method getKeyRefCount (line 63) | public long getKeyRefCount() {
    method getEncoding (line 73) | public ObjectEncoding getEncoding() {
    method toLong (line 84) | public static long toLong(String addressStrRep) {
    method toString (line 88) | @SuppressWarnings("boxing")
    method valueOf (line 107) | static public final ObjectInfo valueOf(String strRep) {

FILE: core/api/src/main/java/org/jredis/ProviderException.java
  class ProviderException (line 32) | public class ProviderException extends ClientRuntimeException {
    method ProviderException (line 44) | public ProviderException(String message) {
    method ProviderException (line 53) | public ProviderException(String message, Throwable cause) {

FILE: core/api/src/main/java/org/jredis/Query.java
  type Query (line 52) | public interface Query {
    method exec (line 62) | public List<byte[]> exec () throws IllegalStateException, RedisException;
    method execAsync (line 63) | public Future<List<byte[]>> execAsync ();
    class Support (line 65) | public static class Support {
      method unpackValue (line 66) | public static long unpackValue (List<byte[]> queryResult){

FILE: core/api/src/main/java/org/jredis/RedisException.java
  class RedisException (line 45) | public final class RedisException extends Exception {
    method RedisException (line 60) | public RedisException (Command command, String message){
    method getCommand (line 66) | public Command getCommand () { return command; }
    method toString (line 68) | public String toString () {

FILE: core/api/src/main/java/org/jredis/RedisInfo.java
  type RedisInfo (line 33) | public enum RedisInfo {

FILE: core/api/src/main/java/org/jredis/RedisType.java
  type RedisType (line 23) | public enum RedisType {

FILE: core/api/src/main/java/org/jredis/Semantics.java
  type Semantics (line 29) | public interface Semantics {
    method getKeyCodec (line 35) | public <T> Codec<T> getKeyCodec(Class<T> keyClass);
    method setKeyCodec (line 42) | public <T> Semantics setKeyCodec(Class<T> keyClass, Codec<T> keyCodec);
    method getValueCodec (line 48) | public <T> Codec<T> getValueCodec(Class<T> valueClass);
    method setValueCodec (line 55) | public <T> Semantics setValueCodec(Class<T> valueClass, Codec<T> value...

FILE: core/api/src/main/java/org/jredis/Sort.java
  type Sort (line 63) | public interface Sort extends Query {
    method BY (line 65) | <K extends Object> Sort BY    (K pattern);
    method GET (line 68) | <K extends Object> Sort GET   (K pattern);
    method LIMIT (line 75) | Sort LIMIT (long from, long count);
    method DESC (line 78) | Sort DESC  ();
    method ALPHA (line 81) | Sort ALPHA ();
    method STORE (line 103) | <K extends Object> Sort STORE (K destKey);

FILE: core/api/src/main/java/org/jredis/ZSetEntry.java
  type ZSetEntry (line 28) | public interface ZSetEntry{
    method getValue (line 30) | byte[] getValue();
    method getScore (line 33) | double getScore();

FILE: core/api/src/main/java/org/jredis/_specification.java
  type _specification (line 27) | public interface _specification {
    type Version (line 30) | public interface Version {

FILE: core/api/src/main/java/org/jredis/connector/Connection.java
  type Connection (line 67) | public interface Connection {
    method getSpec (line 73) | public ConnectionSpec getSpec();
    method serviceRequest (line 92) | public Response serviceRequest (Command cmd, byte[]...args) throws Red...
    method queueRequest (line 114) | public Future<Response> queueRequest (Command cmd,  byte[]...args) thr...
    type State (line 120) | public enum State {
    method addListener (line 140) | public boolean addListener(Listener connListener);
    method removeListener (line 148) | public boolean removeListener(Listener connListener);
    type Property (line 162) | public enum Property {
    type Modality (line 195) | public enum Modality {
    type Listener (line 216) | public interface Listener {
      method onEvent (line 217) | public void onEvent(Connection.Event event);
    class Event (line 229) | @SuppressWarnings("serial")
      method Event (line 235) | public Event (Connection src, Type type) {
      method Event (line 238) | public Event (Connection src, Type type, Object eventInfo) {
      type Type (line 242) | public enum Type {
    type Flag (line 275) | public enum Flag {
      method Flag (line 295) | Flag (){
      method bitset (line 298) | static final public int bitset(Flag...flags){
      method bitset (line 302) | static final public int bitset(final int bitset, Flag...flags){
      method bitclear (line 307) | static final public int bitclear(final int bitset, Flag...flags){
      method isSet (line 312) | public static boolean isSet(int bitset, Flag flag) {
    type Socket (line 320) | public interface Socket {
      type Flag (line 327) | public enum Flag {
      type Property (line 338) | public enum Property {
    type Factory (line 386) | public interface Factory {
      method newConnection (line 395) | public Connection newConnection (ConnectionSpec spec) throws ClientR...

FILE: core/api/src/main/java/org/jredis/connector/ConnectionException.java
  class ConnectionException (line 33) | abstract public class ConnectionException extends ClientRuntimeException{
    method ConnectionException (line 43) | public ConnectionException(String msg, SocketException e) {
    method ConnectionException (line 50) | public ConnectionException(String msg) {

FILE: core/api/src/main/java/org/jredis/connector/ConnectionFault.java
  class ConnectionFault (line 30) | public class ConnectionFault extends ConnectionException {
    method ConnectionFault (line 38) | public ConnectionFault(String msg, SocketException e) {
    method ConnectionFault (line 41) | public ConnectionFault(String msg) {

FILE: core/api/src/main/java/org/jredis/connector/ConnectionReset.java
  class ConnectionReset (line 48) | public class ConnectionReset extends ConnectionException {
    method ConnectionReset (line 58) | public ConnectionReset(String msg, SocketException e) {
    method ConnectionReset (line 61) | public ConnectionReset(String msg) {

FILE: core/api/src/main/java/org/jredis/connector/ConnectionSpec.java
  type ConnectionSpec (line 36) | public interface ConnectionSpec {
    method getAddress (line 40) | public InetAddress getAddress();
    method setAddress (line 45) | public ConnectionSpec setAddress(InetAddress address);
    method getPort (line 49) | public int getPort ();
    method setPort (line 54) | public ConnectionSpec setPort(int port);
    method getCredentials (line 61) | public byte[] getCredentials();
    method setCredentials (line 68) | public ConnectionSpec setCredentials(byte[] credentials);
    method setCredentials (line 75) | public ConnectionSpec setCredentials(String credentials);
    method getDatabase (line 82) | public int getDatabase ();
    method setDatabase (line 87) | public ConnectionSpec setDatabase(int database);
    method getModality (line 91) | public Modality getModality ();
    method setModality (line 96) | public ConnectionSpec setModality (Modality modality);
    method getSocketFlag (line 103) | public boolean getSocketFlag (Connection.Socket.Flag flag);
    method setSocketFlag (line 110) | public ConnectionSpec setSocketFlag(Connection.Socket.Flag flag, Boole...
    method getSocketProperty (line 117) | public Integer getSocketProperty (Connection.Socket.Property property);
    method setSocketProperty (line 124) | public ConnectionSpec setSocketProperty(Connection.Socket.Property pro...
    method getConnectionFlag (line 130) | public boolean getConnectionFlag (Connection.Flag flag);
    method setConnectionFlag (line 137) | public ConnectionSpec setConnectionFlag(Connection.Flag flag, Boolean ...
    method getConnectionProperty (line 143) | public Object getConnectionProperty(Property prop);
    method setConnectionProperty (line 150) | public ConnectionSpec setConnectionProperty(Property prop, Object value);
    method getReconnectCnt (line 154) | public int	getReconnectCnt ();
    method setReconnectCnt (line 159) | public ConnectionSpec setReconnectCnt(int cnt);
    method getMaxConnectWait (line 163) | public int	getMaxConnectWait ();
    method setMaxConnectWait (line 168) | public ConnectionSpec setMaxConnectWait(int cnt);
    method getHeartbeat (line 172) | public int	getHeartbeat();
    method setHeartbeat (line 177) | public ConnectionSpec setHeartbeat(int seconds);
    class RefImpl (line 196) | public static class RefImpl implements ConnectionSpec {
      method getAddress (line 225) | @Override
      method getCredentials (line 230) | @Override
      method getDatabase (line 235) | @Override
      method getPort (line 240) | @Override
      method getModality (line 245) | final public Modality getModality () {
      method getMaxConnectWait (line 250) | final public int getMaxConnectWait () {
      method getReconnectCnt (line 255) | @Override
      method getSocketFlag (line 260) | @Override
      method getSocketProperty (line 265) | @Override
      method getConnectionProperty (line 270) | @Override
      method setAddress (line 279) | final public ConnectionSpec setAddress (InetAddress address) {
      method setPort (line 284) | @Override
      method setCredentials (line 291) | @Override
      method setCredentials (line 297) | @Override
      method setDatabase (line 307) | @Override
      method setReconnectCnt (line 313) | @Override
      method setConnectionProperty (line 319) | @Override
      method setModality (line 326) | @Override
      method setMaxConnectWait (line 332) | final public ConnectionSpec setMaxConnectWait(int cnt) {
      method setSocketFlag (line 337) | @Override
      method setSocketProperty (line 343) | @Override
      method getConnectionFlag (line 349) | @Override
      method setConnectionFlag (line 354) | @SuppressWarnings("boxing")
      method getHeartbeat (line 364) | @Override
      method setHeartbeat (line 369) | @Override

FILE: core/api/src/main/java/org/jredis/connector/FaultedConnection.java
  class FaultedConnection (line 36) | public class FaultedConnection implements Connection {
    method FaultedConnection (line 48) | public FaultedConnection (ConnectionSpec connSpec, String errMsg) {
    method getSpec (line 54) | @Override
    method serviceRequest (line 60) | @Override
    method queueRequest (line 68) | @Override
    method addListener (line 75) | @Override
    method removeListener (line 80) | @Override

FILE: core/api/src/main/java/org/jredis/connector/Message.java
  type Message (line 35) | public interface Message {
    method read (line 49) | public void	read (InputStream    in) throws ClientRuntimeException, Pr...
    method write (line 63) | public void	write (OutputStream  out)throws ClientRuntimeException, Pr...

FILE: core/api/src/main/java/org/jredis/connector/NotConnectedException.java
  class NotConnectedException (line 36) | public class NotConnectedException extends ClientRuntimeException {
    method NotConnectedException (line 40) | public NotConnectedException (String msg) {

FILE: core/api/src/main/java/org/jredis/connector/RequestListener.java
  type RequestListener (line 22) | public interface RequestListener {
    method onResponse (line 24) | public void onResponse (Object context, Request request, Response resp...

FILE: core/api/src/main/java/org/jredis/protocol/BulkResponse.java
  type BulkResponse (line 28) | public interface BulkResponse extends Response {
    method getBulkData (line 33) | public byte[] getBulkData ();

FILE: core/api/src/main/java/org/jredis/protocol/Command.java
  type Command (line 35) | @Redis(versions={"1.n", "2.0"})
    method Command (line 190) | Command (RequestType reqType, ResponseType respType, Flag... flags) {
    method isSet (line 213) | final public boolean isSet(Flag flag) {
    type Option (line 229) | public enum Option {
      method Option (line 240) | Option () {
    type Flag (line 252) | public enum Flag {
      method Flag (line 259) | Flag (){
      method bitset (line 262) | static final public int bitset(Flag...flags){
      method bitset (line 265) | static final public int bitset(final int bitsetin, Flag...flags){
      method isSet (line 270) | public static boolean isSet(int bitset, Flag flag) {
      method bitclear (line 273) | static final public int bitclear(final int bitsetin, Flag...flags){
    type RequestType (line 289) | public enum RequestType {
    type ResponseType (line 335) | public enum ResponseType {
      method ResponseType (line 364) | ResponseType (Class<? extends Response> respClass){

FILE: core/api/src/main/java/org/jredis/protocol/CommandNotImplemented.java
  class CommandNotImplemented (line 31) | public final class CommandNotImplemented extends ProviderException {
    method CommandNotImplemented (line 38) | public CommandNotImplemented (Command command) { super(command.code + ...

FILE: core/api/src/main/java/org/jredis/protocol/MultiBulkResponse.java
  type MultiBulkResponse (line 35) | public interface MultiBulkResponse extends Response {
    method getMultiBulkData (line 47) | public List<byte[]>		getMultiBulkData () throws ClientRuntimeException...

FILE: core/api/src/main/java/org/jredis/protocol/Protocol.java
  type Protocol (line 40) | public interface Protocol {
    method isCompatibleWithVersion (line 47) | public boolean isCompatibleWithVersion (String version);
    method createRequest (line 57) | public Request createRequest (Command cmd, byte[]...args) throws Provi...
    method createResponse (line 72) | public Response createResponse (Command cmd) throws ProviderException,...
    method createRequestBuffer (line 82) | public byte[] createRequestBuffer(Command cmd, byte[]...args) throws P...
    type Factory (line 84) | public interface Factory {
      method newProtocol (line 92) | public Protocol newProtocol(ConnectionSpec connSpec) throws NotSuppo...

FILE: core/api/src/main/java/org/jredis/protocol/Request.java
  type Request (line 30) | public interface Request extends Message {/* nop */}

FILE: core/api/src/main/java/org/jredis/protocol/Response.java
  type Response (line 53) | public interface Response extends Message {
    method isError (line 61) | public boolean isError ();
    method getType (line 66) | public Type getType ();
    method getStatus (line 72) | public ResponseStatus getStatus();
    method didRead (line 78) | public boolean didRead ();
    type Type (line 102) | public enum Type{
      method getDataClass (line 115) | public Class<?>   getDataClass() { return dataClass; }
      method Type (line 119) | Type (Class<?> clazz){

FILE: core/api/src/main/java/org/jredis/protocol/ResponseStatus.java
  class ResponseStatus (line 27) | public final class ResponseStatus {
    type Code (line 30) | public enum Code { OK, ERROR, CIAO }
    method ResponseStatus (line 49) | public ResponseStatus(ResponseStatus.Code code) {
    method ResponseStatus (line 58) | public ResponseStatus(ResponseStatus.Code code, String msg) {
    method code (line 63) | public ResponseStatus.Code code() { return code; }
    method message (line 64) | public String message() {return msg; }
    method isError (line 65) | public boolean isError () { return this.code==Code.ERROR; }

FILE: core/api/src/main/java/org/jredis/protocol/StatusResponse.java
  type StatusResponse (line 28) | public interface StatusResponse extends Response {/* nop */}

FILE: core/api/src/main/java/org/jredis/protocol/ValueResponse.java
  type ValueResponse (line 35) | public interface ValueResponse extends Response {
    method getLongValue (line 41) | public long getLongValue () throws IllegalStateException;
    method getStringValue (line 56) | public String getStringValue () throws IllegalStateException;
    method getBooleanValue (line 61) | public boolean getBooleanValue () throws IllegalStateException;

FILE: core/api/src/main/java/org/jredis/resource/Context.java
  type Context (line 16) | public interface Context {
    method getParam (line 17) | public String getParam (String key);
    method setParam (line 18) | public void setParam (String key, String value);
    method getParamsKeys (line 19) | Set<String> getParamsKeys();
    method get (line 21) | public Object get (String name);
    method bind (line 22) | public void bind   (String name, Object value);
    method rebind (line 23) | public void rebind   (String name, Object value);

FILE: core/api/src/main/java/org/jredis/resource/Resource.java
  type Resource (line 29) | public interface Resource <T> {
    method getInterface (line 34) | public T getInterface();
    method setContext (line 45) | public void setContext (Context context) throws ResourceException;
    method getContext (line 53) | public Context getContext () throws ResourceException;

FILE: core/api/src/main/java/org/jredis/resource/ResourceException.java
  class ResourceException (line 14) | public class ResourceException extends ClientRuntimeException {
    method ResourceException (line 21) | public ResourceException(String message, Throwable cause) {
    method ResourceException (line 28) | public ResourceException(String message) {

FILE: core/api/src/main/java/org/jredis/resource/_specification.java
  type _specification (line 28) | public interface _specification {
    type Version (line 31) | public interface Version {

FILE: core/api/src/main/java/org/jredis/semantics/BasicCodecManager.java
  class BasicCodecManager (line 26) | public final class BasicCodecManager implements CodecManager {
    method foo (line 28) | public void foo () {
    method getCodec (line 33) | @SuppressWarnings("unchecked")
    method register (line 39) | @Override

FILE: core/api/src/main/java/org/jredis/semantics/CodecManager.java
  type CodecManager (line 33) | public interface CodecManager {
    method getCodec (line 34) | public <T> Codec<T>		getCodec(Class<T> type);
    method register (line 35) | public <T>	boolean 	register (Codec<T> code, Class<T> type);

FILE: core/api/src/main/java/org/jredis/semantics/KeyCodec.java
  type KeyCodec (line 56) | public interface KeyCodec<K extends Object> extends Codec<K> {/* nop */}

FILE: core/api/src/main/java/org/jredis/semantics/SemanticJRedis.java
  type SemanticJRedis (line 38) | public interface SemanticJRedis <T> /* extends JRedis */
    method auth (line 59) | public JRedis auth (String authorization) throws RedisException;
    method ping (line 70) | public JRedis ping () throws RedisException;
    method quit (line 71) | public void quit ();
    method set (line 77) | public void set (String key, T value) throws RedisException;
    method setnx (line 79) | public boolean setnx (String key, T value) throws RedisException;
    method get (line 81) | public T get (String key)  throws RedisException;
    method mget (line 83) | public List<T> mget(String key, String...moreKeys) throws RedisException;
    method incr (line 85) | public long incr (String key) throws RedisException;
    method incrby (line 86) | public long incrby (String key, int delta) throws RedisException;
    method decr (line 87) | public long decr (String key) throws RedisException;
    method decrby (line 88) | public long decrby (String key, int delta) throws RedisException;
    method exists (line 90) | public boolean exists(String key) throws RedisException;
    method del (line 91) | public boolean del (String key) throws RedisException;
    method type (line 92) | public RedisType type (String key) throws RedisException;
    method keys (line 99) | public List<String> keys () throws RedisException;
    method keys (line 100) | public List<String> keys (String pattern) throws RedisException;
    method randomkey (line 101) | public String randomkey() throws RedisException;
    method rename (line 102) | public String rename (String oldkey, String newkey) throws RedisExcept...
    method renamenx (line 103) | public boolean renamenx (String oldkey, String brandnewkey) throws Red...
    method dbsize (line 104) | public long dbsize () throws RedisException;
    method expire (line 105) | public boolean expire (String key, int ttlseconds) throws RedisException;
    method rpush (line 110) | public void rpush (String listkey, T value) throws RedisException;
    method lpush (line 111) | public void lpush (String listkey, T value) throws RedisException;
    method lset (line 112) | public void lset (String key, int index, T value) throws RedisException;
    method lrem (line 113) | public long lrem (String listKey, T value,       int count) throws Red...
    method llen (line 114) | public long llen (String listkey) throws RedisException;
    method lrange (line 115) | public List<T> lrange (String listkey, int from, int to) throws RedisE...
    method ltrim (line 116) | public void ltrim (String listkey, int keepFrom, int keepTo) throws Re...
    method lindex (line 117) | public T lindex (String listkey, int index) throws RedisException;
    method lpop (line 118) | public T lpop (String listKey) throws RedisException;
    method rpop (line 119) | public T rpop (String listKey) throws RedisException;
    method sadd (line 125) | public boolean sadd (String setkey, T member) throws RedisException;
    method srem (line 126) | public boolean srem (String setKey, T member) throws RedisException;
    method sismember (line 127) | public boolean sismember (String setKey, T member) throws RedisException;
    method scard (line 128) | public long scard (String setKey) throws RedisException;
    method sinter (line 129) | public List<T> sinter (String set1, String...sets) throws RedisException;
    method sinterstore (line 130) | public void sinterstore (String destSetKey, String...sets) throws Redi...
    method smembers (line 131) | public List<T> smembers (String setkey) throws RedisException;
    method select (line 137) | public JRedis select (int index) throws RedisException;
    method flushdb (line 138) | public JRedis flushdb () throws RedisException;
    method flushall (line 139) | public JRedis flushall () throws RedisException;
    method move (line 140) | public boolean move (String key, int dbIndex) throws RedisException;
    method sort (line 146) | public SemanticSort<T> sort(String key);
    method save (line 152) | public void save() throws RedisException;
    method bgsave (line 153) | public void bgsave () throws RedisException;
    method lastsave (line 154) | public long lastsave () throws RedisException;
    method shutdown (line 155) | public void shutdown () throws RedisException;
    method info (line 161) | public Map<String, String>	info ()  throws RedisException;

FILE: core/api/src/main/java/org/jredis/semantics/SemanticQuery.java
  type SemanticQuery (line 32) | public interface SemanticQuery <T> /*extends Query*/ {
    method exec (line 33) | public List <T> exec () throws IllegalStateException, RedisException;

FILE: core/api/src/main/java/org/jredis/semantics/SemanticSort.java
  type SemanticSort (line 30) | public interface SemanticSort <T> extends Sort {/* nop */}

FILE: core/api/src/main/java/org/jredis/semantics/Semantics.java
  type Semantics (line 30) | public interface Semantics extends CodecManager{
    method forType (line 31) | public <T> SemanticJRedis<T>  forType (Class<T>  type) throws NotSuppo...

FILE: core/api/src/test/java/org/jredis/TestBase.java
  class TestBase (line 32) | public class TestBase {
    method assertDidRaiseRuntimeError (line 48) | protected final <T extends RuntimeException> void assertDidRaiseRuntim...
    method assertNotNull (line 65) | public static void assertNotNull(Object object, String msgfmt, Object....
    method assertNull (line 70) | public static void assertNull(Object object, String msgfmt, Object...o...
    method assertEquals (line 76) | public static void assertEquals(Object actual, Object expected, String...
    method assertEquals (line 80) | public static void assertEquals(byte[] actual, byte[] expected, String...
    method assertTrue (line 86) | public static void assertTrue(boolean condition, String msgfmt, Object...
    method assertFalse (line 90) | public static void assertFalse(boolean condition, String msgfmt, Objec...

FILE: core/api/src/test/java/org/jredis/compliance/CheckRedisCompliance.java
  class CheckRedisCompliance (line 49) | public class CheckRedisCompliance {
    method CheckRedisCompliance (line 63) | public CheckRedisCompliance(int major, int minor) throws Exception {
    method run (line 68) | private void run() throws Exception {
    method checkAndReportCompliance (line 73) | private List<String> checkAndReportCompliance(List<String> cmdlist, Cl...
    method reportNonCompliance (line 90) | private void reportNonCompliance(List<String> notsupported, String sim...
    method getSpecCommandList (line 98) | private List<String> getSpecCommandList() throws IOException {
    method getSpecFileInputStream (line 107) | private static InputStream getSpecFileInputStream(int major, int minor) {
    method main (line 119) | public static void main(String[] args) {

FILE: core/api/src/test/java/org/jredis/connector/TestSpecElements.java
  class TestSpecElements (line 31) | public class TestSpecElements extends TestBase{
    method testConnectionFlags (line 36) | @Test
    method testCredentialsOverloads (line 60) | @Test

FILE: core/api/src/test/java/org/jredis/protocol/TestCommand.java
  class TestCommand (line 35) | public class TestCommand extends TestBase {
    method testCommandSemanticsRequestType (line 36) | @Test
    method testCommandFlags (line 43) | @Test

FILE: core/bench/src/main/java/org/jredis/bench/JRedisBenchmark.java
  class JRedisBenchmark (line 43) | public abstract class JRedisBenchmark {
    method quitOnRunEnd (line 67) | protected void quitOnRunEnd (boolean flag) { this.quitOnRunEnd = flag; }
    method getImplementationClass (line 71) | protected abstract Class<? extends JRedis> getImplementationClass();
    method newConnection (line 79) | protected abstract JRedis newConnection(String host, int port, int db,...
    method runBenchmarks (line 98) | protected final void  runBenchmarks(String host, int port, int threadC...
    method newPingWorker (line 189) | public  final BenchmarkWorker newPingWorker (String host, int port, in...
    method newDbsizeWorker (line 206) | public  final BenchmarkWorker newDbsizeWorker (String host, int port, ...
    method newSaddWorker (line 223) | public final BenchmarkWorker newSaddWorker (String host, int port, int...
    method newSremWorker (line 241) | public final BenchmarkWorker newSremWorker (String host, int port, int...
    method newScardWorker (line 266) | public final BenchmarkWorker newScardWorker (String host, int port, in...
    method newLLenWorker (line 291) | public final BenchmarkWorker newLLenWorker (String host, int port, int...
    method newLPopWorker (line 316) | public final BenchmarkWorker newLPopWorker (String host, int port, int...
    method newRPopWorker (line 341) | public final BenchmarkWorker newRPopWorker (String host, int port, int...
    method newLPushWorker (line 366) | public final BenchmarkWorker newLPushWorker (String host, int port, in...
    method newRPushWorker (line 384) | public final BenchmarkWorker newRPushWorker (String host, int port, in...
    method newIncrWorker (line 402) | public final BenchmarkWorker newIncrWorker (String host, int port, int...
    method newDecrWorker (line 420) | public final BenchmarkWorker newDecrWorker (String host, int port, int...
    method newIncrbyWorker (line 437) | public final BenchmarkWorker newIncrbyWorker (String host, int port, i...
    method newDecrbyWorker (line 455) | public final BenchmarkWorker newDecrbyWorker (String host, int port, i...
    method newSetWorker (line 473) | public  final BenchmarkWorker newSetWorker (String host, int port, int...
    method newSetnxWorker (line 492) | public  final BenchmarkWorker newSetnxWorker (String host, int port, i...
    method newGetWorker (line 510) | public  final BenchmarkWorker newGetWorker (String host, int port, int...
    method newSmembersWorker (line 535) | public  final BenchmarkWorker newSmembersWorker (String host, int port...
    class Benchmarker (line 564) | public static class Benchmarker {
      method runBenchmark (line 565) | public static final void runBenchmark(final Command cmd, final int r...
      method Benchmarker (line 572) | private Benchmarker (final Command cmd, final int reqCnt, final int ...
      method runBenchmark (line 579) | private void runBenchmark () {
    class BenchmarkWorker (line 641) | public abstract class BenchmarkWorker implements Runnable {
      method BenchmarkWorker (line 655) | public BenchmarkWorker (String host, int port, int db) {
      method run (line 670) | public void run() {
      method prep (line 700) | protected abstract void prep();
      method work (line 702) | protected abstract void work();

FILE: core/bench/src/main/java/org/jredis/bench/JRedisJProfileSubject.java
  class JRedisJProfileSubject (line 31) | public class JRedisJProfileSubject {
    method JRedisJProfileSubject (line 34) | public JRedisJProfileSubject (JRedis jredis){
    method JRedisJProfileSubject (line 37) | protected JRedisJProfileSubject () {
    method run (line 48) | public void run () throws RedisException {

FILE: core/bench/src/main/java/org/jredis/bench/Util.java
  class Util (line 25) | public class Util {
    method getRandomString (line 45) | static
    method getRandomBytes (line 59) | static
    class Timer (line 72) | public static final class Timer {
      method Timer (line 77) | private Timer () {}
      method startNewTimer (line 79) | public static final Timer startNewTimer() {
      method mark (line 82) | public long mark () {
      method now (line 87) | public static final long now() { return System.currentTimeMillis(); }
      method opsPerSecAtDelta (line 92) | public float opsPerSecAtDelta (long opCount, long delta) {
      method opsPerSecAtMark (line 96) | public float opsPerSecAtMark (long opCount) {
      method deltaAtMark (line 103) | public long deltaAtMark () { return delta;}
      method deltaAtMark (line 111) | public long deltaAtMark (TimeUnit unit){

FILE: core/bench/src/main/java/org/jredis/ri/alphazero/bench/JRedisClientBenchmark.java
  class JRedisClientBenchmark (line 34) | public class JRedisClientBenchmark extends JRedisBenchmark {
    method main (line 44) | public static void main(String[] args) {
    method newConnection (line 62) | @Override
    method getImplementationClass (line 66) | @Override

FILE: core/bench/src/main/java/org/jredis/ri/alphazero/bench/JRedisClientJProfileSubject.java
  class JRedisClientJProfileSubject (line 33) | public class JRedisClientJProfileSubject extends JRedisJProfileSubject{
    method main (line 35) | public static void main(String[] args) throws RedisException {

FILE: core/bench/src/main/java/org/jredis/ri/alphazero/bench/SimpleBenchJRedisAsync.java
  class SimpleBenchJRedisAsync (line 12) | public class SimpleBenchJRedisAsync {
    method main (line 13) | public static void main(String[] args) {
    method run (line 17) | private void run() {
    method cleandb (line 55) | private void cleandb(JRedisFuture jredis) throws InterruptedException,...

FILE: core/bench/src/main/java/org/jredis/ri/alphazero/bench/SimpleBenchJRedisChunkedPipeline.java
  class SimpleBenchJRedisChunkedPipeline (line 14) | public class SimpleBenchJRedisChunkedPipeline implements Runnable {
    method main (line 15) | public static void main(String[] args) {
    method run (line 28) | @Override
    method cleandb (line 61) | @SuppressWarnings("unused")

FILE: core/bench/src/main/java/org/jredis/ri/alphazero/bench/SimpleBenchJRedisClient.java
  class SimpleBenchJRedisClient (line 11) | public class SimpleBenchJRedisClient {
    method main (line 12) | public static void main(String[] args) {
    method run (line 20) | private void run() throws RedisException {
    method cleandb (line 48) | private void cleandb(JRedis jredis) throws RedisException {

FILE: core/bench/src/main/java/org/jredis/ri/alphazero/bench/SimpleBenchJRedisPipeline.java
  class SimpleBenchJRedisPipeline (line 13) | public class SimpleBenchJRedisPipeline {
    method main (line 14) | public static void main(String[] args) {
    method run (line 18) | private void run() {
    method cleandb (line 56) | private void cleandb(JRedisFuture jredis) throws InterruptedException,...

FILE: core/ri/src/main/java/org/jredis/ri/RI.java
  type RI (line 32) | public interface RI {
    type Release (line 33) | public enum Release {

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/BulkSetMapping.java
  class BulkSetMapping (line 28) | public abstract class BulkSetMapping<K extends Object, T> implements Key...
    method toBytes (line 30) | abstract byte[] toBytes(T value) ;
    method getMappings (line 31) | public byte[][] getMappings () {
    method add (line 41) | public KeyValueSet<K, T> add (K key, T value) {
    method newByteArrayKVSet (line 46) | public static <K extends Object> KeyValueSet.ByteArrays<K> newByteArra...
    class Bytes (line 47) | final static class Bytes<K extends Object> extends BulkSetMapping<K, b...
      method toBytes (line 48) | byte[] toBytes(byte[] value) { return value;}
    method newStringKVSet (line 50) | public static <K extends Object> KeyValueSet.Strings<K> newStringKVSet...
    class Strings (line 51) | final static class Strings<K extends Object>  extends BulkSetMapping<K...
      method toBytes (line 52) | byte[] toBytes(String value) { return DefaultKeyCodec.provider().enc...
    method newNumberKVSet (line 54) | public static <K extends Object> KeyValueSet.Numbers<K> newNumberKVSet...
    class Numbers (line 55) | final static class Numbers<K extends Object>  extends BulkSetMapping<K...
      method toBytes (line 56) | byte[] toBytes(Number value) { return String.valueOf(value).getBytes...
    method newObjectKVSet (line 58) | public static <K extends Object, T extends Serializable> KeyValueSet.O...
    class Objects (line 59) | final static class  Objects <K extends Object, T extends Serializable>...
      method toBytes (line 60) | byte[] toBytes(T value) { return DefaultCodec.encode(value);}

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/JRedisAsyncClient.java
  class JRedisAsyncClient (line 41) | public class JRedisAsyncClient extends JRedisFutureSupport {
    method JRedisAsyncClient (line 58) | public JRedisAsyncClient (ConnectionSpec connectionSpec) {
    method createAsyncConnection (line 72) | final private Connection createAsyncConnection() {
    method queueRequest (line 98) | protected  Future<Response> queueRequest (Command cmd, byte[]...args) ...

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/JRedisChunkedPipeline.java
  class JRedisChunkedPipeline (line 41) | public class JRedisChunkedPipeline extends JRedisFutureSupport {
    method JRedisChunkedPipeline (line 44) | public JRedisChunkedPipeline(ConnectionSpec spec){
    method queueRequest (line 48) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/JRedisClient.java
  class JRedisClient (line 76) | @Redis(versions={"1.00"})
    method JRedisClient (line 89) | public JRedisClient (ConnectionSpec connectionSpec){
    method JRedisClient (line 102) | public JRedisClient (String password) throws ClientRuntimeException {
    method JRedisClient (line 113) | public JRedisClient ( ) throws ClientRuntimeException {
    method JRedisClient (line 123) | public JRedisClient(String host, int port) throws ClientRuntimeExcepti...
    method JRedisClient (line 138) | public JRedisClient (String host, int port, String password, int datab...
    method serviceRequest (line 147) | @Override
    method setConnection (line 156) | @Override
    method getInterface (line 173) | @Override
    method getCredentialBytes (line 185) | private static byte[] getCredentialBytes (String password){

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/JRedisFutureSupport.java
  class JRedisFutureSupport (line 59) | public abstract class JRedisFutureSupport implements JRedisFuture {
    method queueRequest (line 92) | abstract protected  Future<Response> queueRequest (Command cmd, byte[]...
    method bgsave (line 108) | @Override
    method bgrewriteaof (line 113) | @Override
    method ping (line 119) | @Override
    method flushall (line 124) | @Override
    method flushdb (line 128) | @Override
    method slaveof (line 137) | @Override
    method slaveofnone (line 149) | public <K extends Object> Future<ResponseStatus>  slaveofnone() {
    method rename (line 153) | @Override
    method renamenx (line 166) | @Override
    method rpush (line 179) | public <K extends Object> FutureLong rpush(K key, byte[] value)  {
    method rpushx (line 190) | public <K extends Object> FutureLong rpushx(K key, byte[] value) {
    method lpushx (line 201) | public <K extends Object> FutureLong lpushx(K key, byte[] value) {
    method linsert (line 212) | public <K extends Object> FutureLong linsert(K key, boolean after, byt...
    method linsertAfter (line 224) | public <K extends Object> FutureLong linsertAfter(K key, byte[] oldval...
    method linsertBefore (line 228) | public <K extends Object> FutureLong linsertBefore(K key, byte[] oldva...
    method rpoplpush (line 232) | @Override
    method rpush (line 244) | @Override
    method rpush (line 249) | @Override
    method rpush (line 253) | @Override
    method sadd (line 259) | @Override
    method sadd (line 269) | @Override
    method sadd (line 273) | @Override
    method sadd (line 277) | @Override
    method zadd (line 283) | @Override
    method zadd (line 293) | @Override
    method zadd (line 297) | @Override
    method zadd (line 301) | @Override
    method zincrby (line 307) | @Override
    method zincrby (line 317) | @Override
    method zincrby (line 321) | @Override
    method zincrby (line 325) | @Override
    method save (line 331) | @Override
    method setbit (line 339) | @Override
    method getbit (line 353) | @Override
    method set (line 365) | @Override
    method set (line 373) | @Override
    method set (line 377) | @Override
    method set (line 381) | @Override
    method getset (line 387) | @Override
    method getset (line 396) | @Override
    method getset (line 400) | @Override
    method getset (line 404) | @Override
    method setnx (line 411) | @Override
    method setnx (line 420) | @Override
    method setnx (line 424) | @Override
    method setnx (line 428) | @Override
    method append (line 434) | @Override
    method append (line 443) | @Override
    method append (line 447) | @Override
    method append (line 451) | @Override
    method sismember (line 456) | @Override
    method sismember (line 466) | @Override
    method sismember (line 471) | @Override
    method sismember (line 476) | @Override
    method smove (line 481) | public <K extends Object> Future<Boolean> smove (K srcKey, K destKey, ...
    method smove (line 493) | public <K extends Object> Future<Boolean> smove (K srcKey, K destKey, ...
    method smove (line 496) | public <K extends Object> Future<Boolean> smove (K srcKey, K destKey, ...
    method smove (line 499) | public <K extends Object, T extends Serializable>
    method hset (line 508) | public <K extends Object> Future<Boolean> hset(K key, K field, byte[] ...
    method hset (line 520) | public <K extends Object> Future<Boolean> hset(K key, K field, String ...
    method hincrby (line 524) | public <K extends Object> Future<Long> hincrby(K key, K field, long in...
    method hset (line 537) | public <K extends Object> Future<Boolean> hset(K key, K field, Number ...
    method hset (line 540) | public <K extends Object, T extends Serializable>
    method hget (line 545) | public <K extends Object> Future<byte[]> hget(K key, K entry) {
    method hexists (line 559) | public <K extends Object> Future<Boolean> hexists(K key, K entry) {
    method hdel (line 572) | public <K extends Object> Future<Boolean> hdel(K key, K entry) {
    method hlen (line 585) | public <K extends Object> Future<Long> hlen(K key) {
    method hkeys (line 595) | public <K extends Object> Future<List<byte[]>> hkeys(K key) {
    method hvals (line 604) | @Override
    method hgetall (line 613) | @Override
    method incr (line 626) | @Override
    method incrby (line 636) | @Override
    method decr (line 646) | @Override
    method decrby (line 656) | @Override
    method llen (line 666) | @Override
    method scard (line 676) | @Override
    method zcard (line 686) | @Override
    method srandmember (line 696) | public <K extends Object> Future<byte[]> srandmember (K key) {
    method spop (line 705) | public <K extends Object> Future<byte[]> spop (K key) {
    method dbsize (line 716) | @Override
    method lastsave (line 721) | @Override
    method get (line 729) | @Override
    method lindex (line 739) | @Override
    method lpop (line 748) | @Override
    method rpop (line 758) | @Override
    method randomkey (line 771) | @Override
    method type (line 776) | @Override
    method info (line 787) | @Override
    method debug (line 792) | @Override
    method mget (line 802) | @Override
    method mset (line 819) | private FutureStatus mset(byte[][] mappings){
    method mset (line 823) | public <K extends Object> FutureStatus mset(Map<K, byte[]> keyValueMap){
    method mset (line 834) | public <K extends Object> FutureStatus mset(KeyValueSet.ByteArrays<K> ...
    method mset (line 837) | public <K extends Object> FutureStatus mset(KeyValueSet.Strings<K> key...
    method mset (line 841) | public <K extends Object> FutureStatus mset(KeyValueSet.Numbers<K> key...
    method mset (line 845) | public <K extends Object, T extends Serializable> FutureStatus mset(Ke...
    method msetnx (line 850) | private Future<Boolean> msetnx(byte[][] mappings){
    method msetnx (line 854) | public <K extends Object> Future<Boolean> msetnx(Map<K, byte[]> keyVal...
    method msetnx (line 865) | public <K extends Object> Future<Boolean> msetnx(KeyValueSet.ByteArray...
    method msetnx (line 868) | public <K extends Object> Future<Boolean> msetnx(KeyValueSet.Strings<K...
    method msetnx (line 872) | public <K extends Object> Future<Boolean> msetnx(KeyValueSet.Numbers<K...
    method msetnx (line 876) | public <K extends Object,T extends Serializable> Future<Boolean> msetn...
    method smembers (line 881) | @Override
    method keys (line 889) | @Override
    method keys (line 894) | @Override
    method keystolist (line 904) | public <K extends Object> Future<Long> keystolist(String pattern, Stri...
    method lrange (line 915) | @Override
    method substr (line 927) | @Override
    method zrange (line 939) | @Override
    method zrangebyscore (line 951) | @Override
    method zrangebyscoreSubset (line 963) | @Override
    method zremrangebyscore (line 975) | @Override
    method zcount (line 987) | @Override
    method zremrangebyrank (line 999) | @Override
    method zrevrange (line 1012) | @Override
    method zrangeSubset (line 1024) | @Override
    method zrevrangeSubset (line 1036) | @Override
    method sort (line 1048) | @Override
    method quit (line 1078) | @Override
    method flush (line 1082) | @Override
    method sinter (line 1087) | @Override
    method sunion (line 1104) | @Override
    method sdiff (line 1121) | @Override
    method sinterstore (line 1137) | @Override
    method sunionstore (line 1156) | @Override
    method sdiffstore (line 1175) | @Override
    method del (line 1194) | @Override
    method exists (line 1212) | @Override
    method lpush (line 1223) | @Override
    method lpush (line 1235) | @Override
    method lpush (line 1239) | @Override
    method lpush (line 1243) | @Override
    method lrem (line 1251) | @Override
    method lrem (line 1262) | @Override
    method lrem (line 1266) | @Override
    method lrem (line 1270) | @Override
    method lset (line 1277) | @Override
    method lset (line 1286) | @Override
    method lset (line 1290) | @Override
    method lset (line 1294) | @Override
    method move (line 1299) | @Override
    method srem (line 1310) | @Override
    method srem (line 1319) | @Override
    method srem (line 1323) | @Override
    method srem (line 1327) | @Override
    method zrem (line 1333) | @Override
    method zrem (line 1342) | @Override
    method zrem (line 1346) | @Override
    method zrem (line 1350) | @Override
    method zscore (line 1357) | @Override
    method zscore (line 1366) | @Override
    method zscore (line 1370) | @Override
    method zscore (line 1374) | @Override
    method zrank (line 1380) | @Override
    method zrank (line 1389) | @Override
    method zrank (line 1393) | @Override
    method zrank (line 1397) | @Override
    method zrevrank (line 1403) | @Override
    method zrevrank (line 1412) | @Override
    method zrevrank (line 1416) | @Override
    method zrevrank (line 1420) | @Override
    method ltrim (line 1427) | @Override
    method expire (line 1438) | @Override
    method expireat (line 1450) | @Override
    method ttl (line 1463) | @Override
    class FutureResultBase (line 1480) | public static class FutureResultBase {
      method FutureResultBase (line 1482) | protected FutureResultBase(Future<Response> pendingRequest){ this.pe...
      method cancel (line 1483) | public boolean cancel (boolean mayInterruptIfRunning) {
      method isCancelled (line 1486) | public boolean isCancelled () {
      method isDone (line 1489) | public boolean isDone () {
    class FutureStatus (line 1493) | public static class FutureStatus extends FutureResultBase implements F...
      method FutureStatus (line 1495) | protected FutureStatus (Future<Response> pendingRequest) { super(pen...
      method get (line 1496) | public ResponseStatus get () throws InterruptedException, ExecutionE...
      method get (line 1502) | public ResponseStatus get (long timeout, TimeUnit unit)
    class FutureBoolean (line 1511) | public static class FutureBoolean extends FutureResultBase implements ...
      method FutureBoolean (line 1513) | protected FutureBoolean (Future<Response> pendingRequest) { super(pe...
      method get (line 1515) | @SuppressWarnings("boxing")
      method get (line 1521) | @SuppressWarnings("boxing")
    class FutureBit (line 1530) | public static class FutureBit extends FutureResultBase implements Futu...
      method FutureBit (line 1532) | protected FutureBit (Future<Response> pendingRequest) { super(pendin...
      method get (line 1534) | @SuppressWarnings("boxing")
      method get (line 1540) | @SuppressWarnings("boxing")
    class FutureString (line 1549) | public static class FutureString extends FutureResultBase implements F...
      method FutureString (line 1551) | protected FutureString (Future<Response> pendingRequest) { super(pen...
      method get (line 1553) | public String get () throws InterruptedException, ExecutionException {
      method get (line 1558) | public String get (long timeout, TimeUnit unit)
    class FutureRedisType (line 1565) | public static class FutureRedisType extends FutureResultBase implement...
      method FutureRedisType (line 1567) | protected FutureRedisType (Future<Response> pendingRequest) { super(...
      method getRedisType (line 1569) | private final RedisType getRedisType(ValueResponse resp){
      method get (line 1573) | public RedisType get () throws InterruptedException, ExecutionExcept...
      method get (line 1578) | public RedisType get (long timeout, TimeUnit unit)
    class FutureLong (line 1585) | public static class FutureLong extends FutureResultBase implements Fut...
      method FutureLong (line 1587) | protected FutureLong (Future<Response> pendingRequest) { super(pendi...
      method get (line 1589) | @SuppressWarnings("boxing")
      method get (line 1595) | @SuppressWarnings("boxing")
    class FutureDouble (line 1603) | public static class FutureDouble extends FutureResultBase implements F...
      method FutureDouble (line 1605) | protected FutureDouble (Future<Response> pendingRequest) { super(pen...
      method get (line 1607) | @SuppressWarnings("boxing")
      method get (line 1615) | @SuppressWarnings("boxing")
    class FutureByteArray (line 1625) | public static class FutureByteArray extends FutureResultBase implement...
      method FutureByteArray (line 1627) | protected FutureByteArray (Future<Response> pendingRequest) { super(...
      method get (line 1629) | public byte[] get () throws InterruptedException, ExecutionException {
      method get (line 1634) | public byte[] get (long timeout, TimeUnit unit)
    class FutureSortStoreResp (line 1641) | public static class FutureSortStoreResp extends FutureResultBase imple...
      method FutureSortStoreResp (line 1643) | protected FutureSortStoreResp (Future<Response> pendingRequest) { su...
      method get (line 1645) | public List<byte[]> get () throws InterruptedException, ExecutionExc...
      method get (line 1650) | public List<byte[]> get (long timeout, TimeUnit unit)
      method packValueResult (line 1656) | private static List<byte[]> packValueResult(long number) {
    class FutureByteArrayList (line 1663) | public static class FutureByteArrayList extends FutureResultBase imple...
      method FutureByteArrayList (line 1665) | protected FutureByteArrayList (Future<Response> pendingRequest) { su...
      method get (line 1667) | public List<byte[]> get () throws InterruptedException, ExecutionExc...
      method get (line 1672) | public List<byte[]> get (long timeout, TimeUnit unit)
    class FutureDataDictionary (line 1680) | public static class FutureDataDictionary extends FutureResultBase impl...
      method FutureDataDictionary (line 1682) | protected FutureDataDictionary (Future<Response> pendingRequest) { s...
      method get (line 1684) | public Map<byte[], byte[]> get () throws InterruptedException, Execu...
      method get (line 1689) | public Map<byte[], byte[]> get (long timeout, TimeUnit unit)
      method convert (line 1695) | private static final Map<byte[], byte[]> convert (List<byte[]> bulkd...
    class FutureKeyList (line 1708) | public static class FutureKeyList extends FutureResultBase implements ...
      method FutureKeyList (line 1710) | protected FutureKeyList (Future<Response> pendingRequest) { super(pe...
      method get (line 1720) | public List<byte[]> get () throws InterruptedException, ExecutionExc...
      method get (line 1730) | public List<byte[]> get (long timeout, TimeUnit unit)
    class FutureInfo (line 1741) | public static class FutureInfo extends FutureResultBase implements Fut...
      method FutureInfo (line 1743) | protected FutureInfo (Future<Response> pendingRequest) { super(pendi...
      method getResultMap (line 1745) | private Map<String, String>  getResultMap (BulkResponse resp) {
      method get (line 1760) | public Map<String, String> get () throws InterruptedException, Execu...
      method get (line 1765) | public Map<String, String> get (long timeout, TimeUnit unit)
    class FutureObjectInfo (line 1772) | public static class FutureObjectInfo extends FutureResultBase implemen...
      method FutureObjectInfo (line 1774) | protected FutureObjectInfo (Future<Response> pendingRequest) { super...
      method getObjectInfo (line 1776) | private final ObjectInfo getObjectInfo(ValueResponse resp){
      method get (line 1780) | public ObjectInfo get () throws InterruptedException, ExecutionExcep...
      method get (line 1785) | public ObjectInfo get (long timeout, TimeUnit unit)
    class FutureZSetList (line 1792) | public static class FutureZSetList extends FutureResultBase implements...
      method FutureZSetList (line 1794) | protected FutureZSetList (Future<Response> pendingRequest) { super(p...
      method get (line 1796) | public List<ZSetEntry> get () throws InterruptedException, Execution...
      method get (line 1801) | public List<ZSetEntry> get (long timeout, TimeUnit unit)
      method convert (line 1807) | private static final List<ZSetEntry> convert (List<byte[]> mbulkdata) {
    method echo (line 1827) | public <K extends Object> Future<byte[]> echo (byte[] msg) {
    method echo (line 1835) | public <K extends Object> Future<byte[]> echo (String msg) {
    method echo (line 1838) | public <K extends Object> Future<byte[]> echo (Number msg) {
    method echo (line 1841) | public <K extends Object, T extends Serializable>

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/JRedisPipeline.java
  class JRedisPipeline (line 48) | public class JRedisPipeline extends JRedisFutureSupport {
    method JRedisPipeline (line 64) | public JRedisPipeline (ConnectionSpec connectionSpec) {
    method queueRequest (line 77) | protected  Future<Response> queueRequest (Command cmd, byte[]...args) ...
    method sync (line 91) | public JRedis sync () {
    method sync (line 122) | public JRedis sync (final long timeout, final TimeUnit unit) {

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/JRedisPipelineService.java
  class JRedisPipelineService (line 37) | public class JRedisPipelineService extends SyncJRedisBase {
    method JRedisPipelineService (line 64) | public JRedisPipelineService (String host, int port, String password, ...
    method JRedisPipelineService (line 72) | public JRedisPipelineService (ConnectionSpec connectionSpec) {
    method setConnection (line 84) | @Override
    method serviceRequest (line 92) | @Override
    method getInterface (line 100) | public JRedis getInterface () {

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/JRedisSupport.java
  class JRedisSupport (line 61) | public abstract class JRedisSupport implements JRedis {
    method serviceRequest (line 95) | protected abstract Response serviceRequest (Command cmd, byte[]...args...
    method setbit (line 118) | @Override
    method getbit (line 135) | @Override
    method bgsave (line 161) | @Override
    method bgrewriteaof (line 166) | @Override
    method ping (line 180) | @Override
    method flushall (line 186) | @Override
    method flushdb (line 191) | @Override
    method slaveof (line 202) | public <K extends Object> void slaveof(String host, int port) throws R...
    method slaveofnone (line 214) | public <K extends Object> void slaveofnone() throws RedisException{
    method rename (line 218) | @Override
    method renamenx (line 231) | @Override
    method rpoplpush (line 252) | @Override
    method rpush (line 274) | @Override
    method rpush (line 287) | @Override
    method rpush (line 292) | @Override
    method rpush (line 296) | @Override
    method sadd (line 302) | @Override
    method sadd (line 320) | @Override
    method sadd (line 324) | @Override
    method sadd (line 328) | @Override
    method zadd (line 334) | @Override
    method zadd (line 352) | @Override
    method zadd (line 356) | @Override
    method zadd (line 360) | @Override
    method zincrby (line 366) | @SuppressWarnings("boxing")
    method zincrby (line 386) | @Override
    method zincrby (line 390) | @Override
    method zincrby (line 394) | @Override
    method save (line 401) | @Override
    method set (line 410) | @Override
    method set (line 418) | @Override
    method set (line 422) | @Override
    method set (line 426) | @Override
    method getset (line 432) | @Override
    method getset (line 448) | @Override
    method getset (line 452) | @Override
    method getset (line 456) | @Override
    method setnx (line 463) | @Override
    method setnx (line 479) | @Override
    method setnx (line 483) | @Override
    method setnx (line 487) | @Override
    method append (line 493) | @Override
    method append (line 509) | @Override
    method append (line 513) | @Override
    method append (line 517) | @Override
    method msetnx (line 522) | private boolean msetnx(byte[][] mappings) throws RedisException {
    method msetnx (line 533) | @Override
    method msetnx (line 544) | @Override
    method msetnx (line 548) | @Override
    method msetnx (line 552) | @Override
    method msetnx (line 556) | @Override
    method sismember (line 562) | @Override
    method sismember (line 580) | @Override
    method sismember (line 585) | @Override
    method sismember (line 590) | @Override
    method smove (line 595) | public <K extends Object> boolean smove (K srcKey, K destKey, byte[] m...
    method smove (line 615) | public <K extends Object> boolean smove (K srcKey, K destKey, String s...
    method smove (line 618) | public <K extends Object> boolean smove (K srcKey, K destKey, Number n...
    method smove (line 621) | public <K extends Object, T extends Serializable>
    method hset (line 630) | public <K extends Object> boolean hset(K hashKey, K hashField, byte[] ...
    method hset (line 650) | public <K extends Object> boolean hset(K key, K field, String stringVa...
    method hset (line 653) | public <K extends Object> boolean hset(K key, K field, Number numberVa...
    method hset (line 656) | public <K extends Object, T extends Serializable>
    method hget (line 661) | public <K extends Object> byte[] hget(K hashKey, K hashField)  throws ...
    method hexists (line 681) | public <K extends Object> boolean hexists(K hashKey, K hashField)  thr...
    method hdel (line 700) | @Override
    method hlen (line 720) | @Override
    method hkeys (line 736) | @Redis(versions="1.3.n")
    method hvals (line 755) | @Redis(versions="1.3.n")
    method hgetall (line 773) | @Redis(versions="1.3.n")
    method incr (line 800) | @Override
    method incrby (line 818) | @Override
    method decr (line 836) | @Override
    method decrby (line 854) | @Override
    method llen (line 872) | @Override
    method scard (line 890) | @Override
    method zcard (line 906) | @Override
    method srandmember (line 922) | public <K extends Object> byte[] srandmember (K setkey) throws RedisEx...
    method spop (line 938) | public <K extends Object> byte[] spop (K setkey) throws RedisException {
    method dbsize (line 956) | @Override
    method lastsave (line 968) | @Override
    method get (line 983) | @Override
    method lindex (line 1000) | @Override
    method lpop (line 1016) | @Override
    method rpop (line 1033) | @Override
    method randomkey (line 1053) | @Override
    method type (line 1071) | @Override
    method debug (line 1090) | @Override
    method info (line 1111) | @Override
    method mset (line 1139) | private void mset(byte[][] mappings) throws RedisException {
    method mset (line 1142) | public <K extends Object> void mset(Map<K, byte[]> keyValueMap) throws...
    method mset (line 1152) | public <K extends Object> void mset(KeyValueSet.ByteArrays<K> keyValue...
    method mset (line 1155) | public <K extends Object> void mset(KeyValueSet.Strings<K> keyValueMap...
    method mset (line 1158) | public <K extends Object> void mset(KeyValueSet.Numbers<K> keyValueMap...
    method mset (line 1161) | public <K extends Object, T extends Serializable> void mset(KeyValueSe...
    method mget (line 1165) | @Override
    method smembers (line 1190) | @Override
    method keys (line 1206) | @Override
    method keys (line 1211) | @Override
    method lrange (line 1246) | @Override
    method substr (line 1266) | @Override
    method zrangebyscore (line 1286) | @Override
    method zrangebyscoreSubset (line 1306) | @Override
    method zremrangebyscore (line 1332) | @Override
    method zcount (line 1352) | @Override
    method zremrangebyrank (line 1372) | @Override
    method zrange (line 1392) | @Override
    method zrevrange (line 1412) | @Override
    method zrangeSubset (line 1431) | @Override
    method zrevrangeSubset (line 1457) | @Override
    method sort (line 1484) | @Override
    method quit (line 1537) | @Override
    method sinter (line 1559) | @Override
    method sunion (line 1584) | @Override
    method sdiff (line 1609) | @Override
    method sinterstore (line 1634) | @Override
    method sunionstore (line 1653) | @Override
    method sdiffstore (line 1672) | @Override
    method del (line 1691) | @Override
    method exists (line 1717) | @Override
    method lpush (line 1735) | @Override
    method lpush (line 1747) | @Override
    method lpush (line 1751) | @Override
    method lpush (line 1755) | @Override
    method lrem (line 1763) | @Override
    method lrem (line 1781) | @Override
    method lrem (line 1785) | @Override
    method lrem (line 1789) | @Override
    method lset (line 1796) | @Override
    method lset (line 1805) | @Override
    method lset (line 1809) | @Override
    method lset (line 1813) | @Override
    method move (line 1818) | @Override
    method srem (line 1838) | @Override
    method srem (line 1854) | @Override
    method srem (line 1858) | @Override
    method srem (line 1862) | @Override
    method zrem (line 1868) | @Override
    method zrem (line 1884) | @Override
    method zrem (line 1888) | @Override
    method zrem (line 1892) | @Override
    method zscore (line 1898) | @SuppressWarnings("boxing")
    method zscore (line 1916) | @Override
    method zscore (line 1920) | @Override
    method zscore (line 1924) | @Override
    method zrank (line 1930) | @Override
    method zrank (line 1946) | @Override
    method zrank (line 1950) | @Override
    method zrank (line 1954) | @Override
    method zrevrank (line 1960) | @Override
    method zrevrank (line 1976) | @Override
    method zrevrank (line 1980) | @Override
    method zrevrank (line 1984) | @Override
    method ltrim (line 1991) | @Override
    method expire (line 2002) | @Override
    method expireat (line 2021) | @Override
    method ttl (line 2041) | @Override
    method echo (line 2058) | @Override
    method echo (line 2073) | @Override
    method echo (line 2077) | @Override
    method echo (line 2081) | @Override
    method multi (line 2096) | @Version(major=2, minor=0, release=Release.ALPHA)
    method discard (line 2106) | @Version(major=2, minor=0, release=Release.ALPHA)
    method getKeyBytes (line 2124) | public static <K extends Object> byte[] getKeyBytes(K key) throws Ille...

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/Pair.java
  class Pair (line 28) | class Pair<T1, T2> {
    method Pair (line 31) | public Pair(T1 t1, T2 t2){

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/SyncJRedisBase.java
  class SyncJRedisBase (line 41) | public abstract class SyncJRedisBase extends JRedisSupport implements Re...
    method setConnection (line 61) | protected abstract void setConnection (Connection connection) ;
    method createSyncConnection (line 71) | protected Connection createSyncConnection(ConnectionSpec connSpec){
    method getContext (line 101) | @Override
    method setContext (line 106) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/ZSetEntryImpl.java
  class ZSetEntryImpl (line 31) | class ZSetEntryImpl extends Pair<byte[], byte[]> implements ZSetEntry {
    method ZSetEntryImpl (line 33) | public ZSetEntryImpl (byte[] valueBytes, byte[] scoreBytes) {
    method getScore (line 37) | public double getScore () { return DefaultCodec.toDouble(t2); }
    method getValue (line 40) | public byte[] getValue () { return t1;}

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/_specification.java
  type _specification (line 28) | public interface _specification {
    type Version (line 31) | public interface Version {

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/connection/AsyncConnection.java
  class AsyncConnection (line 49) | public class AsyncConnection extends ConnectionBase implements Connection {
    method getPendingQueue (line 61) | BlockingQueue<PendingRequest> getPendingQueue() { return pendingQueue; }
    method AsyncConnection (line 66) | public AsyncConnection (
    method initializeComponents (line 81) | protected void initializeComponents () {
    method newProtocolHandler (line 96) | @Override
    method newInputStream (line 104) | @SuppressWarnings("boxing")
    method getModality (line 124) | public final Modality getModality() {
    method queueRequest (line 131) | @Override
    class RequestProcessor (line 146) | public final class RequestProcessor implements Runnable {
      method run (line 160) | public void run () {

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/connection/AsyncPipelineConnection.java
  class AsyncPipelineConnection (line 30) | public class AsyncPipelineConnection extends PipelineConnectionBase{
    method AsyncPipelineConnection (line 42) | public AsyncPipelineConnection (ConnectionSpec spec) throws ClientRunt...

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/connection/ChunkedPipelineConnection.java
  class ChunkedPipelineConnection (line 85) | public class ChunkedPipelineConnection
    method ChunkedPipelineConnection (line 149) | public ChunkedPipelineConnection (ConnectionSpec spec) throws ClientRu...
    method initializeComponents (line 159) | @SuppressWarnings("boxing")
    method notifyConnected (line 189) | @Override
    method notifyDisconnected (line 196) | @Override
    method newProtocolHandler (line 209) | @Override
    method newInputStream (line 223) | @SuppressWarnings("boxing")
    method queueRequest (line 252) | @Override
    method onResponseHandlerError (line 374) | void onResponseHandlerError (ClientRuntimeException cre, PendingReques...
    class Concurrent2LockQueue (line 423) | final static class Concurrent2LockQueue<E> implements BlockingQueue<E>{
      class Node (line 428) | private static final class Node<E> {
        method Node (line 446) | private Node(E x, Node<E> n) { item = x; next = n; }
        method getItem (line 448) | private final E getItem() { return item; }
        method setItem (line 449) | private final void setItem(E update) { itemUpdater.set(this, updat...
        method setNext (line 450) | private final void setNext(Node<E> update) { nextUpdater.set(this,...
        method getNext (line 451) | private final Node<E> getNext() { return next; }
      method Concurrent2LockQueue (line 460) | public Concurrent2LockQueue () {}
      method offer (line 467) | public final boolean offer(E item) {
      method poll (line 479) | @Override final
      method poll (line 485) | public final E poll () {
      method peek (line 501) | @Override final
      method take (line 515) | @Override final
      method remove (line 532) | @Override final
      method add (line 541) | @Override final
      method element (line 548) | @Override final
      method addAll (line 552) | @Override final
      method clear (line 556) | @Override final
      method contains (line 560) | @Override final
      method containsAll (line 564) | @Override final
      method isEmpty (line 568) | @Override final public boolean isEmpty() {
      method iterator (line 571) | @Override final
      method remove (line 575) | @Override final
      method removeAll (line 579) | @Override final
      method retainAll (line 583) | @Override final
      method size (line 587) | @Override final
      method toArray (line 591) | @Override final
      method toArray (line 595) | @Override final
      method drainTo (line 599) | @Override final
      method drainTo (line 603) | @Override final
      method offer (line 607) | @Override final
      method put (line 611) | @Override final
      method remainingCapacity (line 615) | @Override final
    class ProtocolHelper (line 633) | final static class ProtocolHelper {
      class Buffer (line 635) | static class Buffer {
        method Buffer (line 638) | Buffer(int size){
        method Buffer (line 641) | Buffer(byte[] b, int off){
        method write (line 645) | void write (byte[] d){
        method write (line 650) | void write (byte d){
        method getBytes (line 654) | byte[] getBytes() {
      method calcReqBuffSize (line 658) | public static int calcReqBuffSize (Command cmd, byte[] ... args) thr...
      method writeRequestToBuffer (line 670) | static public byte[] writeRequestToBuffer(final Buffer buffer, final...
    class PendingCPRequest (line 747) | final static class PendingCPRequest extends PendingRequest {
      method PendingCPRequest (line 751) | PendingCPRequest(ChunkedPipelineConnection pipeline, Command cmd) {
      method get (line 755) | @Override final
      method get (line 761) | @Override final
      method requestFlush (line 768) | final private void requestFlush() {
    class ResponseHandler (line 793) | public final class ResponseHandler implements Runnable, Connection.Lis...
      method ResponseHandler (line 808) | public ResponseHandler () {
      method run (line 832) | @Override
      method stopHandler (line 901) | final private void stopHandler() {
      method shutdownHandler (line 908) | final private void shutdownHandler() {
      method onEvent (line 933) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/connection/ConnectionBase.java
  class ConnectionBase (line 66) | public abstract class ConnectionBase implements Connection{
    method ConnectionBase (line 108) | protected ConnectionBase (ConnectionSpec spec)
    method getSpec (line 137) | @Override
    method serviceRequest (line 142) | @Override
    method queueRequest (line 151) | @Override
    method addListener (line 168) | final public boolean addListener(Listener connListener){
    method removeListener (line 177) | final public boolean removeListener(Listener connListener){
    method initializeComponents (line 197) | protected void initializeComponents () {
    method notifyConnected (line 211) | protected void notifyConnected () {
    method notifyDisconnected (line 219) | protected void notifyDisconnected () {
    method notifyFaulted (line 223) | protected void notifyFaulted (String info) {
    method notifyShuttingDown (line 226) | protected void notifyShuttingDown () {
    method newProtocolHandler (line 233) | protected Protocol newProtocolHandler () {
    method newInputStream (line 247) | @SuppressWarnings("boxing")
    method newOutputStream (line 257) | protected OutputStream newOutputStream(OutputStream socketOutputStream...
    method notifyListeners (line 262) | final protected void notifyListeners(Connection.Event e) {
    method isConnected (line 271) | protected final boolean isConnected () { return isConnected; }
    method reconnect (line 278) | protected final void reconnect () {
    method onConnectionFault (line 304) | protected final void onConnectionFault (String fault, boolean raiseEx)...
    method connect (line 317) | protected final void connect () throws IllegalStateException, ClientRu...
    method disconnect (line 360) | protected final void disconnect () throws IllegalStateException {
    method shutdown (line 373) | protected final void shutdown () throws IllegalStateException {
    method newSocketConnect (line 394) | @SuppressWarnings("boxing")
    method socketClose (line 425) | private final void socketClose () {
    method initializeSocketStreams (line 443) | protected final void initializeSocketStreams() throws IllegalArgumentE...
    method initializeOnConnect (line 455) | protected final void initializeOnConnect () throws ProviderException, ...
    method initializeSyncConnection (line 473) | protected final void initializeSyncConnection () throws ProviderExcept...
    method initializeAsyncConnection (line 486) | protected final void initializeAsyncConnection () throws ProviderExcep...
    method toString (line 513) | @SuppressWarnings("boxing")
    method getProtocolHandler (line 531) | final protected Protocol getProtocolHandler() {
    method getOutputStream (line 540) | final protected OutputStream getOutputStream() {
    method getInputStream (line 544) | final protected InputStream getInputStream() {

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/connection/DefaultConnectionFactory.java
  class DefaultConnectionFactory (line 36) | public class DefaultConnectionFactory implements Connection.Factory {
    method newConnection (line 39) | public Connection newConnection (ConnectionSpec spec)
    method newAsyncConnection (line 71) | private Connection newAsyncConnection (ConnectionSpec spec) {

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/connection/DefaultConnectionSpec.java
  class DefaultConnectionSpec (line 45) | final public class DefaultConnectionSpec extends ConnectionSpec.RefImpl {
    method DefaultConnectionSpec (line 97) | public DefaultConnectionSpec () throws ClientRuntimeException {
    method DefaultConnectionSpec (line 107) | @Deprecated
    method DefaultConnectionSpec (line 119) | @Deprecated
    method setDefaultValues (line 139) | private void setDefaultValues () {
    method newSpec (line 174) | public static final ConnectionSpec newSpec ()
    method newSpec (line 191) | public static final ConnectionSpec newSpec (
    method newSpec (line 220) | public static final ConnectionSpec newSpec (

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/connection/HeartbeatJinn.java
  class HeartbeatJinn (line 47) | public class HeartbeatJinn extends Thread implements Connection.Listener{
    method HeartbeatJinn (line 71) | public HeartbeatJinn (Connection conn, int periodInSecs, String name) {
    method shutdown (line 85) | public void shutdown() {
    method run (line 105) | public void run () {
    method onEvent (line 174) | public void onEvent (Event event) {

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/connection/PendingRequest.java
  class PendingRequest (line 42) | public class PendingRequest implements Future<Response> {
    method PendingRequest (line 67) | public PendingRequest(Command cmd){
    method PendingRequest (line 72) | public PendingRequest(Command cmd, byte[]... args){
    method getCommand (line 80) | final Command getCommand () {
    method setResponse (line 92) | final void setResponse(Response response){
    method setCRE (line 101) | final void setCRE (ClientRuntimeException cre){
    method checkStatus (line 114) | private final void checkStatus () throws ExecutionException
    method get (line 138) | @Override
    method get (line 147) | @Override
    method cancel (line 162) | @Override
    method isCancelled (line 170) | @Override
    method isDone (line 175) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/connection/PipelineConnectionBase.java
  class PipelineConnectionBase (line 60) | public abstract class PipelineConnectionBase extends ConnectionBase {
    method PipelineConnectionBase (line 96) | protected PipelineConnectionBase (ConnectionSpec spec) throws ClientRu...
    method initializeComponents (line 105) | @SuppressWarnings("boxing")
    method notifyConnected (line 127) | @Override
    method notifyDisconnected (line 134) | @Override
    method newProtocolHandler (line 147) | @Override
    method newInputStream (line 162) | @SuppressWarnings("boxing")
    method queueRequest (line 187) | @Override
    method onResponseHandlerError (line 221) | void onResponseHandlerError (ClientRuntimeException cre, PendingReques...
    class ResponseHandler (line 263) | public final class ResponseHandler implements Runnable, Connection.Lis...
      method ResponseHandler (line 276) | public ResponseHandler () {
      method run (line 302) | @Override
      method stopHandler (line 367) | final private void stopHandler() {
      method shutdownHandler (line 373) | final private void shutdownHandler() {
      method onEvent (line 400) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/connection/SyncConnection.java
  class SyncConnection (line 45) | public class SyncConnection extends ConnectionBase implements Connection {
    method SyncConnection (line 72) | public SyncConnection (
    method getModality (line 98) | public final Modality getModality() {
    method serviceRequest (line 105) | @Override
    method acquireLock (line 165) | @SuppressWarnings("unused")
    method releaseLock (line 170) | @SuppressWarnings("unused")

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/connection/SyncPipelineConnection.java
  class SyncPipelineConnection (line 39) | public class SyncPipelineConnection extends PipelineConnectionBase {
    method SyncPipelineConnection (line 51) | public SyncPipelineConnection (ConnectionSpec spec) throws ClientRunti...
    method serviceRequest (line 62) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/connection/UnexpectedEOFException.java
  class UnexpectedEOFException (line 32) | public class UnexpectedEOFException extends ConnectionException {
    method UnexpectedEOFException (line 37) | public UnexpectedEOFException(String msg) {

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/protocol/ConcurrentSyncProtocol.java
  class ConcurrentSyncProtocol (line 31) | public class ConcurrentSyncProtocol extends SyncProtocol {
    method createStatusResponse (line 50) | @Override
    method createBooleanResponse (line 55) | @Override
    method createStringResponse (line 59) | @Override
    method createNumberResponse (line 64) | @Override
    method createBulkResponse (line 70) | @Override
    method createMultiBulkResponse (line 75) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/protocol/DefaultProtocolFactory.java
  class DefaultProtocolFactory (line 32) | public class DefaultProtocolFactory implements Protocol.Factory {
    method newProtocol (line 35) | public Protocol newProtocol (ConnectionSpec connSpec) throws NotSuppor...

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/protocol/ProtocolBase.java
  class ProtocolBase (line 46) | public abstract class ProtocolBase implements Protocol {
    method ProtocolBase (line 66) | protected ProtocolBase () {}
    method isCompatibleWithVersion (line 73) | @Override
    method createRequestBuffer (line 78) | public byte[] createRequestBuffer(Command cmd, byte[]...args) throws P...
    method createRequest (line 173) | @Override
    method createResponse (line 248) | @Override
    method createRequestBufffer (line 292) | protected abstract ByteArrayOutputStream createRequestBufffer(Command ...
    method createRequest (line 293) | protected abstract Request createRequest (ByteArrayOutputStream buffer);
    method createMultiBulkResponse (line 294) | protected abstract Response createMultiBulkResponse(Command cmd) ;
    method createBulkResponse (line 295) | protected abstract Response createBulkResponse(Command cmd) ;
    method createNumberResponse (line 296) | protected abstract Response createNumberResponse(Command cmd /*, boole...
    method createBooleanResponse (line 297) | protected abstract Response createBooleanResponse(Command cmd) ;
    method createStringResponse (line 298) | protected abstract Response createStringResponse(Command cmd) ;
    method createStatusResponse (line 299) | protected abstract Response createStatusResponse(Command cmd);
    class StreamBufferRequest (line 321) | public static class StreamBufferRequest implements Request {
      method StreamBufferRequest (line 328) | public StreamBufferRequest (ByteArrayOutputStream	buffer) {
      method reset (line 331) | public void reset (ByteArrayOutputStream	buffer) {
      method read (line 337) | @Override
      method write (line 347) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/protocol/ResponseSupport.java
  class ResponseSupport (line 18) | public abstract class ResponseSupport implements Response {
    method ResponseSupport (line 32) | public ResponseSupport (Command cmd, Type type) {
    method didRead (line 40) | protected final boolean didRead (boolean value) { return didRead = val...
    method assertResponseRead (line 43) | protected final void assertResponseRead () {
    method didRead (line 51) | @Override
    method getStatus (line 54) | @Override
    method getType (line 57) | @Override
    method isError (line 60) | @Override
    method write (line 66) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/protocol/SyncProtocol.java
  class SyncProtocol (line 51) | public class SyncProtocol extends ProtocolBase {
    method SyncProtocol (line 83) | public SyncProtocol() {
    method createRequestBufffer (line 100) | @Override
    method createRequest (line 106) | protected Request createRequest (ByteArrayOutputStream buffer) {
    method createStatusResponse (line 112) | @Override
    method createBooleanResponse (line 121) | @Override
    method createStringResponse (line 130) | @Override
    method createNumberResponse (line 139) | @Override
    method createBulkResponse (line 151) | @Override
    method createMultiBulkResponse (line 163) | @Override
    type ValueType (line 177) | protected enum ValueType {
    class SyncResponseBase (line 200) | public abstract class SyncResponseBase extends ResponseSupport {
      method SyncResponseBase (line 205) | protected SyncResponseBase(byte[] buffer, Command cmd, Type type) {
      method reset (line 211) | protected void reset (Command cmd, Type type) {
      method readSingleLineResponse (line 224) | void readSingleLineResponse (InputStream in) {
    class SyncLineResponse (line 272) | public class SyncLineResponse extends SyncResponseBase implements Stat...
      method SyncLineResponse (line 278) | private SyncLineResponse(Command cmd, ValueType flavor) {
      method SyncLineResponse (line 286) | public  SyncLineResponse(byte[] buff, Command cmd, ValueType flavor) {
      method reset (line 290) | protected void reset (Command cmd){
      method reset (line 294) | protected void reset (Command cmd, ValueType flavor){
      method getBooleanValue (line 299) | @Override
      method getLongValue (line 305) | @Override
      method getStringValue (line 310) | @Override
      method read (line 320) | @Override
    class SyncMultiLineResponseBase (line 361) | public abstract class SyncMultiLineResponseBase extends SyncResponseBa...
      method SyncMultiLineResponseBase (line 363) | protected SyncMultiLineResponseBase (byte[] buffer, Command cmd, Typ...
      method seekToCRLF (line 370) | void seekToCRLF (InputStream in){
      method readControlLine (line 402) | int readControlLine (InputStream in, boolean checkForError, byte ctl...
      method readBulkData (line 426) | public final byte[] readBulkData (InputStream in, int length)
    class SyncBulkResponse (line 456) | public class SyncBulkResponse extends SyncMultiLineResponseBase implem...
      method SyncBulkResponse (line 464) | private SyncBulkResponse(Command cmd) {
      method SyncBulkResponse (line 468) | public SyncBulkResponse(byte[] buff, Command cmd) {
      method reset (line 472) | protected void reset (Command cmd){
      method getBulkData (line 477) | @Override
      method read (line 483) | @Override
    class SyncMultiBulkResponse (line 512) | public class SyncMultiBulkResponse extends SyncMultiLineResponseBase i...
      method SyncMultiBulkResponse (line 520) | private SyncMultiBulkResponse(Command cmd) {
      method SyncMultiBulkResponse (line 524) | public SyncMultiBulkResponse(byte[] buff, Command cmd) {
      method reset (line 528) | protected void reset (Command cmd){
      method getMultiBulkData (line 533) | @Override
      method read (line 539) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/protocol/VirtualResponse.java
  class VirtualResponse (line 42) | public final class VirtualResponse implements Response {
    method VirtualResponse (line 46) | public VirtualResponse () {
    method VirtualResponse (line 49) | public VirtualResponse (ResponseStatus status) {
    method didRead (line 53) | @Override
    method getStatus (line 56) | @Override
    method getType (line 59) | @Override
    method isError (line 62) | @Override
    method read (line 65) | @Override
    method write (line 76) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/semantics/DefaultKeyCodec.java
  class DefaultKeyCodec (line 38) | public class DefaultKeyCodec<K extends Object> implements KeyCodec<K> {
    method provider (line 46) | public static final KeyCodec<Object> provider() { return instance; }
    method decode (line 54) | public K decode (byte[] bytes) { throw new NotSupportedException("key ...
    method encode (line 59) | public byte[] encode (K key) {
    method encodeString (line 74) | public static byte[] encodeString(String key) throws IllegalArgumentEx...
    method supports (line 103) | public boolean supports (Class<?> type) {

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/semantics/DefaultStringCodec.java
  class DefaultStringCodec (line 16) | public class DefaultStringCodec implements Codec<String> {
    method DefaultStringCodec (line 25) | public DefaultStringCodec() {
    method DefaultStringCodec (line 31) | public DefaultStringCodec(Charset charset){
    method decode (line 38) | @Override
    method encode (line 47) | @Override
    method supports (line 56) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/semantics/GZipCompressedStringCodec.java
  class GZipCompressedStringCodec (line 13) | public class GZipCompressedStringCodec extends DefaultStringCodec {
    method decode (line 18) | @Override
    method encode (line 26) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/support/Assert.java
  class Assert (line 30) | public class Assert {
    method isEquivalent (line 39) | public static final <E extends RuntimeException>
    method isEquivalent (line 50) | public static final <E extends RuntimeException>
    method notNull (line 76) | public static final <T, E extends RuntimeException>
    method notNull (line 99) | public static final <T, E extends RuntimeException>
    method notNull (line 108) | @SuppressWarnings("boxing")
    method isTrue (line 130) | public static final <E extends RuntimeException>
    method isTrue (line 149) | public static final <E extends RuntimeException>
    method inRange (line 167) | public static final <E extends RuntimeException>
    method inRange (line 186) | public static final <E extends RuntimeException>
    method cast (line 208) | public static final <T, E extends RuntimeException>
    method throwIt (line 238) | private static final <E extends RuntimeException>

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/support/Convert.java
  class Convert (line 29) | public class Convert {
    method toBytes (line 67) | public static final byte[] toBytes(int i){
    method toBytes (line 91) | public static final byte[] toBytes(long lnum){
    method toBytes (line 98) | public static final byte[] toBytes(double dnum){
    method toInt (line 112) | public static final int toInt(final byte[] potentiallySignedAsciiBytes...
    method toLong (line 151) | public static final long toLong(byte[] potentiallySignedAsciiBytes, fi...
    method toInt (line 185) | public static final int toInt(byte[] potentiallySignedBytes) throws Il...
    method toLong (line 196) | public static final long toLong(byte[] potentiallySignedBytes) throws ...
    method toDouble (line 208) | public static final double toDouble (byte[] stringRepOfDoublePrecision...
    method getNegativeNumberBytes (line 228) | private static final byte[] getNegativeNumberBytes(byte[] unsigned){

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/support/DefaultCodec.java
  class DefaultCodec (line 45) | public class DefaultCodec {
    class Keys (line 46) | public static class Keys<K extends Object> implements KeyCodec<K>{
      type SupportedType (line 47) | public enum SupportedType {
      method decode (line 53) | @Override
      method encode (line 59) | @Override
      method supports (line 65) | @Override
    method toStr (line 83) | public static final List<String> toStr (List<byte[]> bytearray) {
    method toDataDictionary (line 93) | public static final Map<String, byte[]> toDataDictionary (Map<byte[], ...
    method toStr (line 105) | public static final String toStr (byte[] bytes) {
    method encode (line 119) | public static final byte[] encode(String value) {
    method toLong (line 149) | @SuppressWarnings("boxing")
    method toLong (line 155) | @SuppressWarnings("boxing")
    method toDouble (line 167) | public static double toDouble (byte[] bs) {
    method toDouble (line 170) | @SuppressWarnings("boxing")
    method decode (line 196) | @SuppressWarnings("unchecked")
    method decode (line 233) | @SuppressWarnings("unchecked")
    method encode (line 274) | public static final <T extends Serializable>  byte[]  encode(T obj) {

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/support/FastBufferedInputStream.java
  class FastBufferedInputStream (line 17) | public final class FastBufferedInputStream extends java.io.InputStream {
    method FastBufferedInputStream (line 47) | public FastBufferedInputStream (InputStream in, int bufferSize) {
    method getMoreBytes (line 67) | @SuppressWarnings("boxing")
    method read (line 117) | @Override
    method available (line 146) | @Override
    method markSupported (line 155) | @Override
    method read (line 161) | @Override
    method read (line 167) | @Override

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/support/GZip.java
  class GZip (line 33) | public class GZip {
    method compress (line 38) | public static final byte[] compress(byte[] data){
    method decompress (line 55) | public static final byte[] decompress(byte[] data){

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/support/Log.java
  class Log (line 31) | public class Log {
    type Category (line 41) | public enum Category { INFO, DEBUG, ERROR, PROBLEM, BUG }
    method log (line 44) | public static final void log (String msg)   { log (msg, (Object[])null...
    method log (line 45) | public static final void log (String format, Object...args)   {
    method debug (line 48) | public static final void debug (String msg) { debug(msg, (Object[])nul...
    method debug (line 49) | public static final void debug (String format, Object...args) {
    method error (line 54) | public static final void error (String msg)   { _error (Category.ERROR...
    method error (line 55) | public static final void error (String msg, Throwable t)   { logger.lo...
    method error (line 56) | public static final void error (String msg, Object...args) { _error (C...
    method problem (line 58) | public static final void problem (String msg) { _error (Category.PROBL...
    method problem (line 59) | public static final void problem (String msg, Object...args) { _error ...
    method bug (line 61) | public static final void bug (String msg)     { _error (Category.BUG, ...
    method bug (line 62) | public static final void bug (String msg, Object...args) { _error (Cat...
    method _error (line 64) | private static final void _error (final Category cat, final String msg...
    class Handler (line 79) | public static class Handler extends java.util.logging.Handler {
      method trySetFormatter (line 86) | final void trySetFormatter(Formatter fmt){
      method publish (line 96) | @Override final
      method flush (line 101) | @Override final
      method close (line 105) | @Override final
    class Formatter (line 114) | public static class Formatter extends java.util.logging.Formatter {
      method format (line 116) | @SuppressWarnings("boxing")

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/support/Signal.java
  class Signal (line 32) | public class Signal {
    method await (line 56) | public boolean await (long time, TimeUnit unit) throws InterruptedExce...
    method await (line 79) | public void await () throws InterruptedException {
    method signal (line 91) | public void signal () {
    method isSignalled (line 104) | public boolean isSignalled() {

FILE: core/ri/src/main/java/org/jredis/ri/alphazero/support/SortSupport.java
  class SortSupport (line 30) | public abstract class SortSupport implements Sort {
    method SortSupport (line 35) | protected SortSupport (byte[] validatedKeyBytes){
    method ALPHA (line 59) | public Sort ALPHA() {
    method DESC (line 65) | public Sort DESC() {
    method BY (line 72) | public <K extends Object> Sort BY(K pattern) {
    method GET (line 80) | public <K extends Object> Sort GET(K pattern) {
    method LIMIT (line 88) | public Sort LIMIT(long from, long count) {
    method STORE (line 109) | public <K extends Object> Sort STORE (K destKey) {
    method buildSortCmd (line 121) | private final byte[][] buildSortCmd() {
    method exec (line 140) | public List<byte[]> exec() throws IllegalStateException, RedisException {
    method execAsync (line 149) | public Future<List<byte[]>> execAsync() {
    method execSort (line 158) | protected abstract List<byte[]> execSort (byte[]... fullSortCmd) throw...
    method execSortStore (line 159) | protected abstract List<byte[]> execSortStore (byte[]... fullSortCmd) ...
    method execAsyncSort (line 160) | protected abstract Future<List<byte[]>> execAsyncSort (byte[]... fullS...
    method execAsyncSortStore (line 161) | protected abstract Future<List<byte[]>> execAsyncSortStore (byte[]... ...

FILE: core/ri/src/test/java/org/jredis/ri/JRedisTestSuiteBase.java
  class JRedisTestSuiteBase (line 51) | public abstract class JRedisTestSuiteBase<T> extends ProviderTestBase<T>{
    method suiteParametersInit (line 134) | @Parameters({
    method setupTestSuiteData (line 198) | @SuppressWarnings("boxing")
    method prepTestDBs (line 230) | protected final void prepTestDBs() {
    method getRandomAsciiString (line 257) | protected String getRandomAsciiString (int length) {
    method getRandomBytes (line 270) | protected byte[] getRandomBytes(int size) {
    method assertDidRaiseRuntimeError (line 277) | protected final <FAULT extends RuntimeException> void assertDidRaiseRu...
    class TestBean (line 302) | public static class TestBean implements Serializable {
      method getCreated_on (line 305) | public final long getCreated_on() {return named_on;}
      method setCreated_on (line 306) | public final void setCreated_on(long created_on) {this.named_on = cr...
      method getName (line 307) | public final String getName() {return name;}
      method setName (line 308) | public final void setName(String name) {this.name = name;}
      method getData (line 309) | public final byte[] getData() { return data;}
      method setData (line 310) | public final void setData(byte[] data) { this.data = data;}
      method TestBean (line 314) | public TestBean() {
      method TestBean (line 317) | public TestBean(String string) {
      method toString (line 321) | @Override public String toString() { return "[" + getClass().getSimp...
      method equals (line 322) | @Override public boolean equals (Object o) {
      method hashCode (line 330) | @Override public int hashCode() {

FILE: core/ri/src/test/java/org/jredis/ri/ProviderTestBase.java
  class ProviderTestBase (line 33) | public abstract class ProviderTestBase <T> {
    method setProvider (line 48) | @BeforeTest
    method newProviderInstance (line 66) | protected abstract T newProviderInstance () ;
    method setProviderInstance (line 72) | private final void setProviderInstance (T provider) {
    method getProviderInstance (line 83) | protected final T getProviderInstance() {

FILE: core/ri/src/test/java/org/jredis/ri/adhoc/AdHocTestChunkPipeline.java
  class AdHocTestChunkPipeline (line 16) | @SuppressWarnings("unused")
    method main (line 19) | public static void main(String[] args) throws Throwable {
    method AdHocTestChunkPipeline (line 35) | public AdHocTestChunkPipeline() {
    method stop (line 44) | private void stop() {
    method run (line 47) | private void run() {
    method worker (line 67) | private Thread worker (final JRedisFuture jredis, String tname) {
    method task (line 73) | private Runnable task (final JRedisFuture jredis) {

FILE: core/ri/src/test/java/org/jredis/ri/adhoc/AdHocTestInfo.java
  class AdHocTestInfo (line 16) | public class AdHocTestInfo {
    method main (line 17) | public static void main(String[] args) throws Throwable {
    method AdHocTestInfo (line 29) | public AdHocTestInfo(final Connection.Modality connmode) throws Throwa...
    method run (line 45) | final public void run() {
    method runsync (line 61) | final public void runsync() {
    method runasync (line 76) | public void runasync() {

FILE: core/ri/src/test/java/org/jredis/ri/adhoc/AdHocTestNoConnection.java
  class AdHocTestNoConnection (line 11) | public class AdHocTestNoConnection {
    method main (line 13) | public static void main(String[] args) throws Throwable {
    method AdHocTestNoConnection (line 22) | public AdHocTestNoConnection() throws Throwable{
    method run (line 27) | public void run() {

FILE: core/ri/src/test/java/org/jredis/ri/alphazero/ConcurrentJRedisProviderTestsBase.java
  class ConcurrentJRedisProviderTestsBase (line 37) | public abstract class ConcurrentJRedisProviderTestsBase extends JRedisPr...
    method testConcurrentBulkCommands (line 48) | @Test(invocationCount=20, threadPoolSize=5, singleThreaded=false)
    method testConcurrentBooleanCommands (line 68) | @Test(invocationCount=20, threadPoolSize=5, singleThreaded=false)
    method testConcurrentNumberCommands (line 86) | @Test(invocationCount=20, threadPoolSize=5, singleThreaded=false)

FILE: core/ri/src/test/java/org/jredis/ri/alphazero/JRedisAsyncClientTest.java
  class JRedisAsyncClientTest (line 36) | @Test(sequential = true, suiteName="JRedisAsyncClient-tests")
    method newProviderInstance (line 46) | @Override
    method testQuit (line 76) | @AfterTest

FILE: core/ri/src/test/java/org/jredis/ri/alphazero/JRedisChunkedPipelineClientTest.java
  class JRedisChunkedPipelineClientTest (line 36) | @Test(singleThreaded = false, suiteName="JRedisChunkedPipeline-tests", i...
    method newProviderInstance (line 46) | @Override
    method testQuit (line 76) | @AfterTest()

FILE: core/ri/src/test/java/org/jredis/ri/alphazero/JRedisClientTest.java
  class JRedisClientTest (line 38) | @Test(singleThreaded = true, suiteName="JRedisClient-tests")
    method newProviderInstance (line 48) | protected JRedis newProviderInstance () {
    method testQuit (line 74) | @AfterTest

FILE: core/ri/src/test/java/org/jredis/ri/alphazero/JRedisFutureProviderTestsBase.java
  class JRedisFutureProviderTestsBase (line 58) | public abstract class JRedisFutureProviderTestsBase extends JRedisTestSu...
    method testSrandmember (line 100) | @Test
    method testSmoveStringByteArray (line 158) | @Test
    method testScard (line 197) | @Test
    method testZcard (line 229) | @Test
    method testSismemberStringByteArray (line 261) | @Test
    method testSmembers (line 295) | @Test
    method testZremStringByteArray (line 339) | @Test
    method testZaddStringByteArray (line 371) | @Test
    method testZscoreAndZincrbyStringByteArray (line 403) | @Test
    method testZrangebyscoreStringByteArray (line 451) | @Test
    method testZremrangebyscoreStringByteArray (line 483) | @Test
    method testZcountStringByteArray (line 512) | @Test
    method testZremrangebyrankStringByteArray (line 541) | @Test
    method testZrankStringByteArray (line 570) | @Test
    method testZrevrankStringByteArray (line 609) | @Test
    method testZrangeWithscoresStringByteArray (line 646) | @Test
    method testZrevrangeWithscoresStringByteArray (line 683) | @Test
    method testSaddStringByteArray (line 720) | @Test
    method testSort (line 753) | @Test
    method testLsetStringIntByteArray (line 836) | @Test
    method testLremStringByteArrayInt (line 897) | @Test
    method testLrange (line 949) | @Test
    method testSubstr (line 984) | @Test
    method testRpop (line 1021) | @Test
    method testLpop (line 1056) | @Test
    method testLindex (line 1090) | @Test
    method testLtrim (line 1114) | @Test
    method testLpushStringByteArray (line 1161) | @Test
    method testLpoppushStringByteArray (line 1201) | @Test
    method testRpushStringByteArray (line 1240) | @Test
    method testMget (line 1281) | @Test
    method testDel (line 1360) | @Test
    method testIncrAndDecr (line 1442) | @Test
    method testIncrbyAndDecrby (line 1472) | @Test
    method testGetSetStringByteArray (line 1502) | @Test
    method testHsetHget (line 1526) | @Test
    method testHIncrBy (line 1587) | @Test
    method testHkeys (line 1614) | @Test
    method testSetBitGetBit (line 1662) | @Test
    method testHvals (line 1691) | @Test
    method testHgetall (line 1742) | @Test
    method testSetStringByteArray (line 1810) | @Test
    method testAppendStringString (line 1838) | @Test
    method testRename (line 1901) | @Test
    method testRenamenx (line 1938) | @Test
    method testSetAndFlushdbAndExistsAndKeys (line 1979) | @Test
    method testElicitErrors (line 2023) | @Test
    method testExecutionExceptionCauseType (line 2088) | @Test
    method testPing (line 2121) | @Test
    method testFlushDb (line 2140) | @Test
    method testEcho (line 2155) | @Test
    method testBgrewriteaof (line 2180) | @Test
    method testDebug (line 2199) | @Test
    method testExpireat (line 2218) | @Test

FILE: core/ri/src/test/java/org/jredis/ri/alphazero/JRedisPipelineTest.java
  class JRedisPipelineTest (line 36) | @Test(sequential = true, suiteName="JRedisPipeline-tests")
    method newProviderInstance (line 51) | @Override
    method testQuit (line 81) | @AfterTest

FILE: core/ri/src/test/java/org/jredis/ri/alphazero/JRedisProviderTestsBase.java
  class JRedisProviderTestsBase (line 52) | @Version(major=2, minor=0)
    method testElicitErrors (line 80) | @Test
    method testPing (line 150) | @Test
    method testExists_Expire_TTL (line 165) | @Test
    method testExpireat (line 211) | @Test
    method testSetAndFlushdbAndExistsAndKeys (line 256) | @Test
    method testRename (line 280) | @Test
    method testBitCommands (line 301) | @Test
    method testRenamenx (line 325) | @Test
    method testSaveAndLastSave (line 360) | @Test
    method testBgsave (line 388) | @Test
    method testBgrewriteaofe (line 425) | @Test
    method testSetStringByteArray (line 442) | @Test
    method testAppendStringByteArray (line 465) | @Test
    method testAppendStringString (line 510) | @Test
    method testSetStringString (line 558) | @Test
    method testSetStringNumber (line 581) | @Test
    method testSetStringT (line 601) | @Test
    method testHsetHgetHexists (line 618) | @Test
    method testHkeys (line 656) | @Test
    method testHvals (line 688) | @Test
    method testHgetall (line 723) | @Test
    method testGetSetStringByteArray (line 767) | @Test
    method testIncrAndDecr (line 851) | @Test
    method testIncrbyAndDecrby (line 877) | @Test
    method testDel (line 905) | @Test
    method testMget (line 982) | @Test
    method testListPushWithSparseList (line 1054) | @Test
    method testRpushStringByteArray (line 1090) | @Test
    method testLpushStringByteArray (line 1124) | @Test
    method testLpoppushStringString (line 1157) | @Test
    method testRpushStringString (line 1186) | @Test
    method testLpushStringString (line 1216) | @Test
    method testRpushStringNumber (line 1249) | @Test
    method testLpushStringNumber (line 1280) | @Test
    method testRpushStringT (line 1314) | @Test
    method testLpushStringT (line 1345) | @Test
    method testLtrim (line 1380) | @Test
    method testLindex (line 1423) | @Test
    method testLpop (line 1444) | @Test
    method testRpop (line 1471) | @Test
    method testLrange (line 1498) | @Test
    method testSubstr (line 1527) | @Test
    method testLremStringByteArrayInt (line 1560) | @Test
    method testLremStringStringInt (line 1604) | @Test
    method testLremStringNumberInt (line 1637) | @Test
    method testLremStringTInt (line 1670) | @Test
    method testLsetStringIntByteArray (line 1703) | @Test
    method testLsetStringIntString (line 1753) | @Test
    method testLsetStringIntNumber (line 1796) | @Test
    method testLsetStringIntT (line 1839) | @Test
    method testSort (line 1889) | @Test
    method testZaddStringByteArray (line 1967) | @Test
    method testZremStringByteArray (line 1985) | @Test
    method testZscoreStringByteArray (line 2002) | @Test
    method testZrankStringByteArray (line 2023) | @Test
    method testZrevrankStringByteArray (line 2046) | @Test
    method testZrangeWithscoresStringByteArray (line 2068) | @Test
    method testZrevrangeWithscoresStringByteArray (line 2093) | @Test
    method testZrangebyscoreStringByteArray (line 2118) | @Test
    method testZrangebyscoreWithScoresStringByteArray (line 2138) | @Test
    method testZremrangebyscoreStringByteArray (line 2159) | @Test
    method testZcountStringByteArray (line 2178) | @Test
    method testZremrangebyrankStringByteArray (line 2196) | @Test
    method testZincrbyStringByteArray (line 2215) | @Test
    method testZrangeStringByteArray (line 2237) | @Test
    method testSaddStringByteArray (line 2263) | @Test
    method testSaddStringString (line 2283) | @Test
    method testSaddStringNumber (line 2303) | @Test
    method testSaddStringT (line 2323) | @Test
    method testSrandmember (line 2340) | @Test
    method testSmembers (line 2391) | @Test
    method testSmoveStringByteArray (line 2504) | @Test
    method testSismemberStringByteArray (line 2568) | @Test
    method testSismemberStringString (line 2588) | @Test
    method testSismemberStringNumber (line 2608) | @Test
    method testSismemberStringT (line 2628) | @Test
    method testScard (line 2649) | @Test
    method testZcard (line 2668) | @Test
    method testSinter (line 2687) | @Test
    method testSinterstore (line 2711) | @Test
    method testSunion (line 2739) | @Test
    method testSunionstore (line 2763) | @Test
    method testSdiff (line 2791) | @Test
    method testSdiffstore (line 2830) | @Test
    method testSremStringByteArray (line 2866) | @Test
    method testSremStringString (line 2887) | @Test
    method testSremStringNumber (line 2908) | @Test
    method testSremStringT (line 2929) | @Test
    method testDbsize (line 2952) | @Test
    method testRandomkey (line 2973) | @Test
    method testType (line 3024) | @Test
    method testDebug (line 3044) | @Test
    method testInfo (line 3062) | @Test
    method testKeys (line 3084) | @Test
    method testKeysString (line 3108) | @Test
    method testEcho (line 3128) | @Test

FILE: core/ri/src/test/java/org/jredis/ri/alphazero/support/ConvertTest.java
  class ConvertTest (line 44) | @Test(suiteName="support-tests")
    method testGetNaturalNumber (line 47) | @Test
    method testToBytes (line 241) | @Test

FILE: core/ri/src/test/java/org/jredis/ri/alphazero/support/GZipTest.java
  class GZipTest (line 33) | @Test(suiteName="support-tests")
    method testCompression (line 37) | @Test
    method getRandomString (line 67) | static

FILE: examples/src/main/java/org/jredis/examples/HelloAgain.java
  class HelloAgain (line 38) | public class HelloAgain {
    method main (line 41) | public static void main(String[] args) {
    method run (line 47) | private void run(String password) {

FILE: examples/src/main/java/org/jredis/examples/PipelineInAction.java
  class PipelineInAction (line 50) | public class PipelineInAction {
    method main (line 51) | @SuppressWarnings("boxing")
    method usingSynchSemantics (line 67) | @SuppressWarnings("boxing")
    method runJRedisPipelineGET (line 109) | @SuppressWarnings({ "unused", "boxing" })
    method runJRedisPipelinePING (line 162) | @SuppressWarnings({ "unused", "boxing" })
    method runJRedisPipelineLPUSH (line 209) | @SuppressWarnings("boxing")
    method runJRedisPipelineSET (line 267) | @SuppressWarnings("boxing")
    method runJRedisPipelineINCR (line 320) | @SuppressWarnings("boxing")

FILE: examples/src/main/java/org/jredis/examples/UsingConnectionSpec.java
  class UsingConnectionSpec (line 38) | public class UsingConnectionSpec {
    method main (line 39) | public static void main (String[] args) {
    method exampleUsingCustomTCPSettings (line 48) | @SuppressWarnings("boxing")
    method exampleUsingDefaultConnectionSpec (line 123) | @SuppressWarnings("boxing")

FILE: examples/src/main/java/org/jredis/examples/UsingJRedisFuture.java
  class UsingJRedisFuture (line 44) | public abstract class UsingJRedisFuture {
    method theBasics (line 59) | @SuppressWarnings("boxing")
    method UsingJRedisFuture (line 190) | public UsingJRedisFuture (ConnectionSpec connectionSpec){
    method runExamples (line 206) | private void runExamples () throws InterruptedException {
    method getProviderInstance (line 220) | abstract

FILE: examples/src/main/java/org/jredis/examples/UsingJRedisPipeline.java
  class UsingJRedisPipeline (line 45) | public class UsingJRedisPipeline extends UsingJRedisFuture {
    method main (line 47) | public static void main (String[] args) {
    method exampleUseofSyncInPipeline (line 59) | @SuppressWarnings("boxing")
    method UsingJRedisPipeline (line 132) | public UsingJRedisPipeline (ConnectionSpec connectionSpec) {
    method getProviderInstance (line 139) | @Override

FILE: examples/src/main/java/org/jredis/examples/UsingJRedisPipelineService.java
  class UsingJRedisPipelineService (line 40) | public class UsingJRedisPipelineService {
    method UsingJRedisPipelineService (line 43) | private UsingJRedisPipelineService() {
    method run (line 52) | private  void run () {
    method elicitErrors (line 103) | private void elicitErrors ()  {
    method basicStuff (line 114) | private void basicStuff () throws RedisException {
    method main (line 122) | public static void main (String[] args) {

FILE: examples/src/main/java/org/jredis/examples/commands/UsingBulkCommands.java
  class UsingBulkCommands (line 43) | public class UsingBulkCommands {
    method main (line 44) | public static void main (String[] args) {
    method usingSyncClient (line 52) | public static void usingSyncClient () {
    method useMSet (line 66) | private static void useMSet (JRedis jredis) {
    method useMSetNX (line 86) | private static void useMSetNX (JRedis jredis) {
    method usingAsyncClient (line 119) | public static void usingAsyncClient () {
    method useMSetNX (line 133) | private static void useMSetNX (JRedisFuture jredis) {
    method useMSet (line 163) | private static void useMSet (JRedisFuture jredis) {

FILE: examples/src/main/java/org/jredis/examples/commands/UsingZrangeSubset.java
  class UsingZrangeSubset (line 44) | public class UsingZrangeSubset {
    method main (line 49) | public static void main (String[] args) {
    method usingSyncClient (line 57) | public static void usingSyncClient () {
    method usingAsyncClient (line 74) | public static void usingAsyncClient () {
    method useZRangeSubset (line 99) | private static void useZRangeSubset (JRedis jredis) {
    method useZRangeSubset (line 145) | private static void useZRangeSubset (JRedisFuture jredis) {
    method getRandomAsciiString (line 195) | static final String getRandomAsciiString (Random random, int length) {

FILE: extensions/api/src/main/java/org/jredis/cluster/ClusterModel.java
  type ClusterModel (line 34) | public interface ClusterModel {
    method supports (line 41) | public boolean supports(ClusterType type);
    method supportsReconfiguration (line 47) | public boolean supportsReconfiguration();
    method getSpec (line 53) | public ClusterSpec getSpec();
    method addNode (line 63) | public void addNode(ClusterNodeSpec nodeSpec) throws IllegalArgumentEx...
    method removeNode (line 73) | public void removeNode(ClusterNodeSpec nodeSpec) throws IllegalArgumen...
    method getNodeForKey (line 84) | public ClusterNodeSpec getNodeForKey (byte[] key);
    method addListener (line 95) | public boolean addListener(Listener modelListener);
    method removeListener (line 102) | public boolean removeListener(Listener modelListener);
    type Listener (line 119) | public interface Listener {
      method onEvent (line 120) | public void onEvent(ClusterModel.Event event);
    class Event (line 134) | public static class Event extends org.jredis.Event<ClusterModel, Clust...
      method Event (line 145) | public Event (ClusterModel src, Type type, ClusterNodeSpec info) {
      method getTimestamp (line 151) | public long getTimestamp () { return timestamp; }
      type Type (line 154) | public enum Type {
    class Support (line 175) | abstract public static class Support implements ClusterModel {
      method Support (line 214) | protected Support(ClusterSpec clusterSpec){
      method addNode (line 229) | final public void addNode (ClusterNodeSpec nodeSpec)
      method removeNode (line 245) | final public void removeNode (ClusterNodeSpec nodeSpec) throws Illeg...
      method getSpec (line 260) | final public ClusterSpec getSpec () {
      method addListener (line 264) | final public boolean addListener (Listener modelListener) {
      method removeListener (line 268) | final public boolean removeListener (Listener modelListener) {
      method initialize (line 275) | private final void initialize () {
      method notifyListeners (line 279) | private final void notifyListeners(ClusterModel.Event e) {
      method onNodeAddition (line 290) | abstract protected boolean onNodeAddition(ClusterNodeSpec newNode);
      method onNodeRemoval (line 295) | abstract protected boolean onNodeRemoval(ClusterNodeSpec newNode);
      method initializeModel (line 299) | abstract protected void initializeModel();

FILE: extensions/api/src/main/java/org/jredis/cluster/ClusterNodeSpec.java
  type ClusterNodeSpec (line 38) | public interface ClusterNodeSpec {
    method getConnectionSpec (line 42) | public ConnectionSpec getConnectionSpec();
    method getId (line 48) | public String getId ();
    method getKeyForReplicationInstance (line 62) | public String getKeyForReplicationInstance (int rangeReplicationIndex);
    class Support (line 75) | public abstract static class Support implements ClusterNodeSpec {
      method Support (line 94) | public Support(ConnectionSpec connSpec){
      method getConnectionSpec (line 107) | final public ConnectionSpec getConnectionSpec () { return this.connS...
      method getId (line 111) | final public String getId () { return this.id;}
      method equals (line 121) | @Override
      method hashCode (line 135) | @Override
      method toString (line 140) | @Override
      method generateId (line 159) | protected abstract String generateId () ;

FILE: extensions/api/src/main/java/org/jredis/cluster/ClusterSpec.java
  type ClusterSpec (line 32) | public interface ClusterSpec {
    method getType (line 46) | public ClusterType getType ();
    method setType (line 47) | public ClusterSpec setType (ClusterType clusterType);
    method getNodeSpecs (line 55) | public Set<ClusterNodeSpec> getNodeSpecs();
    method addNode (line 62) | public boolean addNode(ClusterNodeSpec nodeSpec);
    method removeNode (line 68) | public boolean removeNode (ClusterNodeSpec nodeSpec);
    method addAll (line 80) | public boolean addAll(Collection<ClusterNodeSpec> nodeSpecs);
    method removeAll (line 89) | public boolean removeAll(Collection<ClusterNodeSpec> nodeSpecs);
    class Support (line 95) | public abstract static class Support implements ClusterSpec {
      method Support (line 108) | protected Support () { }
      method getType (line 114) | public ClusterType getType() { return type; }
      method setType (line 115) | public ClusterSpec setType(ClusterType type) { this.type = type; ret...
      method addAll (line 119) | public boolean addAll (Collection<ClusterNodeSpec> nodes) {
      method removeAll (line 126) | public boolean removeAll (Collection<ClusterNodeSpec> nodes) {
      method addNode (line 133) | public boolean addNode (ClusterNodeSpec nodeSpec) {
      method removeNode (line 141) | public boolean removeNode (ClusterNodeSpec nodeSpec) {
      method getNodeSpecs (line 160) | final public Set<ClusterNodeSpec> getNodeSpecs () {

FILE: extensions/api/src/main/java/org/jredis/cluster/ClusterType.java
  type ClusterType (line 27) | public enum ClusterType {

FILE: extensions/api/src/main/java/org/jredis/cluster/connector/ClusterConnection.java
  type ClusterConnection (line 59) | public interface ClusterConnection extends Connection{
    method getClusterSpec (line 68) | public ClusterSpec getClusterSpec();
    method getClusterModel (line 73) | public ClusterModel getClusterModel();
    method supports (line 80) | public boolean supports (Command cmd);
    method getSupportedCommands (line 85) | public Collection<Command> getSupportedCommands ();

FILE: extensions/api/src/main/java/org/jredis/cluster/model/ConsistentHashCluster.java
  type ConsistentHashCluster (line 39) | public interface ConsistentHashCluster extends ClusterModel {
    method getNodeMap (line 46) | NodeMap getNodeMap ();
    type NodeMap (line 52) | public interface NodeMap extends SortedMap<Long, ClusterNodeSpec> {
    class Support (line 60) | public abstract static class Support extends ClusterModel.Support impl...
      method Support (line 79) | protected Support (ClusterSpec clusterSpec) {
      method newClusterNodeMap (line 90) | abstract protected NodeMap newClusterNodeMap();
      method mapNodes (line 96) | abstract protected void mapNodes();
      method replicationCount (line 103) | abstract protected int replicationCount();
      method initializeComponents (line 109) | abstract protected void initializeComponents () ;
      method initializeModel (line 127) | @Override
      method onNodeAddition (line 137) | @Override
      method onNodeRemoval (line 143) | @Override
      method getNodeMap (line 153) | public NodeMap getNodeMap () {
      method supports (line 158) | final public boolean supports (ClusterType type) {

FILE: extensions/api/src/main/java/org/jredis/cluster/model/StaticHashCluster.java
  type StaticHashCluster (line 45) | public interface StaticHashCluster extends ClusterModel {
    class Support (line 47) | public abstract static class Support extends ClusterModel.Support impl...
      method Support (line 65) | protected Support (ClusterSpec clusterSpec) {
      method newHashAlgorithm (line 77) | abstract protected HashAlgorithm newHashAlgorithm();
      method initializeModel (line 84) | @Override
      method onNodeAddition (line 94) | @Override
      method onNodeRemoval (line 100) | @Override
      method supports (line 106) | final public boolean supports (ClusterType type) {
      method supportsReconfiguration (line 111) | final public boolean supportsReconfiguration () {

FILE: extensions/api/src/main/java/org/jredis/cluster/support/HashAlgorithm.java
  type HashAlgorithm (line 27) | public interface HashAlgorithm {
    method hash (line 28) | public long hash(byte[] kb);

FILE: extensions/ri/src/main/java/org/jredis/ri/cluster/DefaultClusterNodeSpec.java
  class DefaultClusterNodeSpec (line 38) | public class DefaultClusterNodeSpec extends ClusterNodeSpec.Support impl...
    method DefaultClusterNodeSpec (line 51) | public DefaultClusterNodeSpec(ConnectionSpec connSpec){
    method getSpecFor (line 58) | public static ClusterNodeSpec getSpecFor(Socket conn){
    method generateId (line 79) | protected String generateId () {
    method getKeyForReplicationInstance (line 97) | public String getKeyForReplicationInstance (int rangeReplicationIndex) {

FILE: extensions/ri/src/main/java/org/jredis/ri/cluster/DefaultClusterSpec.java
  class DefaultClusterSpec (line 35) | public class DefaultClusterSpec extends Support implements ClusterSpec {
    method DefaultClusterSpec (line 44) | public DefaultClusterSpec () {
    method DefaultClusterSpec (line 48) | public DefaultClusterSpec (Collection<ClusterNodeSpec> nodeSpecs) {
    method newSpecForRange (line 67) | public static ClusterSpec newSpecForRange (ConnectionSpec templateConn...

FILE: extensions/ri/src/main/java/org/jredis/ri/cluster/connection/ClusterConnectionBase.java
  class ClusterConnectionBase (line 49) | abstract public class ClusterConnectionBase implements ClusterConnection...
    method ClusterConnectionBase (line 72) | protected ClusterConnectionBase (ClusterModel model)
    method ClusterConnectionBase (line 83) | protected ClusterConnectionBase (ClusterModel model, boolean connectIm...
    method getClusterModel (line 108) | final public ClusterModel getClusterModel () { return model; }
    method getClusterSpec (line 111) | final public ClusterSpec getClusterSpec () { return model.getSpec(); }
    method getSpec (line 114) | final public ConnectionSpec getSpec () {
    method getSupportedCommands (line 119) | final public Collection<Command> getSupportedCommands () {
    method supports (line 124) | final public boolean supports (Command cmd) {
    method queueRequest (line 129) | public Future<Response> queueRequest (Command cmd, byte[]... args)
    method serviceRequest (line 137) | public Response serviceRequest (Command cmd, byte[]... args)
    method addListener (line 147) | final public boolean addListener(Listener connListener){
    method removeListener (line 152) | final public boolean removeListener(Listener connListener){
    method onEvent (line 164) | public void onEvent(Connection.Event event) {
    method verifyAndGetKeyForRequest (line 187) | final private byte[] verifyAndGetKeyForRequest(Command cmd, byte[]...a...
    method initialize (line 195) | final protected void initialize () throws ClientRuntimeException, Prov...
    method initializeConnections (line 201) | final private void initializeConnections () throws ClientRuntimeExcept...
    method mapSupportedCommands (line 218) | final private void mapSupportedCommands () {
    method getConnectionForKey (line 251) | final protected Connection getConnectionForKey(byte[] key){
    method initializeComponents (line 266) | abstract protected void initializeComponents () ;
    method affirmSupportFor (line 273) | protected boolean affirmSupportFor (Command cmd) { return true; }
    method affirmLackOfSupportFor (line 280) | protected boolean affirmLackOfSupportFor (Command cmd) {return true; }
    method createAsynchConnection (line 286) | protected Connection createAsynchConnection (ClusterNodeSpec nodeSpec) {
    method createSynchConnection (line 294) | protected Connection createSynchConnection (ClusterNodeSpec nodeSpec) {

FILE: extensions/ri/src/main/java/org/jredis/ri/cluster/connection/SynchClusterConnection.java
  class SynchClusterConnection (line 38) | public class SynchClusterConnection extends ClusterConnectionBase {
    method SynchClusterConnection (line 48) | protected SynchClusterConnection (ClusterModel model, boolean connectI...
    method SynchClusterConnection (line 59) | protected SynchClusterConnection (ClusterModel model) throws ClientRun...
    method initializeComponents (line 64) | @Override
    method getModality (line 80) | final public Modality getModality () { return Connection.Modality.Sync...
    method queueRequest (line 83) | final public Future<Response> queueRequest (Command cmd, byte[]... args)
    method createSynchConnection (line 96) | protected Connection createSynchConnection (ClusterNodeSpec nodeSpec) {

FILE: extensions/ri/src/main/java/org/jredis/ri/cluster/model/BasicStaticHashCluster.java
  class BasicStaticHashCluster (line 32) | public class BasicStaticHashCluster extends StaticHashCluster.Support im...
    method BasicStaticHashCluster (line 40) | public BasicStaticHashCluster (ClusterSpec clusterSpec) {
    method newHashAlgorithm (line 49) | @Override
    method getNodeForKey (line 60) | public ClusterNodeSpec getNodeForKey (byte[] key) {

FILE: extensions/ri/src/main/java/org/jredis/ri/cluster/model/KetamaClusterModel.java
  class KetamaClusterModel (line 39) | public class KetamaClusterModel extends ConsistentHashCluster.Support im...
    method KetamaClusterModel (line 55) | public KetamaClusterModel (ClusterSpec clusterSpec) {
    method getNodeForKey (line 64) | public ClusterNodeSpec getNodeForKey (byte[] key) {
    method supportsReconfiguration (line 92) | public boolean supportsReconfiguration () {
    method replicationCount (line 108) | @Override
    method newClusterNodeMap (line 114) | @Override
    method initializeComponents (line 117) | @Override
    method mapNodes (line 128) | @Override
    method mapNode (line 146) | private boolean mapNode(ClusterNodeSpec node){
    method onNodeAddition (line 161) | @Override
    method onNodeRemoval (line 167) | @Override
    class KetamaNodeMap (line 181) | @SuppressWarnings("serial")

FILE: extensions/ri/src/main/java/org/jredis/ri/cluster/model/KetamaHashProvider.java
  class KetamaHashProvider (line 43) | public class KetamaHashProvider implements HashAlgorithm {
    method hash (line 58) | public long hash (byte[] b) {
    method hash (line 87) | long hash (byte[] digest, int h) {

FILE: extensions/ri/src/main/java/org/jredis/ri/cluster/support/CryptoHashUtils.java
  class CryptoHashUtils (line 37) | public class CryptoHashUtils {
    method computeMd5 (line 45) | public static byte[] computeMd5(byte[] b) throws ClientRuntimeException{
    method computeMd5 (line 66) | public static byte[] computeMd5(String s) throws ClientRuntimeException{

FILE: extensions/ri/src/test/java/org/jredis/cluster/ClusterModelProviderTestBase.java
  class ClusterModelProviderTestBase (line 39) | public abstract class ClusterModelProviderTestBase extends RefImplTestSu...
    method newClusterModel (line 49) | protected abstract ClusterModel newClusterModel (ClusterSpec clusterSp...
    method newClusterSpec (line 54) | protected abstract ClusterSpec newClusterSpec () ;
    method getSupportedClusterType (line 59) | protected abstract ClusterType getSupportedClusterType ();
    method getSpecificationClass (line 64) | @Override
    method newProviderInstance (line 70) | @Override
    method metaTest (line 79) | @Test
    method testClusterSpecPropertyOps (line 95) | @Test
    method testReconfigOfNonReconfigurableModel (line 132) | @Test
    method testReconfigOfReconfigurableModel (line 171) | @Test
    method testKeyDistribution (line 197) | @Test

FILE: extensions/ri/src/test/java/org/jredis/cluster/ClusterNodeSpecProviderTestBase.java
  class ClusterNodeSpecProviderTestBase (line 33) | @Test(suiteName="extensions-cluster-specs-1")
    method getSpecificationClass (line 42) | protected final Class<?> getSpecificationClass () {
    method newProviderInstance (line 51) | protected abstract ClusterNodeSpec newProviderInstance (ConnectionSpec...
    method testIdentityContract (line 56) | @Test
    method testIdGeneration (line 113) | @Test
    method testGetKeyForCHRangeInstance (line 131) | @Test

FILE: extensions/ri/src/test/java/org/jredis/cluster/ClusterSpecProviderTestBase.java
  class ClusterSpecProviderTestBase (line 32) | @Test(suiteName="extensions-cluster-specs-2")
    method newNodeSpec (line 40) | protected abstract ClusterNodeSpec newNodeSpec (ConnectionSpec connect...
    method getSpecificationClass (line 46) | protected final Class<?> getSpecificationClass () {
    method testGetType (line 54) | @Test
    method testSetType (line 60) | @Test
    method testAddAndRemoveAll (line 87) | @Test
    method testRemoveNodeSpec (line 131) | @Test
    method testAddNodeSpec (line 147) | @Test
    method testChainedResult (line 186) | private final void testChainedResult (ClusterSpec res, ClusterSpec exp...

FILE: extensions/ri/src/test/java/org/jredis/cluster/ClusterSuiteTestData.java
  class ClusterSuiteTestData (line 42) | public class ClusterSuiteTestData {
    method getInstance (line 86) | public static ClusterSuiteTestData getInstance () {
    method ClusterSuiteTestData (line 92) | private ClusterSuiteTestData () {
    method getRandomAsciiString (line 129) | static public String getRandomAsciiString (int length) {
    method getRandomBytes (line 143) | static public byte[] getRandomBytes(int size) {
    method getRandomIPv$HostName (line 153) | static public String getRandomIPv$HostName () {
    method getInetAddressFor (line 164) | static public InetAddress getInetAddressFor (String hostName) {
    method getConnectionSpecFor (line 174) | static public ConnectionSpec getConnectionSpecFor (InetAddress address...

FILE: extensions/ri/src/test/java/org/jredis/cluster/ProviderTestBase.java
  class ProviderTestBase (line 34) | public abstract class ProviderTestBase <T> {
    method initialize (line 49) | @BeforeTest
    method newProviderInstance (line 74) | protected abstract T newProviderInstance () ;
    method getSpecificationClass (line 78) | protected abstract Class<?> getSpecificationClass () ;

FILE: extensions/ri/src/test/java/org/jredis/cluster/RefImplTestSuiteBase.java
  class RefImplTestSuiteBase (line 34) | public abstract class RefImplTestSuiteBase <T> extends ProviderTestBase ...
    method suiteParametersInit (line 48) | @Parameters({
    method setupTestSuiteData (line 98) | private ClusterSuiteTestData setupTestSuiteData () {

FILE: extensions/ri/src/test/java/org/jredis/cluster/models/BasicStaticHashClusterTest.java
  class BasicStaticHashClusterTest (line 38) | @Test(suiteName="basic static hash")
    method newClusterModel (line 47) | @Override
    method newClusterSpec (line 61) | @Override
    method fooTest (line 74) | @Test

FILE: extensions/ri/src/test/java/org/jredis/cluster/models/ConsistentHashClusterProviderTestBase.java
  class ConsistentHashClusterProviderTestBase (line 38) | public abstract class ConsistentHashClusterProviderTestBase extends Clus...
    method getSupportedClusterType (line 41) | @Override
    method compatibilityTest (line 48) | @Test
    method basicNodeMapTest (line 56) | @Test

FILE: extensions/ri/src/test/java/org/jredis/cluster/models/KetamaClusterModelTest.java
  class KetamaClusterModelTest (line 42) | @Test(suiteName="ketama")
    method newClusterModel (line 50) | @Override
    method newClusterSpec (line 64) | @Override
    method fooTest (line 83) | @Test

FILE: extensions/ri/src/test/java/org/jredis/cluster/models/KetamaHashAlgoTest.java
  class KetamaHashAlgoTest (line 31) | public class KetamaHashAlgoTest extends HashAlgorithmProviderTestBase {
    method newProviderInstance (line 38) | @Override

FILE: extensions/ri/src/test/java/org/jredis/cluster/models/StaticHashClusterProviderTestBase.java
  class StaticHashClusterProviderTestBase (line 39) | public abstract class StaticHashClusterProviderTestBase extends ClusterM...
    method getSupportedClusterType (line 42) | @Override
    method compatibilityTest (line 51) | @Test
    method testStaticHash (line 89) | @Test

FILE: extensions/ri/src/test/java/org/jredis/cluster/support/HashAlgorithmProviderTestBase.java
  class HashAlgorithmProviderTestBase (line 39) | @Test(suiteName="extensions-cluster-specs-algorithms-1")
    method getSpecificationClass (line 47) | protected final Class<?> getSpecificationClass () {
    method testHashByteArray (line 54) | @SuppressWarnings("static-access")

FILE: extensions/ri/src/test/java/org/jredis/ri/cluster/ClusterNodeSpecImplTest.java
  class ClusterNodeSpecImplTest (line 32) | public class ClusterNodeSpecImplTest extends ClusterNodeSpecProviderTest...
    method newProviderInstance (line 34) | @Override
    method newProviderInstance (line 39) | @Override

FILE: extensions/ri/src/test/java/org/jredis/ri/cluster/DefaultClusterSpecTest.java
  class DefaultClusterSpecTest (line 33) | public class DefaultClusterSpecTest extends ClusterSpecProviderTestBase {
    method newProviderInstance (line 35) | @Override
    method newNodeSpec (line 41) | @Override

FILE: extensions/ri/src/test/java/org/jredis/ri/cluster/support/CryptoHashUtilTest.java
  class CryptoHashUtilTest (line 34) | @Test(suiteName="extensions-ri-cluster-tests2")
    method newProviderInstance (line 42) | @Override
    method getSpecificationClass (line 46) | protected final Class<?> getSpecificationClass () {
    method testComputeMd5 (line 57) | @SuppressWarnings("static-access")

FILE: extensions/ri/src/test/java/org/jredis/test/util/RunningAverage.java
  class RunningAverage (line 19) | public class RunningAverage {
    method RunningAverage (line 24) | public RunningAverage() {
    method onMeasure (line 28) | public long onMeasure (long delta){
    method get (line 34) | public long get () { return (long) avg; }
    method getMin (line 38) | public long getMin () { return min; }
    method getMax (line 39) | public long getMax () { return max; }
    method getCount (line 43) | public long getCount () { return n; }
Condensed preview — 241 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,375K chars).
[
  {
    "path": ".gitignore",
    "chars": 92,
    "preview": "target\n*.log\n*.classpath\n*.project\n*.settings\n*.DS_Store\n*.class\njredis.tmproj\n*.iml\n*.idea\n"
  },
  {
    "path": "DEV-NOTES.txt",
    "chars": 150,
    "preview": "Wed Feb 1 2012 \n\n\t* Merged chunk-pipelien branch to master\n\t  REFERENCE commit a9cff24fd8f041ec181598c571989680a4e5ad15 "
  },
  {
    "path": "LICENSE",
    "chars": 11359,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "NOTICE",
    "chars": 295,
    "preview": "Copyright 2009-2012, Joubin Houshyar. \n\nAll parts of the original works in JReids are licensed under the \nApache License"
  },
  {
    "path": "README",
    "chars": 3724,
    "preview": "(This README is mainly addressing the project structure and build.  For information\nabout JRedis, please see the RELEASE"
  },
  {
    "path": "RELEASE-NOTES.txt",
    "chars": 9443,
    "preview": "\n\n                       ~!! n o ' r o o z !!~\n                       \n-------------------------------------------------"
  },
  {
    "path": "Release/RELEASE-NOTES-Update-03122010.txt",
    "chars": 1184,
    "preview": "Final release for Redis 1.2.n compliant clients.\n\nREQUIREMENTS CHANGES:\n\nRequires Redis server 1.2.n.  This release is N"
  },
  {
    "path": "Release/RELEASE-NOTES-Update-08132009.txt",
    "chars": 1989,
    "preview": "This update includes changes to the JRedis interface, as previously announced.\n\nAPI CHANGES:\n\nAs of this release update,"
  },
  {
    "path": "Release/RELEASE-NOTES-Update-11082009.txt",
    "chars": 3462,
    "preview": "This is a fairly substantial update release and the final release supporting Redis 1.000.\n\nThis update includes changes "
  },
  {
    "path": "Release/RELEASE_BUILD_TIME",
    "chars": 29,
    "preview": "Fri Mar 12 11:19:49 EST 2010\n"
  },
  {
    "path": "core/LICENSE",
    "chars": 11359,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "core/NOTICE",
    "chars": 295,
    "preview": "Copyright 2009-2012, Joubin Houshyar. \n\nAll parts of the original works in JReids are licensed under the \nApache License"
  },
  {
    "path": "core/README",
    "chars": 1303,
    "preview": "README : JRedis Module Core\n\n----------------------------------------------------------\nBUILD\n--------------------------"
  },
  {
    "path": "core/all/LICENSE",
    "chars": 11359,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "core/all/NOTICE",
    "chars": 295,
    "preview": "Copyright 2009-2012, Joubin Houshyar. \n\nAll parts of the original works in JReids are licensed under the \nApache License"
  },
  {
    "path": "core/all/pom.xml",
    "chars": 1958,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
  },
  {
    "path": "core/api/LICENSE",
    "chars": 11359,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "core/api/NOTICE",
    "chars": 295,
    "preview": "Copyright 2009-2012, Joubin Houshyar. \n\nAll parts of the original works in JReids are licensed under the \nApache License"
  },
  {
    "path": "core/api/pom.xml",
    "chars": 1082,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
  },
  {
    "path": "core/api/src/main/java/org/jredis/ClientRuntimeException.java",
    "chars": 2494,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/Codec.java",
    "chars": 1563,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/Event.java",
    "chars": 2176,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/api/src/main/java/org/jredis/JRedis.java",
    "chars": 33464,
    "preview": "/*\n *   Copyright 2009-2011 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/api/src/main/java/org/jredis/JRedisFuture.java",
    "chars": 29406,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/KeyValueSet.java",
    "chars": 3255,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/NotSupportedException.java",
    "chars": 1254,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/ObjectEncoding.java",
    "chars": 1057,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/ObjectInfo.java",
    "chars": 4085,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/ProviderException.java",
    "chars": 1620,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/Query.java",
    "chars": 2690,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/api/src/main/java/org/jredis/Redis.java",
    "chars": 1261,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/RedisException.java",
    "chars": 2430,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/RedisInfo.java",
    "chars": 2136,
    "preview": "/*\n *   Copyright 2009-2012 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/api/src/main/java/org/jredis/RedisType.java",
    "chars": 771,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/Semantics.java",
    "chars": 1436,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/Sort.java",
    "chars": 3991,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/api/src/main/java/org/jredis/ZSetEntry.java",
    "chars": 1032,
    "preview": "/*\n *   Copyright 2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/_specification.java",
    "chars": 927,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/connector/Connection.java",
    "chars": 14467,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/api/src/main/java/org/jredis/connector/ConnectionException.java",
    "chars": 1355,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/connector/ConnectionFault.java",
    "chars": 1153,
    "preview": "/*\n *   Copyright 2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/connector/ConnectionReset.java",
    "chars": 2344,
    "preview": "/*\n *   Copyright 2009-2011 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/api/src/main/java/org/jredis/connector/ConnectionSpec.java",
    "chars": 13705,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/api/src/main/java/org/jredis/connector/FaultedConnection.java",
    "chars": 2797,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/connector/Message.java",
    "chars": 2096,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/connector/NotConnectedException.java",
    "chars": 1303,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/connector/RequestListener.java",
    "chars": 849,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/connector/package-info.java",
    "chars": 833,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/package-info.java",
    "chars": 911,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/protocol/BulkResponse.java",
    "chars": 904,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/protocol/Command.java",
    "chars": 12604,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/api/src/main/java/org/jredis/protocol/CommandNotImplemented.java",
    "chars": 1151,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/protocol/MultiBulkResponse.java",
    "chars": 1716,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/protocol/Protocol.java",
    "chars": 2906,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/protocol/Request.java",
    "chars": 889,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/protocol/Response.java",
    "chars": 3640,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/protocol/ResponseStatus.java",
    "chars": 1768,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/protocol/StatusResponse.java",
    "chars": 925,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/protocol/ValueResponse.java",
    "chars": 1990,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/protocol/package-info.java",
    "chars": 904,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/resource/Context.java",
    "chars": 668,
    "preview": "package org.jredis.resource;\n\nimport java.util.Set;\n\n/**\n * {@link Context<T>} provides basic context support for {@link"
  },
  {
    "path": "core/api/src/main/java/org/jredis/resource/Resource.java",
    "chars": 1653,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/resource/ResourceException.java",
    "chars": 689,
    "preview": "package org.jredis.resource;\n\nimport org.jredis.ClientRuntimeException;\n\n/**\n * The overall superclass for resource rela"
  },
  {
    "path": "core/api/src/main/java/org/jredis/resource/_specification.java",
    "chars": 1103,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/resource/package-info.java",
    "chars": 845,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/semantics/BasicCodecManager.java",
    "chars": 1409,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/semantics/CodecManager.java",
    "chars": 1153,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/semantics/KeyCodec.java",
    "chars": 2232,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/semantics/SemanticJRedis.java",
    "chars": 6666,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/semantics/SemanticQuery.java",
    "chars": 991,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/semantics/SemanticSort.java",
    "chars": 887,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/semantics/Semantics.java",
    "chars": 984,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/java/org/jredis/semantics/package-info.java",
    "chars": 1221,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/main/resources/META-INF/redis-commands-2.4.n.txt",
    "chars": 877,
    "preview": "auth\nping\necho\nset\nsetnx\nsetex\nget\ndel\nexists\nsetbit\ngetbit\nsetrange\ngetrange\nincr\ndecr\nincrby\ndecrby\nselect\nrandomkey\nk"
  },
  {
    "path": "core/api/src/test/java/org/jredis/TestBase.java",
    "chars": 3426,
    "preview": "/*\n *   Copyright 2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/test/java/org/jredis/compliance/CheckRedisCompliance.java",
    "chars": 4270,
    "preview": "/*\n *   Copyright 2009-2012 Joubin Houshyar\n * \n *   This file is part of JRedis.\n *\n *   Licensed under the Apache Lice"
  },
  {
    "path": "core/api/src/test/java/org/jredis/connector/TestSpecElements.java",
    "chars": 3331,
    "preview": "/*\n *   Copyright 2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/test/java/org/jredis/protocol/TestCommand.java",
    "chars": 1933,
    "preview": "/*\n *   Copyright 2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/api/src/test/resources/log4j.properties",
    "chars": 643,
    "preview": "# Configure logging for testing\nlog4j.rootLogger=DEBUG, stdout, logfile\n\nlog4j.appender.stdout=org.apache.log4j.ConsoleA"
  },
  {
    "path": "core/bench/LICENSE",
    "chars": 11359,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "core/bench/NOTICE",
    "chars": 295,
    "preview": "Copyright 2009-2012, Joubin Houshyar. \n\nAll parts of the original works in JReids are licensed under the \nApache License"
  },
  {
    "path": "core/bench/pom.xml",
    "chars": 1398,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
  },
  {
    "path": "core/bench/src/main/java/org/jredis/bench/JRedisBenchmark.java",
    "chars": 21340,
    "preview": "/*\n *   Copyright 2009 Joubin Mohammad Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "core/bench/src/main/java/org/jredis/bench/JRedisJProfileSubject.java",
    "chars": 2083,
    "preview": "/*\n *   Copyright 2009 Joubin Mohammad Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "core/bench/src/main/java/org/jredis/bench/Util.java",
    "chars": 3765,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/bench/src/main/java/org/jredis/ri/alphazero/bench/JRedisClientBenchmark.java",
    "chars": 2236,
    "preview": "/*\n *   Copyright 2009 Joubin Mohammad Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "core/bench/src/main/java/org/jredis/ri/alphazero/bench/JRedisClientJProfileSubject.java",
    "chars": 1235,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/bench/src/main/java/org/jredis/ri/alphazero/bench/JRedisPipelineServiceBenchmark.java",
    "chars": 2589,
    "preview": "///*\n// *   Copyright 2009 Joubin Houshyar\n// * \n// *   Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "core/bench/src/main/java/org/jredis/ri/alphazero/bench/JRedisServiceBenchmark.java",
    "chars": 2747,
    "preview": "///*\n// *   Copyright 2009 Joubin Houshyar\n// * \n// *   Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "core/bench/src/main/java/org/jredis/ri/alphazero/bench/SimpleBenchJRedisAsync.java",
    "chars": 1689,
    "preview": "package org.jredis.ri.alphazero.bench;\n\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.Futu"
  },
  {
    "path": "core/bench/src/main/java/org/jredis/ri/alphazero/bench/SimpleBenchJRedisChunkedPipeline.java",
    "chars": 2042,
    "preview": "package org.jredis.ri.alphazero.bench;\n\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.Futu"
  },
  {
    "path": "core/bench/src/main/java/org/jredis/ri/alphazero/bench/SimpleBenchJRedisClient.java",
    "chars": 1394,
    "preview": "package org.jredis.ri.alphazero.bench;\n\nimport java.util.concurrent.TimeUnit;\n\nimport org.jredis.JRedis;\nimport org.jred"
  },
  {
    "path": "core/bench/src/main/java/org/jredis/ri/alphazero/bench/SimpleBenchJRedisPipeline.java",
    "chars": 1701,
    "preview": "package org.jredis.ri.alphazero.bench;\n\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.Futu"
  },
  {
    "path": "core/bench/src/main/resources/log4j.properties",
    "chars": 628,
    "preview": "# Configure logging for testing\nlog4j.rootLogger=INFO, stdout, logfile\n\nlog4j.appender.stdout=org.apache.log4j.ConsoleAp"
  },
  {
    "path": "core/pom.xml",
    "chars": 3478,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
  },
  {
    "path": "core/ri/LICENSE",
    "chars": 11359,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "core/ri/NOTICE",
    "chars": 295,
    "preview": "Copyright 2009-2012, Joubin Houshyar. \n\nAll parts of the original works in JReids are licensed under the \nApache License"
  },
  {
    "path": "core/ri/pom.xml",
    "chars": 1718,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/RI.java",
    "chars": 1275,
    "preview": "/*\n *   Copyright 2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/BulkSetMapping.java",
    "chars": 2857,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/JRedisAsyncClient.java",
    "chars": 4171,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/JRedisChunkedPipeline.java",
    "chars": 1789,
    "preview": "/*\n *   Copyright 2009-2012 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/JRedisClient.java",
    "chars": 6570,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/JRedisFutureSupport.java",
    "chars": 68474,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n *\n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *  "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/JRedisPipeline.java",
    "chars": 5845,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/JRedisPipelineService.java",
    "chars": 3448,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/JRedisService.java",
    "chars": 7923,
    "preview": "///*\n// *   Copyright 2009 Joubin Houshyar\n// * \n// *   Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/JRedisSupport.java",
    "chars": 74387,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/Pair.java",
    "chars": 954,
    "preview": "/*\n *   Copyright 2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/RedisVersion.java",
    "chars": 1194,
    "preview": "///*\n// *   Copyright 2009 Joubin Houshyar\n// * \n// *   Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/SyncJRedisBase.java",
    "chars": 3983,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/ZSetEntryImpl.java",
    "chars": 1295,
    "preview": "/*\n *   Copyright 2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/_specification.java",
    "chars": 952,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/connection/AsyncConnection.java",
    "chars": 7839,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/connection/AsyncPipelineConnection.java",
    "chars": 1529,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/connection/ChunkedPipelineConnection.java",
    "chars": 31291,
    "preview": "/*\n *   Copyright 2009-2012 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/connection/ConnectionBase.java",
    "chars": 19586,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/connection/DefaultConnectionFactory.java",
    "chars": 2759,
    "preview": "/*\n *   Copyright 2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/connection/DefaultConnectionSpec.java",
    "chars": 9093,
    "preview": "package org.jredis.ri.alphazero.connection;\n\nimport static org.jredis.connector.Connection.Flag.CONNECT_IMMEDIATELY;\nimp"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/connection/HeartbeatJinn.java",
    "chars": 6658,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/connection/PendingRequest.java",
    "chars": 5726,
    "preview": "/*\n *   Copyright 2009-2011 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/connection/PipelineConnectionBase.java",
    "chars": 15909,
    "preview": "/*\n *   Copyright 2009-2011 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/connection/SyncConnection.java",
    "chars": 6141,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/connection/SyncPipelineConnection.java",
    "chars": 3695,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/connection/UnexpectedEOFException.java",
    "chars": 1170,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/package-info.java",
    "chars": 868,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/protocol/ConcurrentSyncProtocol.java",
    "chars": 2748,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/protocol/DefaultProtocolFactory.java",
    "chars": 1426,
    "preview": "/*\n *   Copyright 2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/protocol/ProtocolBase.java",
    "chars": 11683,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/protocol/ResponseSupport.java",
    "chars": 2347,
    "preview": "package org.jredis.ri.alphazero.protocol;\n\nimport java.io.OutputStream;\nimport org.jredis.ClientRuntimeException;\nimport"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/protocol/SyncProtocol.java",
    "chars": 18833,
    "preview": "/*\n *   Copyright 2009 - 2011 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/protocol/VirtualResponse.java",
    "chars": 2459,
    "preview": "/*\n *   Copyright 2009 Joubin Mohammad Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/semantics/DefaultKeyCodec.java",
    "chars": 3487,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/semantics/DefaultStringCodec.java",
    "chars": 1559,
    "preview": "package org.jredis.ri.alphazero.semantics;\n\nimport java.nio.charset.Charset;\nimport org.jredis.Codec;\n\n/**\n * Nothing to"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/semantics/GZipCompressedStringCodec.java",
    "chars": 760,
    "preview": "package org.jredis.ri.alphazero.semantics;\n\nimport static org.jredis.ri.alphazero.support.GZip.compress;\nimport static o"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/support/Assert.java",
    "chars": 8135,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/support/Convert.java",
    "chars": 8340,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/support/DefaultCodec.java",
    "chars": 9044,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/support/FastBufferedInputStream.java",
    "chars": 5474,
    "preview": "package org.jredis.ri.alphazero.support;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport org.jredis.Prov"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/support/GZip.java",
    "chars": 2225,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/support/Log.java",
    "chars": 4630,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/support/Signal.java",
    "chars": 3234,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/support/SortSupport.java",
    "chars": 5600,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/alphazero/support/package-info.java",
    "chars": 724,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/main/java/org/jredis/ri/package-info.java",
    "chars": 1009,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/JRedisTestSuiteBase.java",
    "chars": 12541,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/ProviderTestBase.java",
    "chars": 2718,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/adhoc/AdHocTestChunkPipeline.java",
    "chars": 2767,
    "preview": "package org.jredis.ri.adhoc;\n\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.concurrent.ExecutionE"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/adhoc/AdHocTestInfo.java",
    "chars": 2739,
    "preview": "package org.jredis.ri.adhoc;\n\nimport java.util.Map;\n\nimport org.jredis.JRedis;\nimport org.jredis.JRedisFuture;\nimport or"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/adhoc/AdHocTestNoConnection.java",
    "chars": 1121,
    "preview": "package org.jredis.ri.adhoc;\n\nimport java.util.concurrent.Future;\n\nimport org.jredis.JRedisFuture;\nimport org.jredis.con"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/alphazero/ConcurrentJRedisProviderTestsBase.java",
    "chars": 3447,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/alphazero/JRedisAsyncClientTest.java",
    "chars": 2845,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/alphazero/JRedisChunkedPipelineClientTest.java",
    "chars": 2904,
    "preview": "/*\n *   Copyright 2009-2012 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/alphazero/JRedisClientTest.java",
    "chars": 2756,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/alphazero/JRedisFutureProviderTestsBase.java",
    "chars": 84748,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/alphazero/JRedisPipelineServiceTest.java",
    "chars": 3251,
    "preview": "///*\n// *   Copyright 2009 Joubin Houshyar\n// * \n// *   Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/alphazero/JRedisPipelineTest.java",
    "chars": 3048,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/alphazero/JRedisProviderTestsBase.java",
    "chars": 119563,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/alphazero/JRedisServiceTest.java",
    "chars": 4148,
    "preview": "///*\n// *   Copyright 2009 Joubin Houshyar\n// * \n// *   Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/alphazero/support/ConvertTest.java",
    "chars": 8916,
    "preview": "/*\n * Copyright (c) 2009, Joubin Houshyar <alphazero at sensesay dot net>\n * All rights reserved.\n *\n * Redistribution a"
  },
  {
    "path": "core/ri/src/test/java/org/jredis/ri/alphazero/support/GZipTest.java",
    "chars": 2621,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "core/ri/src/test/resources/log4j.properties",
    "chars": 642,
    "preview": "# Configure logging for testing\nlog4j.rootLogger=DEBUG, stdout, logfile\n\nlog4j.appender.stdout=org.apache.log4j.ConsoleA"
  },
  {
    "path": "documentation/LICENSE",
    "chars": 11359,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "documentation/NOTICE",
    "chars": 295,
    "preview": "Copyright 2009-2012, Joubin Houshyar. \n\nAll parts of the original works in JReids are licensed under the \nApache License"
  },
  {
    "path": "documentation/design/notes/api/jredis-api.txt",
    "chars": 3170,
    "preview": "[musings .. nothing structured yet]\n--\n\nThe Redis 'list' command names are a bit confusing.  Unlike 'set' commands, whic"
  },
  {
    "path": "examples/LICENSE",
    "chars": 11359,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "examples/NOTICE",
    "chars": 295,
    "preview": "Copyright 2009-2012, Joubin Houshyar. \n\nAll parts of the original works in JReids are licensed under the \nApache License"
  },
  {
    "path": "examples/pom.xml",
    "chars": 1312,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
  },
  {
    "path": "examples/src/main/java/org/jredis/examples/HelloAgain.java",
    "chars": 2360,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "examples/src/main/java/org/jredis/examples/PipelineInAction.java",
    "chars": 13181,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "examples/src/main/java/org/jredis/examples/UsingConnectionSpec.java",
    "chars": 8217,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "examples/src/main/java/org/jredis/examples/UsingJRedisFuture.java",
    "chars": 8648,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "examples/src/main/java/org/jredis/examples/UsingJRedisPipeline.java",
    "chars": 5071,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "examples/src/main/java/org/jredis/examples/UsingJRedisPipelineService.java",
    "chars": 3486,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "examples/src/main/java/org/jredis/examples/UsingJRedisService.java",
    "chars": 3063,
    "preview": "///*\n// *   Copyright 2009 Joubin Houshyar\n// * \n// *   Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "examples/src/main/java/org/jredis/examples/commands/UsingBulkCommands.java",
    "chars": 5871,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "examples/src/main/java/org/jredis/examples/commands/UsingZrangeSubset.java",
    "chars": 6498,
    "preview": "/*\n *   Copyright 2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "examples/src/main/java/org/jredis/examples/commands/package-info.java",
    "chars": 787,
    "preview": "/*\n *   Copyright 2009 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n *   you"
  },
  {
    "path": "examples/src/main/resources/log4j.properties",
    "chars": 631,
    "preview": "# Configure logging for testing\nlog4j.rootLogger=INFO, stdout, logfile\n\nlog4j.appender.stdout=org.apache.log4j.ConsoleAp"
  },
  {
    "path": "extensions/3rd party Licenses/NET.SPY.MEMCACHED LICENSE",
    "chars": 1082,
    "preview": "Copyright (c) 2006-2009  Dustin Sallings <dustin@spy.net>\n\nPermission is hereby granted, free of charge, to any person o"
  },
  {
    "path": "extensions/3rd party Licenses/NET.SPY.MEMCACHED NOTICE",
    "chars": 1447,
    "preview": "NOTICE:\n\nPortions of the reference implementation libaray for JRedis/extensions uses\nverbatim and/or modified derivative"
  },
  {
    "path": "extensions/LICENSE",
    "chars": 11359,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "extensions/NOTICE",
    "chars": 295,
    "preview": "Copyright 2009-2012, Joubin Houshyar. \n\nAll parts of the original works in JReids are licensed under the \nApache License"
  },
  {
    "path": "extensions/README.markdown",
    "chars": 103,
    "preview": "# JRedis Extensions\n\nExtended functionality for [JRedis]\n\n[JRedis]: http://github.com/alphazero/jredis\n"
  },
  {
    "path": "extensions/api/LICENSE",
    "chars": 11359,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "extensions/api/NOTICE",
    "chars": 295,
    "preview": "Copyright 2009-2012, Joubin Houshyar. \n\nAll parts of the original works in JReids are licensed under the \nApache License"
  },
  {
    "path": "extensions/api/README.markdown",
    "chars": 125,
    "preview": "# API/Sepcifications of JRedis Extensions\n\nExtended functionality for [JRedis]\n\n[JRedis]: http://github.com/alphazero/jr"
  },
  {
    "path": "extensions/api/pom.xml",
    "chars": 1837,
    "preview": "<!-- ~/extensions/api/pom.xml -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/X"
  },
  {
    "path": "extensions/api/src/main/java/org/jredis/cluster/ClusterModel.java",
    "chars": 10058,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "extensions/api/src/main/java/org/jredis/cluster/ClusterNodeSpec.java",
    "chars": 5858,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "extensions/api/src/main/java/org/jredis/cluster/ClusterSpec.java",
    "chars": 6195,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "extensions/api/src/main/java/org/jredis/cluster/ClusterType.java",
    "chars": 872,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "extensions/api/src/main/java/org/jredis/cluster/connector/ClusterConnection.java",
    "chars": 3092,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "extensions/api/src/main/java/org/jredis/cluster/model/ConsistentHashCluster.java",
    "chars": 6307,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "extensions/api/src/main/java/org/jredis/cluster/model/StaticHashCluster.java",
    "chars": 4659,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "extensions/api/src/main/java/org/jredis/cluster/support/HashAlgorithm.java",
    "chars": 844,
    "preview": "/*\n *   Copyright 2009-2010 Joubin Houshyar\n * \n *   Licensed under the Apache License, Version 2.0 (the \"License\");\n * "
  },
  {
    "path": "extensions/pom.xml",
    "chars": 2239,
    "preview": "<!-- ~/extensions/pom.xml -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSc"
  },
  {
    "path": "extensions/ri/LICENSE",
    "chars": 11359,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "extensions/ri/NOTICE",
    "chars": 295,
    "preview": "Copyright 2009-2012, Joubin Houshyar. \n\nAll parts of the original works in JReids are licensed under the \nApache License"
  },
  {
    "path": "extensions/ri/README.markdown",
    "chars": 131,
    "preview": "# Reference implementation of JRedis Extensions\n\nExtended functionality for [JRedis]\n\n[JRedis]: http://github.com/alphaz"
  }
]

// ... and 41 more files (download for full content)

About this extraction

This page contains the full source code of the alphazero/jredis GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 241 files (1.2 MB), approximately 318.9k tokens, and a symbol index with 2018 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!