by

Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jun 05 13:37
    karlismelderis opened #1148
  • Jun 05 12:20
    saurabh0227 opened #1147
  • Jun 05 09:46
    kapalkat edited #1146
  • Jun 05 09:26
    akoufa commented #1145
  • Jun 05 09:26
    akoufa commented #1145
  • Jun 05 09:24
    akoufa commented #1145
  • Jun 05 09:20
    kapalkat edited #1146
  • Jun 05 09:20
    kapalkat edited #1146
  • Jun 05 09:19
    kapalkat opened #1146
  • Jun 05 09:04
    akoufa opened #1145
  • Jun 04 15:46
    jitenderchand opened #1144
  • Jun 04 15:12
    jeremychone commented #1053
  • Jun 04 12:32
    kapalkat commented #556
  • Jun 04 01:45
    jeremychone commented #1053
  • Jun 03 19:49
    naseemkullah commented #1131
  • Jun 03 19:20
    naseemkullah commented #1131
  • Jun 03 17:34
    ajinkyarajput commented #1059
  • Jun 03 17:12
    benblack86 opened #1143
  • Jun 03 15:25
    naseemkullah commented #1131
  • Jun 03 15:24
    naseemkullah commented #1131
Eric Eastwood
@MadLittleMods
@thavlik Link it so future onlookers can benefit
Thomas Havlik
@thavlik
"Running commands to multiple nodes" found on https://www.npmjs.com/package/ioredis
For those curious, this seems to work for me right now:
Thomas Havlik
@thavlik
const pattern = `{${from}}:*`;
        const slot = await redis.cluster("keyslot", pattern);
        let [host, port] = (redis as any).slots[slot][0].split(":");
        port = Number.parseInt(port);
        const master = redis.nodes("master").find((node: any) => node.stream.remoteAddress === host && node.stream.remotePort === port);
        const keys = await master.keys(pattern); // works
Thomas Havlik
@thavlik
If I'm running a cluster and want pub/sub, does the subscriber need to be connected to the entire cluster as well or just one node?
Ah, node specification is only for initial discovery :) so it is good to specify the whole cluster; the number of concurrent connections to each client is invariant of cluster size
Jason Shin
@JasonShin
hey guys, after setting a key with an expiry date using ioredis, how do you create an event to listen for the key expiry?
Christian Roy
@roychri
You have to enable the events and then use pubsub to be notified. Details on that link
Jason Shin
@JasonShin
is it like
  • enable the notification
  • redis.subscribe('EXPIRE', () => {})
Christian Roy
@roychri
Something like that, but it's not on EXPIRE that you will subscribe, but something like :__keyevent@0__:expire where 0 is the db. And the value you will get in the messag will be the name of the key that expire.
Jason Shin
@JasonShin
ok cool
thanks
do you know how to enable Redis Keyspace Notifications using https://hub.docker.com/_/redis?
Christian Roy
@roychri
Docker!!! :heart_eyes_cat: sure, one sec.
Jason Shin
@JasonShin
=)
thank you so much~~
Christian Roy
@roychri
You mount your own redis.conf file (volume) and you change the CMD to pass that config file.
Go down to "Additionally, If you want to use your own redis.conf" on that link you just gave me for an example.
notify-keyspace-events xK to only enable expired events
I found this
do you just include that line in the file
and mount it?
Christian Roy
@roychri
If you use that image (and not the one you first showed me) then yes.
But that image is not the official image
If you use the official image, just make an empty file with that one line, mount it and change CMD to use your file
OR, you could also enable it by your app
once connected send CONFIG SET notify-keyspace-events xK
and that will enable it
without having to mount any file
Jason Shin
@JasonShin
yeah right
i chose the config mount approach
but having a problem
Christian Roy
@roychri
This is a docker discussion, not an ioredis discussion... mind to continue this in docker/docker room?
Jason Shin
@JasonShin

I've mounted redis.conf to /usr/local/etc/redis/redis.conf

and it contains notify-keyspace-events Ex

Code:

redis.set('test', 12, 'EX', 1);
console.log(await redis.get('test')); // return 12
redis.subscribe('__keyevent@0__:expire', (x, y, c, v, b) => {
    console.log('zz', x, y, c, v, b);
});

The console.log return zz null 1 undefined undefined undefined for the first time then errors

error: Connection in subscriber mode, only subscriber commands may be used
error: Error: Connection in subscriber mode, only subscriber commands may be used
sorry this is more of an ioredis question I believe
Christian Roy
@roychri
oh, yes it is. sorry.
So the error message says it.
You cannot use "subscribe" on the same connection that you use other commands.
Make a new connection for your subscribe.
redisSubscribe = new Redis();
or whatever
Jason Shin
@JasonShin
ahh right
Jason Shin
@JasonShin
hey @roychri I still do not receive any subscribe event for the key expire
what's wrong with above code?
Creating a new instance as redisSubscriber resolved the connection issue
however, there's no expire events received in the subscribe block
Christian Roy
@roychri
Are you using docker run or docker-compose or something else?
Jason Shin
@JasonShin
I'm using docker compose
Christian Roy
@roychri
docker-compose exec redis-master redis-cli config get notify-keyspace-events
Replace redis-master with the name of the redis service in your compose file. What do you get?