1. Function Overview
Key space notification allows the client to receive events that have changed the Redis key in some way by subscribing to the channel or mode.
All commands that modify key keys.
All keys that receive the LPUSH key value [value …] command.
All expired keys in the db database.
Events are distributed through the subscription and publishing functions (pub/sub) of Redis, so all clients that support the subscription and publishing functions can directly use the key without making any modifications. Space notification function.
Because the current subscription and publishing functions of Redis adopt a fire and forget strategy, if your program requires reliable notification of events, then the current key space notification may Not suitable for you: When a client subscribed to events goes offline, it loses all events that were distributed to it during the disconnection.
In the future, more reliable event distribution will be supported. This support may be achieved by making the subscription and publishing functions themselves more reliable, or by subscribing and publishing messages in Lua scripts. Publish to listen to achieve operations like pushing events to a list.
2. Event types
For each operation that modifies the database, keyspace notifications will send two different types of events.
For example, when executing the DEL key [key …]
command on the key mykey
of database 0
, the system will distribute two message, which is equivalent to executing the following two PUBLISH channel message
commands:
PUBLISH __keyspace@0__:mykey del PUBLISH __keyevent@0__:del mykey
Subscribing to the first channel __keyspace@0__:mykey can receive events for all modified keys mykey in database No. 0, Subscribing to the second channel __keyevent@0__:del can receive all keys that execute the del command in database No. 0.
The channel prefixed by keyspace is called key-space notification, and the channel prefixed by keyevent is called key-event notification.
When the del mykey command is executed:
Subscribers to the keyspace channel will receive the name of the event that was executed, in this example, del .
Subscribers to the key event channel will receive the name of the key for which the event was executed, in this example, mykey .
3. Configuration
Because turning on the key space notification function requires some CPU, so in the default configuration, this function is turned off.
You can turn on or off the keyspace notification function by modifying the redis.conf file or directly using the CONFIG SET command:
When the parameter of the notify-keyspace-events option is an empty string, Function is turned off.
On the other hand, when the parameter is not an empty string, the function is turned on.
The parameters of notify-keyspace-events can be any combination of the following characters, which specifies which types of notifications the server should send:
Input parameters There must be at least one K
or E
in it, otherwise, no matter what the other parameters are, no notification will be distributed.
For example, if you only want to subscribe to notifications related to lists in the keyspace, then the parameter should be set to Kl
, and so on.
Set the parameter to a string "AKE"
means sending all types of notifications.
Whenever a key is deleted due to expiration, an
expired
notification is generated.Generate an
evicted
notification whenever a key is deleted to reclaim memory due to themaxmemory
policy.
All commands will only generate notifications after the key has actually been changed.
For example, when SREM key member [member …hellip;]
attempts to delete an element that does not exist in the collection, the deletion operation will fail because there is no real change to the key, so this Notifications will not be sent for the operation.
If you have any questions about the notification generated by the command, it is best to use the following command to verify it yourself:
Redis uses the following two methods to delete expired keys:
When a key is accessed, the program will check the key. If the key has expired, the key will be deleted.
The underlying system will progressively find and delete expired keys in the background to process keys that have expired but will not be accessed.
When an expired key is discovered by either of the above two programs and the key is deleted from the database, Redis will generate an expired notification.
Redis does not guarantee that a key whose lifetime (TTL) becomes 0 will be deleted immediately: if the program does not access this expired key, or if there are too many keys with lifetime, then the key The lifetime becomes 0, and there may be a significant time interval between when the key is actually deleted.
因此, Redis 产生expired通知的时间为过期键被删除的时候, 而不是键的生存时间变为 0 的时候。
三、案例
按上文内容,我们先将redis的键空间通知开启,我们开启所有的通知,在可以端中测试后没问题再到代码中测试。
连接到redis 输入一下命令
config set notify-keyspace-events KEA
订阅键空间和键事件的主题
psubscribe '__key*__:*'#对所有库键空间通知 psubscribe '__keyspace@2__:*' #是对db2数据库键空间通知 psubscribe '__keyspace@2__:order*' #是对db2数据库,key前缀为order所有键的键空间通知
创建一个 key :name valus:zhangsan
set name wsl
观察订阅的窗口 会受到两个消息,第一个是:键空间 第二个是键事件,键空间是内容是操作指令,主题中包含有key,键事件主题中包含了指令,内容是key。
到这里说明已经开启了键空间通知
代码
以下代码采用string类型演示
在配置一下MessageListenerContainer
类,将我们写好的监听类添加到该类中即可,删除和过期都是需要添加,我这里就一起添加了后面就不做演示。
@Configuration public class RedisConfig { @Autowired private RedisTemplate redisTemplate; @Autowired private RedisUpdateAndAddListener redisUpdateAndAddListener; @Autowired private RedisDeleteListener redisDeleteListener; @Autowired private RedisExpiredListener redisExpiredListener; @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); //监听所有的key的set事件 container.addMessageListener(redisUpdateAndAddListener, redisUpdateAndAddListener.getTopic()); //监听所有key的删除事件 container.addMessageListener(redisDeleteListener,redisDeleteListener.getTopic()); //监听所有key的过期事件 container.addMessageListener(redisExpiredListener,redisExpiredListener.getTopic()); return container; } }
新增和修改都是set指令
所以监听的主题都一样,实现MessageListener
接口,重写onMessage
这里就是收到消息的处理逻辑
@Component @Data public class RedisUpdateAndAddListener implements MessageListener { //监听的主题 private final PatternTopic topic = new PatternTopic("__keyevent@*__:set"); @Override public void onMessage(Message message,byte[] pattern){ String topic = new String(pattern); String msg = new String(message.getBody()); System.out.println("收到key更新或修改,消息主题是:"+ topic+",消息内容是:"+msg); } }
在redis中对name这个key进行set操作
set name wsl
在控制台就可以看到name这个key被操作了
删除
跟上面的更新监听一样,只需要把订阅主题更改一下即可。同样需要添加到这个RedisMessageListenerContainer
,上面已经添加,这里不做演示
@Component @Data public class RedisDeleteListener implements MessageListener { //监听主题 private final PatternTopic topic = new PatternTopic("__keyevent@*__:del"); /** * * @param message 消息 * @param pattern 主题 */ @Override public void onMessage(Message message, byte[] pattern) { String topic = new String(pattern); String msg = new String(message.getBody()); System.out.println("收到key的删除,消息主题是:"+ topic+",消息内容是:"+msg); } }
在redis输入命令,del name
在控制台可以看到已经收到消息了。
过期
如上面的操作方式一样
@Data @Component public class RedisExpiredListener implements MessageListener { //监听主题 private final PatternTopic topic = new PatternTopic("__keyevent@*__:expired"); @Override public void onMessage(Message message, byte[] pattern) { String topic = new String(pattern); String msg = new String(message.getBody()); System.out.println("收到key的过期,消息主题是:"+ topic+",消息内容是:"+msg); } }
在redis中写一个定时删除的keySETEX age 18 3
三秒后就可以控制台打印了相关信息
The above is the detailed content of How SpringBoot monitors redis Key change events. For more information, please follow other related articles on the PHP Chinese website!

Redis goes beyond SQL databases because of its high performance and flexibility. 1) Redis achieves extremely fast read and write speed through memory storage. 2) It supports a variety of data structures, such as lists and collections, suitable for complex data processing. 3) Single-threaded model simplifies development, but high concurrency may become a bottleneck.

