Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Offer a Redis extension #4453

Closed
emmanuelbernard opened this issue Oct 8, 2019 · 27 comments · Fixed by #9370
Closed

Offer a Redis extension #4453

emmanuelbernard opened this issue Oct 8, 2019 · 27 comments · Fixed by #9370
Assignees
Labels
kind/epic Large issue with links to sub-issues kind/extension-proposal Discuss and Propose new extensions

Comments

@emmanuelbernard
Copy link
Member

Describe the extension

Offer Redis client support via an extension

Interested in this extension, please +1 via the emoji/reaction feature of GitHub (top right).

Configuration suggestion

# Add your application.properties here, if applicable.
  • redis cluster
  • unername / password
  • ???

Additional context
(Add any other context about the proposal here.)

@emmanuelbernard emmanuelbernard added the kind/extension-proposal Discuss and Propose new extensions label Oct 8, 2019
@machi1990
Copy link
Member

Hi @emmanuelbernard I'll be interested to work on this :-)

@alfsch
Copy link

alfsch commented Oct 15, 2019

I've done some investigation on it. I tried to get Redisson working with quarkus and native compile --> failed.
After this i tried the lettuce redis driver and got this running also with native compile. Currently I'm using the implementation without an extension. An extension would be very helpful...

BR,

Alfred

@machi1990
Copy link
Member

Hi @emmanuelbernard I'll be interested to work on this :-)

I have been giving this a thought and here are some early ideas that I have: In terms of design, the quarkus-mailer client is an inspiration - so I am thinking of having an extensions which will offer a blocking redis-client, a reactive one, and a mocked one for tests (?).

I have been thinking to use https://lettuce.io as an underlying library. @emmanuelbernard @gsmet WDYT? Any other design ideas?

I may start experiment some ideas midweek.

@machi1990 machi1990 self-assigned this Oct 15, 2019
@alfsch
Copy link

alfsch commented Oct 15, 2019

During my experiments I got https://lettuce.io with following entries in dynamic-proxy-config.json

[
      ["io.lettuce.core.api.sync.RedisCommands","io.lettuce.core.cluster.api.sync.RedisClusterCommands"]
]

and following aditional entries to reflect-config.json

