亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

乳山市| 扶沟县| 化隆| 奈曼旗| 郑州市| 弋阳县| 福清市| 白城市| 昌黎县| 洛浦县| 临沂市| 盐津县| 泗阳县| 桂林市| 时尚| 湖北省| 仁布县| 宁安市| 钟祥市| 大姚县| 杂多县| 安康市| 承德县| 静安区| 临朐县| 神农架林区| 天台县| 牡丹江市| 睢宁县| 庆安县| 深水埗区| 哈巴河县| 泸州市| 靖安县| 金湖县| 和平区| 永胜县| 五莲县| 甘谷县| 鄂州市| 定结县|