Redis is superior to traditional databases in high concurrency and low latency scenarios, but is not suitable for complex queries and transaction processing. 1.Redis uses memory storage, fast read and write speed, suitable for high concurrency and low latency requirements. 2. Traditional databases are based on disk, support complex queries and transaction processing, and have strong data consistency and persistence. 3. Redis is suitable as a supplement or substitute for traditional databases, but it needs to be selected according to specific business needs.

Redisisahigh-performancein-memorydatastructurestorethatexcelsinspeedandversatility.1)Itsupportsvariousdatastructureslikestrings,lists,andsets.2)Redisisanin-memorydatabasewithpersistenceoptions,ensuringfastperformanceanddatasafety.3)Itoffersatomicoper

Redis is primarily a database, but it is more than just a database. 1. As a database, Redis supports persistence and is suitable for high-performance needs. 2. As a cache, Redis improves application response speed. 3. As a message broker, Redis supports publish-subscribe mode, suitable for real-time communication.

Redisisamultifacetedtoolthatservesasadatabase,server,andmore.Itfunctionsasanin-memorydatastructurestore,supportsvariousdatastructures,andcanbeusedasacache,messagebroker,sessionstorage,andfordistributedlocking.

Redisisanopen-source,in-memorydatastructurestoreusedasadatabase,cache,andmessagebroker,excellinginspeedandversatility.Itiswidelyusedforcaching,real-timeanalytics,sessionmanagement,andleaderboardsduetoitssupportforvariousdatastructuresandfastdataacces

Redis is an open source memory data structure storage used as a database, cache and message broker, suitable for scenarios where fast response and high concurrency are required. 1.Redis uses memory to store data and provides microsecond read and write speed. 2. It supports a variety of data structures, such as strings, lists, collections, etc. 3. Redis realizes data persistence through RDB and AOF mechanisms. 4. Use single-threaded model and multiplexing technology to handle requests efficiently. 5. Performance optimization strategies include LRU algorithm and cluster mode.

Redis's functions mainly include cache, session management and other functions: 1) The cache function stores data through memory to improve reading speed, and is suitable for high-frequency access scenarios such as e-commerce websites; 2) The session management function shares session data in a distributed system and automatically cleans it through an expiration time mechanism; 3) Other functions such as publish-subscribe mode, distributed locks and counters, suitable for real-time message push and multi-threaded systems and other scenarios.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software
