Sometimes an event can be triggered very frequently. However you want to send a notification to the user only once in a period of time: for example you may want to notify the event with at most one notification every hour (or day, etc.).
We have already discussed how to throttle notifications in a previous post. Here we just give a more practical example about the use of a Redis lock to prevent duplicated notifications in a period of time. We’ll use Ruby, but the example can be easily adapted to any language.
# call this method every time the event is triggered # and this method will send at most one notification per day def send_notification_once acquire_lock, _ = $redis.with do |conn| conn.multi do |multi| multi.setnx 'notification_lock', '' multi.expire 'notification_lock', 1.day.to_i end end return unless acquire_lock # now you can actually send the notification... send_notification end