修改Redis订阅键带来巨大变化(redis订阅键被修改)

Redis是一个开源的高性能键值对存储系统。它支持字符串、哈希、列表、集合、有序集合等数据类型,并支持多种操作。Redis使用发布订阅机制,可以让客户端订阅一个或多个频道来接收消息。在Redis发布订阅机制中,订阅者通过订阅一个或多个频道来接收消息,而发布者则通过发布消息进入指定的频道中。过去,Redis的订阅键是以“__keyspace@__:”的形式出现的。但在Redis 6.0及以上版本中,Redis订阅键带来了巨大变化。

1、Redis订阅键以“__keyspace@__:”的形式出现

在Redis 6.0及以上版本中,Redis订阅键从以“__keyspace@__:”的形式出现变成了以“__keyspace@__:”的形式出现。其中,event可以是以下五个事件之一:

– set:当一个字符串类型的键被设置时,发送一个事件

– del:当一个键被删除时,发送一个事件

– expire:当一个键过期时,发送一个事件

– expired:当一个键过期时,发送一个事件。这是为了保证与早期Redis版本的向后兼容性而保留的键

– rename_to:当一个键被重命名时,发送一个事件

例如,订阅键“__keyspace@0__:*”可以订阅0号数据库中的所有事件。

2、Redis订阅键可以在Redis配置文件中直接设置

在Redis 6.0及以上版本中,Redis订阅键可以在Redis配置文件中直接设置。这使得在Redis启动时就可以订阅指定的键,避免了在运行时动态订阅键可能带来的性能开销。在redis.conf配置文件中,可以使用以下语法来设置订阅键:

notify-keyspace-events 

其中,events是一个字符串,表示要订阅的事件类型。可以使用多个字符来组合订阅的事件类型,每个字符代表一个事件类型,具体如下:

– K:键空间通知(Key-space notifications)

– E:键事件通知(Key-event notifications)

– g:过期事件(g表示过期,像TTL还有其他时间相关的)

– $:过期事件($表示过期)

– l:列表

– s:集合

– h:哈希

– z:有序集合

– x:过期事件或称为 Evicted (驱逐)

例如,以下配置将订阅所有事件类型:

notify-keyspace-events KElshgxz

3、Redis订阅键的消息内容发生了变化

在Redis 6.0及以上版本中,Redis订阅键的消息内容也发生了变化。在过去的版本中,Redis订阅键的消息内容只包含键名(key)参数。但在新版本中,Redis订阅键的消息内容包含以下参数:

– channel:表示事件类型(即set、del、expire、expired、rename_to中的一种)

– key:表示被操作的键(即事件发生的键)

– db:表示数据库编号

例如,以下示例代码演示了如何使用Java Redis客户端Jedis来订阅“__keyspace@0__:*”:

“`Java

import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPubSub;

public class RedisSubscriber {

public static void mn(String[] args) {

Jedis jedis = new Jedis(“localhost”);

jedis.configSet(“notify-keyspace-events”, “KE”);

JedisPubSub jedisPubSub = new JedisPubSub() {

@Override

public void onMessage(String channel, String message) {

System.out.println(“channel:” + channel + ” message:” + message);

}

@Override

public void onPMessage(String pattern, String channel, String message) {}

@Override

public void onSubscribe(String channel, int subscribedChannels) {}

@Override

public void onUnsubscribe(String channel, int subscribedChannels) {}

@Override

public void onPUnsubscribe(String pattern, int subscribedChannels) {}

@Override

public void onPSubscribe(String pattern, int subscribedChannels) {}

};

jedis.psubscribe(jedisPubSub, “__keyspace@0__:*”);

}

}


上述示例代码演示了如何通过Jedis客户端订阅“__keyspace@0__:*”。在订阅时,使用“notify-keyspace-events”配置将订阅键设置为“KE”,表示仅订阅键空间通知和键事件通知。在订阅成功后,当0号数据库中的键被设置、删除或过期时,程序将输出相应的日志信息。

Redis 6.0及以上版本中的改进使得订阅键机制更加灵活、高效。通过这些改进,Redis订阅键可以更加方便地订阅并处理键的变化。

数据运维技术 » 修改Redis订阅键带来巨大变化(redis订阅键被修改)