中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis中的自動過期機制怎么使用

發布時間:2022-05-18 18:23:47 來源:億速云 閱讀:256 作者:iii 欄目:開發技術

本篇內容介紹了“Redis中的自動過期機制怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Redis中的自動過期機制

實現需求:處理訂單過期自動取消,比如下單30分鐘未支付自動更改訂單狀態

1.使用Redis Key自動過期出發事件通知
2.使用定時任務30分鐘后檢查
3.按照每分鐘輪訓檢查

CREATE TABLE `order_number` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_name` varchar(255) DEFAULT NULL,
  `order_status` int(11) DEFAULT NULL,
  `order_token` varchar(255) DEFAULT NULL,
  `order_id` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;

一、使用Redis Key自動過期機制

當我們的key失效時,可以執行我們的客戶端回調監聽的方法。
需要在Redis中配置:

1.打開redis.conf配置文件

vi redis.conf

Redis中的自動過期機制怎么使用

2. 在配置文件中查找notify-keyspace-events

/notify-keyspace-events

Redis中的自動過期機制怎么使用

3. 修改為notify-keyspace-events Ex

Redis中的自動過期機制怎么使用

4.重啟redis

Redis中的自動過期機制怎么使用

二、SpringBoot整合key失效監聽

@Configuration
public class RedisListenerConfig {
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }
}
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }

    @Resource
    private OrderMapper orderMapper;

    /**
     * 待支付
     */
    private static final Integer ORDER_STAYPAY = 0;

    /**
     * 失效
     */
    private static final Integer ORDER_INVALID = 2;

    /**
     * 使用該方法監聽 當我們的key失效的時候執行該方法
     *
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expiraKey = message.toString();
        System.out.println("該key:expiraKey:" + expiraKey + "失效啦~");
        // 前綴判斷 orderToken
        OrderEntity orderNumber = orderMapper.getOrderNumber(expiraKey);
        if (orderNumber == null) {
            return;
        }
        // 獲取訂單狀態
        Integer orderStatus = orderNumber.getOrderStatus();
        // 如果該訂單狀態為待支付的情況下,直接將該訂單修改為已經超時
        if (orderStatus.equals(ORDER_STAYPAY)) {
            orderMapper.updateOrderStatus(expiraKey, ORDER_INVALID);
            // 庫存加上1
        }
    }
}
@RestController
public class MemberController {
    @Autowired
    private UserMapper userMapper;

    /**
     *
     * @return
     */
    @RequestMapping("/getListMember")
    @Cacheable(cacheNames = "member", key = "'getListMember'")
    public List<MemberEntity> getListMember() {
        return userMapper.findMemberAll();
    }
}
@Data
public class OrderEntity {
    private Long id;
    private String orderName;
    /**
     * 0 待支付 1 已經支付
     */
    private Integer orderStatus;

    private String orderToken;
    private String orderId;

    public OrderEntity(Long id, String orderName, String orderId, String orderToken) {
        this.id = id;
        this.orderName = orderName;
        this.orderId = orderId;
        this.orderToken = orderToken;
    }
}
public interface OrderMapper {

    @Insert("insert into order_number values (null,#{orderName},0,#{orderToken},#{orderId})")
    int insertOrder(OrderEntity OrderEntity);


    @Select("SELECT ID AS ID ,order_name AS ORDERNAME ,order_status AS orderstatus,order_token as ordertoken,order_id as  orderid FROM order_number\n" +
            "where order_token=#{orderToken};")
    OrderEntity getOrderNumber(String orderToken);

    @Update("\n" +
            "\n" +
            "update order_number set order_status=#{orderStatus} where order_token=#{orderToken};")
    int updateOrderStatus(String orderToken, Integer orderStatus);
}

1.訪問addOrder接口

Redis中的自動過期機制怎么使用

2.查看數據庫數據

Redis中的自動過期機制怎么使用

3. 10s后redis過期,執行回調機制

Redis中的自動過期機制怎么使用

4.再次查看數據庫,狀態已被修改

Redis中的自動過期機制怎么使用

“Redis中的自動過期機制怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

双辽市| 屯留县| 黄浦区| 闽侯县| 昌都县| 尚志市| 六枝特区| 肇东市| 射阳县| 营口市| 隆安县| 兰州市| 绥棱县| 和政县| 南汇区| 阳曲县| 凌云县| 铜陵市| 新丰县| 特克斯县| 西峡县| 岫岩| 青冈县| 乐平市| 莱芜市| 始兴县| 咸丰县| 宜章县| 道孚县| 山丹县| 丹巴县| 贵州省| 平南县| 沈阳市| 韩城市| 扎鲁特旗| 积石山| 咸阳市| 顺义区| 东丰县| 汾西县|