美文网首页redis
Spring实现redis键失效监听

Spring实现redis键失效监听

作者: fantasticMao | 来源:发表于2018-02-28 17:03 被阅读2261次

1.修改redis配置文件

修改配置文件redis.conf中的:notify-keyspace-events Ex,默认为notify-keyspace-events

配置参数说明:

# K    键空间通知,以__keyspace@<db>__为前缀 
# E    键事件通知,以__keysevent@<db>__为前缀
# g    del , expipre , rename 等类型无关的通用命令的通知, ...  
# $    String命令  
# l    List命令  
# s    Set命令  
# h    Hash命令  
# z    有序集合命令  
# x    过期事件(每次key过期时生成)  
# e    驱逐事件(当key在内存满了被清除时生成)  
# A    g$lshzxe的别名,因此”AKE”意味着所有的事件   

修改好配置文件后,redis会对设置了expire的数据进行监听,当redis中的数据超时失效时,将会通知客户端.

2.在spring-jedis的配置文件中添加监听配置

<!--声明消息侦听器容器 -->
    <bean id="messageListener" class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
        <constructor-arg>
            <bean class="cn.com.bonc.modules.monitor.redis.MyMessageDelegateImpl"/>
        </constructor-arg>
    </bean>

    <bean id="redisContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
        <property name="connectionFactory" ref="jedisConnectionFactory"/>
        <property name="messageListeners">
            <map>
                <entry key-ref="messageListener">
                    <bean class="org.springframework.data.redis.listener.ChannelTopic">
                        <constructor-arg value="__keyevent@0__:expired"/>
                    </bean>
                </entry>
            </map>
        </property>
    </bean>

3.编写失效回调接口

public interface MyMessageDelegate {

    void handleMessage(String message);

    void handleMessage(Map message);

    void handleMessage(byte[] message);

    void handleMessage(Serializable message);

    void handleMessage(Serializable message, String channel);
}

4.实现该接口并添加你的操作

public class MyMessageDelegateImpl implements MyMessageDelegate {

    private static final Logger logger = LoggerFactory.getLogger(MyMessageDelegateImpl.class);

    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    @Override
    public void handleMessage(String message) {
    }

    @Override
    public void handleMessage(Map message) {
    }

    @Override
    public void handleMessage(byte[] message) {
    }

    @Override
    public void handleMessage(Serializable message) {
        logger.info("失效的键:",message);
        //TODO 拿到失效的键后做其他操作
    }

    @Override
    public void handleMessage(Serializable message, String channel) {
    }
}

相关文章

  • Spring实现redis键失效监听

    1.修改redis配置文件 修改配置文件redis.conf中的:notify-keyspace-events E...

  • SpringBoot Redis 键失效时监听

    需求 在做有时效业务需求的时候, 比如我发起一个签到, 2小时内有效,过期就不能再签到了. 做法 读取数据的时候判...

  • spring boot 监听redis session 失效

    一、pom文件添加 二、redis信息配置 三、config处理 四、监听类 五 结果展示 1 通过接口访问设置s...

  • Redis

    Redis实现事件监听 redis.conf配置文件中修改配置 配置详解 字符 发送通知K 键空间通知,所有...

  • Redis Cluster模式集群监听

    Redis实现事件监听 redis.conf配置文件中修改配置 配置详解 字符 发送通知K 键空间通知,所有...

  • Spring Boot 监听 Redis Key 失效事件实现定

    业务场景 我们以订单功能为例说明下: 生成订单后一段时间不支付订单会自动关闭。最简单的想法是设置定时任务轮询,但是...

  • Spring Boot 监听 Redis Key 失效事件实现定

    业务场景 我们以订单功能为例说明下: 生成订单后一段时间不支付订单会自动关闭。最简单的想法是设置定时任务轮询,但是...

  • 键失效监听

    创建监听类KeyExpiredListener 继承 KeyExpirationEventMessageListe...

  • redis键空间过期

    背景概要 其他方案 实现修改redis配置键空间通知演示结合Laravel artisan实现报错记录如何使监听后...

  • SpringBoot实现监听redis key失效事件

    需求: 处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态 解决方案1: 可以利用redis天然的key...

网友评论

    本文标题:Spring实现redis键失效监听

    本文链接:https://www.haomeiwen.com/subject/irlixftx.html