[
{
  "name":"io.lettuce.core.AbstractRedisAsyncCommands",
  "methods":[
    {"name":"append","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"asking","parameterTypes":[] }, 
    {"name":"auth","parameterTypes":["java.lang.String"] }, 
    {"name":"bgrewriteaof","parameterTypes":[] }, 
    {"name":"bgsave","parameterTypes":[] }, 
    {"name":"bitcount","parameterTypes":["java.lang.Object"] }, 
    {"name":"bitcount","parameterTypes":["java.lang.Object","long","long"] }, 
    {"name":"bitfield","parameterTypes":["java.lang.Object","io.lettuce.core.BitFieldArgs"] }, 
    {"name":"bitopAnd","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"bitopNot","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"bitopOr","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"bitopXor","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"bitpos","parameterTypes":["java.lang.Object","boolean"] }, 
    {"name":"bitpos","parameterTypes":["java.lang.Object","boolean","long"] }, 
    {"name":"bitpos","parameterTypes":["java.lang.Object","boolean","long","long"] }, 
    {"name":"blpop","parameterTypes":["long","java.lang.Object[]"] }, 
    {"name":"brpop","parameterTypes":["long","java.lang.Object[]"] }, 
    {"name":"brpoplpush","parameterTypes":["long","java.lang.Object","java.lang.Object"] }, 
    {"name":"bzpopmax","parameterTypes":["long","java.lang.Object[]"] }, 
    {"name":"bzpopmin","parameterTypes":["long","java.lang.Object[]"] }, 
    {"name":"clientGetname","parameterTypes":[] }, 
    {"name":"clientKill","parameterTypes":["io.lettuce.core.KillArgs"] }, 
    {"name":"clientKill","parameterTypes":["java.lang.String"] }, 
    {"name":"clientList","parameterTypes":[] }, 
    {"name":"clientPause","parameterTypes":["long"] }, 
    {"name":"clientSetname","parameterTypes":["java.lang.Object"] }, 
    {"name":"clientUnblock","parameterTypes":["long","io.lettuce.core.UnblockType"] }, 
    {"name":"clusterAddSlots","parameterTypes":["int[]"] }, 
    {"name":"clusterBumpepoch","parameterTypes":[] }, 
    {"name":"clusterCountFailureReports","parameterTypes":["java.lang.String"] }, 
    {"name":"clusterCountKeysInSlot","parameterTypes":["int"] }, 
    {"name":"clusterDelSlots","parameterTypes":["int[]"] }, 
    {"name":"clusterFailover","parameterTypes":["boolean"] }, 
    {"name":"clusterFlushslots","parameterTypes":[] }, 
    {"name":"clusterForget","parameterTypes":["java.lang.String"] }, 
    {"name":"clusterGetKeysInSlot","parameterTypes":["int","int"] }, 
    {"name":"clusterInfo","parameterTypes":[] }, 
    {"name":"clusterKeyslot","parameterTypes":["java.lang.Object"] }, 
    {"name":"clusterMeet","parameterTypes":["java.lang.String","int"] }, 
    {"name":"clusterMyId","parameterTypes":[] }, 
    {"name":"clusterNodes","parameterTypes":[] }, 
    {"name":"clusterReplicate","parameterTypes":["java.lang.String"] }, 
    {"name":"clusterReset","parameterTypes":["boolean"] }, 
    {"name":"clusterSaveconfig","parameterTypes":[] }, 
    {"name":"clusterSetConfigEpoch","parameterTypes":["long"] }, 
    {"name":"clusterSetSlotImporting","parameterTypes":["int","java.lang.String"] }, 
    {"name":"clusterSetSlotMigrating","parameterTypes":["int","java.lang.String"] }, 
    {"name":"clusterSetSlotNode","parameterTypes":["int","java.lang.String"] }, 
    {"name":"clusterSetSlotStable","parameterTypes":["int"] }, 
    {"name":"clusterSlaves","parameterTypes":["java.lang.String"] }, 
    {"name":"clusterSlots","parameterTypes":[] }, 
    {"name":"command","parameterTypes":[] }, 
    {"name":"commandCount","parameterTypes":[] }, 
    {"name":"commandInfo","parameterTypes":["io.lettuce.core.protocol.CommandType[]"] }, 
    {"name":"commandInfo","parameterTypes":["java.lang.String[]"] }, 
    {"name":"configGet","parameterTypes":["java.lang.String"] }, 
    {"name":"configResetstat","parameterTypes":[] }, 
    {"name":"configRewrite","parameterTypes":[] }, 
    {"name":"configSet","parameterTypes":["java.lang.String","java.lang.String"] }, 
    {"name":"dbsize","parameterTypes":[] }, 
    {"name":"debugCrashAndRecover","parameterTypes":["java.lang.Long"] }, 
    {"name":"debugHtstats","parameterTypes":["int"] }, 
    {"name":"debugObject","parameterTypes":["java.lang.Object"] }, 
    {"name":"debugOom","parameterTypes":[] }, 
    {"name":"debugReload","parameterTypes":[] }, 
    {"name":"debugRestart","parameterTypes":["java.lang.Long"] }, 
    {"name":"debugSdslen","parameterTypes":["java.lang.Object"] }, 
    {"name":"debugSegfault","parameterTypes":[] }, 
    {"name":"decr","parameterTypes":["java.lang.Object"] }, 
    {"name":"decrby","parameterTypes":["java.lang.Object","long"] }, 
    {"name":"del","parameterTypes":["java.lang.Object[]"] }, 
    {"name":"digest","parameterTypes":["java.lang.Object"] }, 
    {"name":"discard","parameterTypes":[] }, 
    {"name":"dispatch","parameterTypes":["io.lettuce.core.protocol.ProtocolKeyword","io.lettuce.core.output.CommandOutput"] }, 
    {"name":"dispatch","parameterTypes":["io.lettuce.core.protocol.ProtocolKeyword","io.lettuce.core.output.CommandOutput","io.lettuce.core.protocol.CommandArgs"] }, 
    {"name":"dump","parameterTypes":["java.lang.Object"] }, 
    {"name":"echo","parameterTypes":["java.lang.Object"] }, 
    {"name":"eval","parameterTypes":["java.lang.String","io.lettuce.core.ScriptOutputType","java.lang.Object[]"] }, 
    {"name":"eval","parameterTypes":["java.lang.String","io.lettuce.core.ScriptOutputType","java.lang.Object[]","java.lang.Object[]"] }, 
    {"name":"evalsha","parameterTypes":["java.lang.String","io.lettuce.core.ScriptOutputType","java.lang.Object[]"] }, 
    {"name":"evalsha","parameterTypes":["java.lang.String","io.lettuce.core.ScriptOutputType","java.lang.Object[]","java.lang.Object[]"] }, 
    {"name":"exec","parameterTypes":[] }, 
    {"name":"exists","parameterTypes":["java.lang.Object[]"] }, 
    {"name":"expire","parameterTypes":["java.lang.Object","long"] }, 
    {"name":"expireat","parameterTypes":["java.lang.Object","long"] }, 
    {"name":"expireat","parameterTypes":["java.lang.Object","java.util.Date"] }, 
    {"name":"flushall","parameterTypes":[] }, 
    {"name":"flushallAsync","parameterTypes":[] }, 
    {"name":"flushdb","parameterTypes":[] }, 
    {"name":"flushdbAsync","parameterTypes":[] }, 
    {"name":"geoadd","parameterTypes":["java.lang.Object","double","double","java.lang.Object"] }, 
    {"name":"geoadd","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"geodist","parameterTypes":["java.lang.Object","java.lang.Object","java.lang.Object","io.lettuce.core.GeoArgs$Unit"] }, 
    {"name":"geohash","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"geopos","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"georadius","parameterTypes":["java.lang.Object","double","double","double","io.lettuce.core.GeoArgs$Unit"] }, 
    {"name":"georadius","parameterTypes":["java.lang.Object","double","double","double","io.lettuce.core.GeoArgs$Unit","io.lettuce.core.GeoArgs"] }, 
    {"name":"georadius","parameterTypes":["java.lang.Object","double","double","double","io.lettuce.core.GeoArgs$Unit","io.lettuce.core.GeoRadiusStoreArgs"] }, 
    {"name":"georadiusbymember","parameterTypes":["java.lang.Object","java.lang.Object","double","io.lettuce.core.GeoArgs$Unit"] }, 
    {"name":"georadiusbymember","parameterTypes":["java.lang.Object","java.lang.Object","double","io.lettuce.core.GeoArgs$Unit","io.lettuce.core.GeoArgs"] }, 
    {"name":"georadiusbymember","parameterTypes":["java.lang.Object","java.lang.Object","double","io.lettuce.core.GeoArgs$Unit","io.lettuce.core.GeoRadiusStoreArgs"] }, 
    {"name":"get","parameterTypes":["java.lang.Object"] }, 
    {"name":"getbit","parameterTypes":["java.lang.Object","long"] }, 
    {"name":"getrange","parameterTypes":["java.lang.Object","long","long"] }, 
    {"name":"getset","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"hdel","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"hexists","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"hget","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"hgetall","parameterTypes":["io.lettuce.core.output.KeyValueStreamingChannel","java.lang.Object"] }, 
    {"name":"hgetall","parameterTypes":["java.lang.Object"] }, 
    {"name":"hincrby","parameterTypes":["java.lang.Object","java.lang.Object","long"] }, 
    {"name":"hincrbyfloat","parameterTypes":["java.lang.Object","java.lang.Object","double"] }, 
    {"name":"hkeys","parameterTypes":["io.lettuce.core.output.KeyStreamingChannel","java.lang.Object"] }, 
    {"name":"hkeys","parameterTypes":["java.lang.Object"] }, 
    {"name":"hlen","parameterTypes":["java.lang.Object"] }, 
    {"name":"hmget","parameterTypes":["io.lettuce.core.output.KeyValueStreamingChannel","java.lang.Object","java.lang.Object[]"] }, 
    {"name":"hmget","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"hmset","parameterTypes":["java.lang.Object","java.util.Map"] }, 
    {"name":"hscan","parameterTypes":["io.lettuce.core.output.KeyValueStreamingChannel","java.lang.Object"] }, 
    {"name":"hscan","parameterTypes":["io.lettuce.core.output.KeyValueStreamingChannel","java.lang.Object","io.lettuce.core.ScanArgs"] }, 
    {"name":"hscan","parameterTypes":["io.lettuce.core.output.KeyValueStreamingChannel","java.lang.Object","io.lettuce.core.ScanCursor"] }, 
    {"name":"hscan","parameterTypes":["io.lettuce.core.output.KeyValueStreamingChannel","java.lang.Object","io.lettuce.core.ScanCursor","io.lettuce.core.ScanArgs"] }, 
    {"name":"hscan","parameterTypes":["java.lang.Object"] }, 
    {"name":"hscan","parameterTypes":["java.lang.Object","io.lettuce.core.ScanArgs"] }, 
    {"name":"hscan","parameterTypes":["java.lang.Object","io.lettuce.core.ScanCursor"] }, 
    {"name":"hscan","parameterTypes":["java.lang.Object","io.lettuce.core.ScanCursor","io.lettuce.core.ScanArgs"] }, 
    {"name":"hset","parameterTypes":["java.lang.Object","java.lang.Object","java.lang.Object"] }, 
    {"name":"hsetnx","parameterTypes":["java.lang.Object","java.lang.Object","java.lang.Object"] }, 
    {"name":"hstrlen","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"hvals","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object"] }, 
    {"name":"hvals","parameterTypes":["java.lang.Object"] }, 
    {"name":"incr","parameterTypes":["java.lang.Object"] }, 
    {"name":"incrby","parameterTypes":["java.lang.Object","long"] }, 
    {"name":"incrbyfloat","parameterTypes":["java.lang.Object","double"] }, 
    {"name":"info","parameterTypes":[] }, 
    {"name":"info","parameterTypes":["java.lang.String"] }, 
    {"name":"isOpen","parameterTypes":[] }, 
    {"name":"keys","parameterTypes":["io.lettuce.core.output.KeyStreamingChannel","java.lang.Object"] }, 
    {"name":"keys","parameterTypes":["java.lang.Object"] }, 
    {"name":"lastsave","parameterTypes":[] }, 
    {"name":"lindex","parameterTypes":["java.lang.Object","long"] }, 
    {"name":"linsert","parameterTypes":["java.lang.Object","boolean","java.lang.Object","java.lang.Object"] }, 
    {"name":"llen","parameterTypes":["java.lang.Object"] }, 
    {"name":"lpop","parameterTypes":["java.lang.Object"] }, 
    {"name":"lpush","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"lpushx","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"lrange","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","long","long"] }, 
    {"name":"lrange","parameterTypes":["java.lang.Object","long","long"] }, 
    {"name":"lrem","parameterTypes":["java.lang.Object","long","java.lang.Object"] }, 
    {"name":"lset","parameterTypes":["java.lang.Object","long","java.lang.Object"] }, 
    {"name":"ltrim","parameterTypes":["java.lang.Object","long","long"] }, 
    {"name":"mget","parameterTypes":["io.lettuce.core.output.KeyValueStreamingChannel","java.lang.Object[]"] }, 
    {"name":"mget","parameterTypes":["java.lang.Object[]"] }, 
    {"name":"migrate","parameterTypes":["java.lang.String","int","int","long","io.lettuce.core.MigrateArgs"] }, 
    {"name":"migrate","parameterTypes":["java.lang.String","int","java.lang.Object","int","long"] }, 
    {"name":"move","parameterTypes":["java.lang.Object","int"] }, 
    {"name":"mset","parameterTypes":["java.util.Map"] }, 
    {"name":"msetnx","parameterTypes":["java.util.Map"] }, 
    {"name":"multi","parameterTypes":[] }, 
    {"name":"objectEncoding","parameterTypes":["java.lang.Object"] }, 
    {"name":"objectIdletime","parameterTypes":["java.lang.Object"] }, 
    {"name":"objectRefcount","parameterTypes":["java.lang.Object"] }, 
    {"name":"persist","parameterTypes":["java.lang.Object"] }, 
    {"name":"pexpire","parameterTypes":["java.lang.Object","long"] }, 
    {"name":"pexpireat","parameterTypes":["java.lang.Object","long"] }, 
    {"name":"pexpireat","parameterTypes":["java.lang.Object","java.util.Date"] }, 
    {"name":"pfadd","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"pfcount","parameterTypes":["java.lang.Object[]"] }, 
    {"name":"pfmerge","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"ping","parameterTypes":[] }, 
    {"name":"psetex","parameterTypes":["java.lang.Object","long","java.lang.Object"] }, 
    {"name":"pttl","parameterTypes":["java.lang.Object"] }, 
    {"name":"publish","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"pubsubChannels","parameterTypes":[] }, 
    {"name":"pubsubChannels","parameterTypes":["java.lang.Object"] }, 
    {"name":"pubsubNumpat","parameterTypes":[] }, 
    {"name":"pubsubNumsub","parameterTypes":["java.lang.Object[]"] }, 
    {"name":"quit","parameterTypes":[] }, 
    {"name":"randomkey","parameterTypes":[] }, 
    {"name":"readOnly","parameterTypes":[] }, 
    {"name":"readWrite","parameterTypes":[] }, 
    {"name":"rename","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"renamenx","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"reset","parameterTypes":[] }, 
    {"name":"restore","parameterTypes":["java.lang.Object","long","byte[]"] }, 
    {"name":"restore","parameterTypes":["java.lang.Object","byte[]","io.lettuce.core.RestoreArgs"] }, 
    {"name":"role","parameterTypes":[] }, 
    {"name":"rpop","parameterTypes":["java.lang.Object"] }, 
    {"name":"rpoplpush","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"rpush","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"rpushx","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"sadd","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"save","parameterTypes":[] }, 
    {"name":"scan","parameterTypes":[] }, 
    {"name":"scan","parameterTypes":["io.lettuce.core.ScanArgs"] }, 
    {"name":"scan","parameterTypes":["io.lettuce.core.ScanCursor"] }, 
    {"name":"scan","parameterTypes":["io.lettuce.core.ScanCursor","io.lettuce.core.ScanArgs"] }, 
    {"name":"scan","parameterTypes":["io.lettuce.core.output.KeyStreamingChannel"] }, 
    {"name":"scan","parameterTypes":["io.lettuce.core.output.KeyStreamingChannel","io.lettuce.core.ScanArgs"] }, 
    {"name":"scan","parameterTypes":["io.lettuce.core.output.KeyStreamingChannel","io.lettuce.core.ScanCursor"] }, 
    {"name":"scan","parameterTypes":["io.lettuce.core.output.KeyStreamingChannel","io.lettuce.core.ScanCursor","io.lettuce.core.ScanArgs"] }, 
    {"name":"scard","parameterTypes":["java.lang.Object"] }, 
    {"name":"scriptExists","parameterTypes":["java.lang.String[]"] }, 
    {"name":"scriptFlush","parameterTypes":[] }, 
    {"name":"scriptKill","parameterTypes":[] }, 
    {"name":"scriptLoad","parameterTypes":["java.lang.Object"] }, 
    {"name":"sdiff","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object[]"] }, 
    {"name":"sdiff","parameterTypes":["java.lang.Object[]"] }, 
    {"name":"sdiffstore","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"select","parameterTypes":["int"] }, 
    {"name":"set","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"set","parameterTypes":["java.lang.Object","java.lang.Object","io.lettuce.core.SetArgs"] }, 
    {"name":"setTimeout","parameterTypes":["long","java.util.concurrent.TimeUnit"] }, 
    {"name":"setTimeout","parameterTypes":["java.time.Duration"] }, 
    {"name":"setbit","parameterTypes":["java.lang.Object","long","int"] }, 
    {"name":"setex","parameterTypes":["java.lang.Object","long","java.lang.Object"] }, 
    {"name":"setnx","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"setrange","parameterTypes":["java.lang.Object","long","java.lang.Object"] }, 
    {"name":"shutdown","parameterTypes":["boolean"] }, 
    {"name":"sinter","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object[]"] }, 
    {"name":"sinter","parameterTypes":["java.lang.Object[]"] }, 
    {"name":"sinterstore","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"sismember","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"slaveof","parameterTypes":["java.lang.String","int"] }, 
    {"name":"slaveofNoOne","parameterTypes":[] }, 
    {"name":"slowlogGet","parameterTypes":[] }, 
    {"name":"slowlogGet","parameterTypes":["int"] }, 
    {"name":"slowlogLen","parameterTypes":[] }, 
    {"name":"slowlogReset","parameterTypes":[] }, 
    {"name":"smembers","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object"] }, 
    {"name":"smembers","parameterTypes":["java.lang.Object"] }, 
    {"name":"smove","parameterTypes":["java.lang.Object","java.lang.Object","java.lang.Object"] }, 
    {"name":"sort","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object"] }, 
    {"name":"sort","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","io.lettuce.core.SortArgs"] }, 
    {"name":"sort","parameterTypes":["java.lang.Object"] }, 
    {"name":"sort","parameterTypes":["java.lang.Object","io.lettuce.core.SortArgs"] }, 
    {"name":"sortStore","parameterTypes":["java.lang.Object","io.lettuce.core.SortArgs","java.lang.Object"] }, 
    {"name":"spop","parameterTypes":["java.lang.Object"] }, 
    {"name":"spop","parameterTypes":["java.lang.Object","long"] }, 
    {"name":"srandmember","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","long"] }, 
    {"name":"srandmember","parameterTypes":["java.lang.Object"] }, 
    {"name":"srandmember","parameterTypes":["java.lang.Object","long"] }, 
    {"name":"srem","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"sscan","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object"] }, 
    {"name":"sscan","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","io.lettuce.core.ScanArgs"] }, 
    {"name":"sscan","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","io.lettuce.core.ScanCursor"] }, 
    {"name":"sscan","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","io.lettuce.core.ScanCursor","io.lettuce.core.ScanArgs"] }, 
    {"name":"sscan","parameterTypes":["java.lang.Object"] }, 
    {"name":"sscan","parameterTypes":["java.lang.Object","io.lettuce.core.ScanArgs"] }, 
    {"name":"sscan","parameterTypes":["java.lang.Object","io.lettuce.core.ScanCursor"] }, 
    {"name":"sscan","parameterTypes":["java.lang.Object","io.lettuce.core.ScanCursor","io.lettuce.core.ScanArgs"] }, 
    {"name":"strlen","parameterTypes":["java.lang.Object"] }, 
    {"name":"sunion","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object[]"] }, 
    {"name":"sunion","parameterTypes":["java.lang.Object[]"] }, 
    {"name":"sunionstore","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"swapdb","parameterTypes":["int","int"] }, 
    {"name":"time","parameterTypes":[] }, 
    {"name":"touch","parameterTypes":["java.lang.Object[]"] }, 
    {"name":"ttl","parameterTypes":["java.lang.Object"] }, 
    {"name":"type","parameterTypes":["java.lang.Object"] }, 
    {"name":"unlink","parameterTypes":["java.lang.Object[]"] }, 
    {"name":"unwatch","parameterTypes":[] }, 
    {"name":"waitForReplication","parameterTypes":["int","long"] }, 
    {"name":"watch","parameterTypes":["java.lang.Object[]"] }, 
    {"name":"xack","parameterTypes":["java.lang.Object","java.lang.Object","java.lang.String[]"] }, 
    {"name":"xadd","parameterTypes":["java.lang.Object","io.lettuce.core.XAddArgs","java.util.Map"] }, 
    {"name":"xadd","parameterTypes":["java.lang.Object","io.lettuce.core.XAddArgs","java.lang.Object[]"] }, 
    {"name":"xadd","parameterTypes":["java.lang.Object","java.util.Map"] }, 
    {"name":"xadd","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"xclaim","parameterTypes":["java.lang.Object","io.lettuce.core.Consumer","long","java.lang.String[]"] }, 
    {"name":"xclaim","parameterTypes":["java.lang.Object","io.lettuce.core.Consumer","io.lettuce.core.XClaimArgs","java.lang.String[]"] }, 
    {"name":"xdel","parameterTypes":["java.lang.Object","java.lang.String[]"] }, 
    {"name":"xgroupCreate","parameterTypes":["io.lettuce.core.XReadArgs$StreamOffset","java.lang.Object"] }, 
    {"name":"xgroupDelconsumer","parameterTypes":["java.lang.Object","io.lettuce.core.Consumer"] }, 
    {"name":"xgroupDestroy","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"xgroupSetid","parameterTypes":["io.lettuce.core.XReadArgs$StreamOffset","java.lang.Object"] }, 
    {"name":"xlen","parameterTypes":["java.lang.Object"] }, 
    {"name":"xpending","parameterTypes":["java.lang.Object","io.lettuce.core.Consumer","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"xpending","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"xpending","parameterTypes":["java.lang.Object","java.lang.Object","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"xrange","parameterTypes":["java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"xrange","parameterTypes":["java.lang.Object","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"xread","parameterTypes":["io.lettuce.core.XReadArgs","io.lettuce.core.XReadArgs$StreamOffset[]"] }, 
    {"name":"xread","parameterTypes":["io.lettuce.core.XReadArgs$StreamOffset[]"] }, 
    {"name":"xreadgroup","parameterTypes":["io.lettuce.core.Consumer","io.lettuce.core.XReadArgs","io.lettuce.core.XReadArgs$StreamOffset[]"] }, 
    {"name":"xreadgroup","parameterTypes":["io.lettuce.core.Consumer","io.lettuce.core.XReadArgs$StreamOffset[]"] }, 
    {"name":"xrevrange","parameterTypes":["java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"xrevrange","parameterTypes":["java.lang.Object","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"xtrim","parameterTypes":["java.lang.Object","long"] }, 
    {"name":"xtrim","parameterTypes":["java.lang.Object","boolean","long"] }, 
    {"name":"zadd","parameterTypes":["java.lang.Object","double","java.lang.Object"] }, 
    {"name":"zadd","parameterTypes":["java.lang.Object","io.lettuce.core.ZAddArgs","double","java.lang.Object"] }, 
    {"name":"zadd","parameterTypes":["java.lang.Object","io.lettuce.core.ZAddArgs","io.lettuce.core.ScoredValue[]"] }, 
    {"name":"zadd","parameterTypes":["java.lang.Object","io.lettuce.core.ZAddArgs","java.lang.Object[]"] }, 
    {"name":"zadd","parameterTypes":["java.lang.Object","io.lettuce.core.ScoredValue[]"] }, 
    {"name":"zadd","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"zaddincr","parameterTypes":["java.lang.Object","double","java.lang.Object"] }, 
    {"name":"zaddincr","parameterTypes":["java.lang.Object","io.lettuce.core.ZAddArgs","double","java.lang.Object"] }, 
    {"name":"zcard","parameterTypes":["java.lang.Object"] }, 
    {"name":"zcount","parameterTypes":["java.lang.Object","double","double"] }, 
    {"name":"zcount","parameterTypes":["java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zcount","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String"] }, 
    {"name":"zincrby","parameterTypes":["java.lang.Object","double","java.lang.Object"] }, 
    {"name":"zinterstore","parameterTypes":["java.lang.Object","io.lettuce.core.ZStoreArgs","java.lang.Object[]"] }, 
    {"name":"zinterstore","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"zlexcount","parameterTypes":["java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zlexcount","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String"] }, 
    {"name":"zpopmax","parameterTypes":["java.lang.Object"] }, 
    {"name":"zpopmax","parameterTypes":["java.lang.Object","long"] }, 
    {"name":"zpopmin","parameterTypes":["java.lang.Object"] }, 
    {"name":"zpopmin","parameterTypes":["java.lang.Object","long"] }, 
    {"name":"zrange","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","long","long"] }, 
    {"name":"zrange","parameterTypes":["java.lang.Object","long","long"] }, 
    {"name":"zrangeWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","long","long"] }, 
    {"name":"zrangeWithScores","parameterTypes":["java.lang.Object","long","long"] }, 
    {"name":"zrangebylex","parameterTypes":["java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zrangebylex","parameterTypes":["java.lang.Object","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"zrangebylex","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String"] }, 
    {"name":"zrangebylex","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String","long","long"] }, 
    {"name":"zrangebyscore","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","double","double"] }, 
    {"name":"zrangebyscore","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","double","double","long","long"] }, 
    {"name":"zrangebyscore","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zrangebyscore","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"zrangebyscore","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","java.lang.String","java.lang.String"] }, 
    {"name":"zrangebyscore","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","java.lang.String","java.lang.String","long","long"] }, 
    {"name":"zrangebyscore","parameterTypes":["java.lang.Object","double","double"] }, 
    {"name":"zrangebyscore","parameterTypes":["java.lang.Object","double","double","long","long"] }, 
    {"name":"zrangebyscore","parameterTypes":["java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zrangebyscore","parameterTypes":["java.lang.Object","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"zrangebyscore","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String"] }, 
    {"name":"zrangebyscore","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String","long","long"] }, 
    {"name":"zrangebyscoreWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","double","double"] }, 
    {"name":"zrangebyscoreWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","double","double","long","long"] }, 
    {"name":"zrangebyscoreWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zrangebyscoreWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"zrangebyscoreWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","java.lang.String","java.lang.String"] }, 
    {"name":"zrangebyscoreWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","java.lang.String","java.lang.String","long","long"] }, 
    {"name":"zrangebyscoreWithScores","parameterTypes":["java.lang.Object","double","double"] }, 
    {"name":"zrangebyscoreWithScores","parameterTypes":["java.lang.Object","double","double","long","long"] }, 
    {"name":"zrangebyscoreWithScores","parameterTypes":["java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zrangebyscoreWithScores","parameterTypes":["java.lang.Object","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"zrangebyscoreWithScores","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String"] }, 
    {"name":"zrangebyscoreWithScores","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String","long","long"] }, 
    {"name":"zrank","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"zrem","parameterTypes":["java.lang.Object","java.lang.Object[]"] }, 
    {"name":"zremrangebylex","parameterTypes":["java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zremrangebylex","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String"] }, 
    {"name":"zremrangebyrank","parameterTypes":["java.lang.Object","long","long"] }, 
    {"name":"zremrangebyscore","parameterTypes":["java.lang.Object","double","double"] }, 
    {"name":"zremrangebyscore","parameterTypes":["java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zremrangebyscore","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String"] }, 
    {"name":"zrevrange","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","long","long"] }, 
    {"name":"zrevrange","parameterTypes":["java.lang.Object","long","long"] }, 
    {"name":"zrevrangeWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","long","long"] }, 
    {"name":"zrevrangeWithScores","parameterTypes":["java.lang.Object","long","long"] }, 
    {"name":"zrevrangebylex","parameterTypes":["java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zrevrangebylex","parameterTypes":["java.lang.Object","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"zrevrangebyscore","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","double","double"] }, 
    {"name":"zrevrangebyscore","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","double","double","long","long"] }, 
    {"name":"zrevrangebyscore","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zrevrangebyscore","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"zrevrangebyscore","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","java.lang.String","java.lang.String"] }, 
    {"name":"zrevrangebyscore","parameterTypes":["io.lettuce.core.output.ValueStreamingChannel","java.lang.Object","java.lang.String","java.lang.String","long","long"] }, 
    {"name":"zrevrangebyscore","parameterTypes":["java.lang.Object","double","double"] }, 
    {"name":"zrevrangebyscore","parameterTypes":["java.lang.Object","double","double","long","long"] }, 
    {"name":"zrevrangebyscore","parameterTypes":["java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zrevrangebyscore","parameterTypes":["java.lang.Object","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"zrevrangebyscore","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String"] }, 
    {"name":"zrevrangebyscore","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String","long","long"] }, 
    {"name":"zrevrangebyscoreWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","double","double"] }, 
    {"name":"zrevrangebyscoreWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","double","double","long","long"] }, 
    {"name":"zrevrangebyscoreWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zrevrangebyscoreWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"zrevrangebyscoreWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","java.lang.String","java.lang.String"] }, 
    {"name":"zrevrangebyscoreWithScores","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","java.lang.String","java.lang.String","long","long"] }, 
    {"name":"zrevrangebyscoreWithScores","parameterTypes":["java.lang.Object","double","double"] }, 
    {"name":"zrevrangebyscoreWithScores","parameterTypes":["java.lang.Object","double","double","long","long"] }, 
    {"name":"zrevrangebyscoreWithScores","parameterTypes":["java.lang.Object","io.lettuce.core.Range"] }, 
    {"name":"zrevrangebyscoreWithScores","parameterTypes":["java.lang.Object","io.lettuce.core.Range","io.lettuce.core.Limit"] }, 
    {"name":"zrevrangebyscoreWithScores","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String"] }, 
    {"name":"zrevrangebyscoreWithScores","parameterTypes":["java.lang.Object","java.lang.String","java.lang.String","long","long"] }, 
    {"name":"zrevrank","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"zscan","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object"] }, 
    {"name":"zscan","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","io.lettuce.core.ScanArgs"] }, 
    {"name":"zscan","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","io.lettuce.core.ScanCursor"] }, 
    {"name":"zscan","parameterTypes":["io.lettuce.core.output.ScoredValueStreamingChannel","java.lang.Object","io.lettuce.core.ScanCursor","io.lettuce.core.ScanArgs"] }, 
    {"name":"zscan","parameterTypes":["java.lang.Object"] }, 
    {"name":"zscan","parameterTypes":["java.lang.Object","io.lettuce.core.ScanArgs"] }, 
    {"name":"zscan","parameterTypes":["java.lang.Object","io.lettuce.core.ScanCursor"] }, 
    {"name":"zscan","parameterTypes":["java.lang.Object","io.lettuce.core.ScanCursor","io.lettuce.core.ScanArgs"] }, 
    {"name":"zscore","parameterTypes":["java.lang.Object","java.lang.Object"] }, 
    {"name":"zunionstore","parameterTypes":["java.lang.Object","io.lettuce.core.ZStoreArgs","java.lang.Object[]"] }, 
    {"name":"zunionstore","parameterTypes":["java.lang.Object","java.lang.Object[]"] }
  ]
},
{
  "name":"io.lettuce.core.RedisAsyncCommandsImpl",
  "methods":[{"name":"getStatefulConnection","parameterTypes":[] }]
},
{
  "name":"io.lettuce.core.api.sync.BaseRedisCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.api.sync.RedisCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.api.sync.RedisGeoCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.api.sync.RedisHLLCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.api.sync.RedisHashCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.api.sync.RedisKeyCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.api.sync.RedisListCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.api.sync.RedisScriptingCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.api.sync.RedisServerCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.api.sync.RedisSetCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.api.sync.RedisSortedSetCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.api.sync.RedisStreamCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.api.sync.RedisStringCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.api.sync.RedisTransactionalCommands",
  "allDeclaredMethods":true
},
{
  "name":"io.lettuce.core.cluster.api.sync.RedisClusterCommands",
  "allDeclaredMethods":true
},

...

working with native compile.

BR,

Alfred

@machi1990
Copy link
Member

@alfsch Yes, I suspect we’ll have to register some classes for reflection for things to work out of the box in native image. The extension will handle all that and more (CDI, configuration) as I suggested.

@emmanuelbernard
Copy link
Member Author

Hi @emmanuelbernard I'll be interested to work on this :-)

I have been giving this a thought and here are some early ideas that I have: In terms of design, the quarkus-mailer client is an inspiration - so I am thinking of having an extensions which will offer a blocking redis-client, a reactive one, and a mocked one for tests (?).

I have been thinking to use https://lettuce.io as an underlying library. @emmanuelbernard @gsmet WDYT? Any other design ideas?

I may start experiment some ideas midweek.

I have not dived but this sounds good.

@machi1990 machi1990 mentioned this issue Oct 25, 2019
8 tasks
@machi1990
Copy link
Member

I have opened a PR here #4882, chim in and give your feedback.

@gsmet gsmet changed the title Offer a Redis exension Offer a Redis extension Nov 18, 2019
@paulrobinson paulrobinson added the kind/epic Large issue with links to sub-issues label Nov 21, 2019
@paulrobinson paulrobinson added this to Backlog in General Roadmap (deprecated) via automation Nov 21, 2019
@paulrobinson paulrobinson moved this from Backlog to In Progress in General Roadmap (deprecated) Nov 21, 2019
@emmanuelbernard emmanuelbernard moved this from In Progress to Backlog in General Roadmap (deprecated) Nov 21, 2019
@emmanuelbernard emmanuelbernard moved this from Backlog to Planned in General Roadmap (deprecated) Nov 22, 2019
@andreas-eberle
Copy link
Contributor

Since the PR of @machi1990 has been closed again: Is there any progress on this extension?

Or maybe, can someone (@pmlopes?) outline how one would use the vert.x redis client with quarkus (including native builds)?

Thanks + BR

@pmlopes
Copy link
Contributor

pmlopes commented Jan 6, 2020

@andreas-eberle I don't have experience with writing extensions, what I can say is that if you create a bean injecting the vertx instance you can use the vertx api. Since the vertx redis client uses no reflection or features incompatible with graalvm native images it will work on native too.

Be aware that redis has been total rewrote for 4.0 and that's where all features, sentinel/cluster support exists.

@machi1990
Copy link
Member

Hi @andreas-eberle @pmlopes I'll work on this extension and be able to make progress on it once I am back from vacations (in a week time from now).

@emmanuelbernard
Copy link
Member Author

Hey @machi1990 I am planning the roadmap for the next 3-6 months, do you feel you will achieve this by then?

@emmanuelbernard emmanuelbernard moved this from Planned to Being triaged (drop or maintain) in General Roadmap (deprecated) Mar 24, 2020
@machi1990
Copy link
Member

Hey @emmanuelbernard , we'd need a 4.0 Vertx release to be able to offer cluster support if I am not mistaken cc @pmlopes

Otherwise I have all the ground work here master...machi1990:feat/vertx-redis-extension

@pmlopes
Copy link
Contributor

pmlopes commented Mar 24, 2020

The 4.0 client has been backported to 3.9.0 so when a 3.9 release happens all new features will be available.

@machi1990
Copy link
Member

@pmlopes Good to know, do we know when that would be?

@emmanuelbernard
Copy link
Member Author

@cescoffier @vietj do you see Vert.x 3.9.x be used in a Quarkus release in the next 3-6 months? I assume yes so @machi1990 that could be a reasonable expectation

@emmanuelbernard emmanuelbernard moved this from Being triaged (drop or maintain) to Backlog in General Roadmap (deprecated) Mar 24, 2020
@machi1990
Copy link
Member

Yes, it is a very reasonable expectation. Let's set the target on that timeline.

machi1990 added a commit to machi1990/quarkus that referenced this issue Apr 4, 2020
Creates a vertx redis extension that provides a sync redis client, an asynchronous one based on axle and a reactive one based on mutiny.

fixes quarkusio#4453
machi1990 added a commit to machi1990/quarkus that referenced this issue Apr 4, 2020
Creates a vertx redis extension that provides a synchronous redis client, and a reactive one based on mutiny.

fixes quarkusio#4453
machi1990 added a commit to machi1990/quarkus that referenced this issue Apr 10, 2020
Creates a vertx redis extension that provides a synchronous redis client, and a reactive one based on mutiny.

fixes quarkusio#4453
@emmanuelbernard
Copy link
Member Author

Hey @machi1990, when do you expect this to land in master? End of june, end of july, end of... Trying to assign it to a version but with flexibility to move out as needed.

@machi1990
Copy link
Member

Hey @emmanuelbernard, I have opened a PR #9370 which is current under review. As for the version, we can aim for 1.6, which should be end of June (If my timing is okay).

@emmanuelbernard emmanuelbernard moved this from Backlog to 1.6 plan - Early July in General Roadmap (deprecated) May 26, 2020
machi1990 added a commit to machi1990/quarkus that referenced this issue May 30, 2020
Creates a vertx redis extension that provides different flavours of RedisAPI.

fixes quarkusio#4453
machi1990 added a commit to machi1990/quarkus that referenced this issue Jun 2, 2020
Creates a vertx redis extension that provides different flavours of RedisAPI.

fixes quarkusio#4453
machi1990 added a commit to machi1990/quarkus that referenced this issue Jun 19, 2020
Creates a vertx redis extension that provides different flavours of RedisAPI.

fixes quarkusio#4453
machi1990 added a commit to machi1990/quarkus that referenced this issue Jun 19, 2020
Creates a vertx redis extension that provides different flavours of RedisAPI.

fixes quarkusio#4453
machi1990 added a commit to machi1990/quarkus that referenced this issue Jun 23, 2020
Creates a vertx redis extension that provides different flavours of RedisAPI.

fixes quarkusio#4453
@emmanuelbernard emmanuelbernard moved this from 1.6 plan - Early July to 1.6 done - Early July in General Roadmap (deprecated) Jul 1, 2020
@stefanorg
Copy link

💯 👍

machi1990 added a commit to machi1990/quarkus that referenced this issue Jul 1, 2020
Creates a vertx redis extension that provides different flavours of RedisAPI.

fixes quarkusio#4453
machi1990 added a commit to machi1990/quarkus that referenced this issue Jul 3, 2020
Creates a redis-client extension that provides different flavours of
redis clients:
Imperative and Reactive client.

Fixes quarkusio#4453
machi1990 added a commit to machi1990/quarkus that referenced this issue Jul 4, 2020
Creates a redis-client extension that provides different flavours of
redis clients:
Imperative and Reactive client.

Fixes quarkusio#4453
@stevenhailin
Copy link

@machi1990 Thanks for your great work! One additional question is: how to config the connection pool for the redis client?

@machi1990
Copy link
Member

@stevenhailin thank you!

@machi1990 One additional question is: how to config the connection pool for the redis client?

The initial version of the extension will use the default options, we'll be adding advanced configuration options gradually. I'll open up a followup PR to allow configuring connection pool.

@xtaixe
Copy link

xtaixe commented Aug 24, 2020

@machi1990 Thanks for this extension!

Can multiple redis clients be configured similar to https://quarkus.io/guides/datasource#multiple-datasources? If not, are there any plans to support this or should I create an issue?

Thanks!

@machi1990
Copy link
Member

@machi1990 Thanks for this extension!

Can multiple redis clients be configured similar to https://quarkus.io/guides/datasource#multiple-datasources? If not, are there any plans to support this or should I create an issue?

Thanks!

Hi @xtaixe , this is not supported yet. Thanks for opening an issue for that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/epic Large issue with links to sub-issues kind/extension-proposal Discuss and Propose new extensions
Projects
No open projects
General Roadmap (deprecated)
1.6 done - Early July
Development

Successfully merging a pull request may close this issue.

10 participants