🚀 New Features
- Introduced JedisPooled
An alternative to JedisPool which implements the same interfaces as JedisCluster, allowing easy switching between JedisCluster and JedisPooled. - Introduced JedisSharding
- Introduced ClusterPipeline and ShardedPipeline
- Introduced ReliableTransaction
- Introduced UnifiedJedis
UnifiedJedis can be anything depending on theConnectionProvider
orCommandExecutor
. Currently, this is the base for JedisCluster, JedisPooled and JedisSharding. - Introduced ConnectionProvider interface and few implementations
- Introduced CommandExecutor interface and few implementations
- Added RedisJSON and RedisJSON 2 commands
- Added RediSearch commands
- Support exclusive range in XRANGE command (#2719)
- Added ACL DELUSER and ACL GENPASS with bits option (#2697)
🔥 Breaking Changes (see all)
- JedisCluster constructors with
GenericObjectPoolConfig<Jedis>
now acceptGenericObjectPoolConfig<Connection>
. - Most SortedSet methods are changed to return Java
List
instead ofSet
(#2709) See Full List - Many methods now return primitive values (long/boolean/double instead of Long/Boolean/Double) See Full List
- ShardedJedisPool, Sharded, ShardedJedis, BinaryShardedJedis, ShardInfo, JedisShardInfo classes are removed.
- BinaryJedis and BinaryJedisCluster classes are removed.
Methods of these classes are available in Jedis and JedisCluster classes respectively. - Client and BinaryClient classes are removed.
redis.clients.jedis.commands
package is reimplemented, meaning Commands interfaces are restructured.- Removed Sentinel class (#2744) (since 4.0.0-rc2)
Sentinel methods are moved in Jedis class (just like Jedis 3.x)
🧰 Maintenance
- Upgraded dependency
org.slf4j:slf4j-api
to version1.7.32
- Added dependency
org.json:json
version20211205
- Added dependency
com.google.code.gson:gson
version2.8.9
🚃 Change List
- Throw IllegalStateException by replacing invalid JedisDataException (#2393)
- Support Sentinel with TLS (#2403)
- Remove usage of infinite timeout from EVAL and EVALSHA commands (#2408)
- Avoid NullPointException from SetFromList class (#2454)
- JedisNoReachableClusterNodeException should extend JedisClusterOperationException (#2409)
- Remove WATCH from Transaction (#2033)
- JedisDataException should not be wrapped within Pool operations (#2501)
- Remove SYNC command (#2499)
- Remove ShardedJedisPipeline class (#2500)
- Remove JedisPoolAbstract class and hide Pool.initPool() method (#1734)
- Limit the access of setDataSource in Jedis (#2516)
- Make
raw
variable private and should be accessed via getRaw() method (#2526) - Remove throwing IOException from JedisSocketFactory (#2528)
- Remove JedisClusterHostAndPortMap (#2518)
- Unify clustered and non-clustered interfaces (#2533)
- CONFIG SET returns OK status (#2520)
- Return type should be
long
(or any primitive) (#2547) - Pool extends GenericObjectPool (#2521)
- Use Charset instead of String for Protocol.CHARSET (#2658)
- Jedis 4 changes (#2693)
- Improving ACL Command Support (#2697) (#2693)
- Return List instead of Set where it makes sense (#2709) (#2693)
- Implemented JedisSharding and ShardedPipeline (#2707) (#2693)
- Upgrade test dependencies (#2720)
- Support exclusive range in XRANGE command (#2683) (#2719)
- Throw exception if JedisCluster cannot connect to any host-port (#2275) (#2721)
- Address Javadoc warnings (and related changes) (#2730)
- Easier constructors for pipeline classes (#2731)
- Upgrade dependencies (#2740)
- Remove deprecations that got remained (#2741)
- Resolve XADD conflicts (#2742)
- Remove Sentinel class (#2744)
- Resource within cluster retry should be closed quietly (#2745)
- Replace deprecated interface with new interface in JedisPoolConfig and ConnectionPoolConfig (#2749)
- Use slf4j-simple to replace log4j implementation (#2753)
Contributors
We'd like to thank all the contributors who worked on this release!
@sazzad16, @yangbodong22011, @dengliming, @AvitalFineRedis, @JarvisCraft, @chinafzy, @zeekling, @chayim.