怎么使用Redis实现一个延时队列?

1 回答

Redis 本身是不支持延时队列的,但是我们可以利用 Redis 一些特定的数据结构和特性来实现延时队列。

基于 Redis 目前有三种方式可以实现延时队列:

  1. 利用 Redis 过期消息实现延时队列
    Redis 允许我们为每一个 key 设置过期时间,在 key 过期时,Redis 可以配置为发送一个过期事件。在应用程序通过监听这个过期事件,就可以实现延迟队列了。

  2. 使用 Sorted Set 实现延时队列

  3. Redisson 实现延迟队列

Read More

el-input 各种输入限制的正则整理

金额输入最常用的正则限制

限制input输入框只能输入数字和小数点、保留两位小数、千分位逗号分割的正则表达式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<el-input v-model="input" @input="handleInput" />

const handleInput = (val) => {
    input.value = onlyNumOnePoint(val);
}

const onlyNumOnePoint = (number_only) => {
  // 先把非数字的都替换掉,除了数字和小数点
  number_only = number_only.replace(/[^\d.]/g"");
  // 第一位0开头,0后面为数字,则过滤掉,取后面的数字
  number_only = number_only.replace(/^0+(\d)/'$1');
  // 必须保证第一个为数字而不是小数点
  number_only = number_only.replace(/^\./g"");
  // 保证只有出现一个小数点而没有多个小数点
  number_only = number_only.replace(/\.{2,}/g".");
  // 保证小数点只出现一次,而不能出现两次以上
  number_only = number_only.replace(".","$#$").replace(/\./g"").replace("$#$"".");
  // 保证只能输入一个小数
  // number_only = number_only.replace(/^(\-)*(\d+)\.(\d).*$/, '$1$2.$3');
  // 保证只能输入两个小数
  number_only = number_only.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3');
  // 千分位逗号分割  
  number_only = number_only.replace(/\B(?=(\d{3})+(?!\d))/g',');

  return number_only;
}

Read More