文章目录

  • redis list 设置队列大小
  • 判断某个list是否设置了maxlen
  • 报错:"ERR unknown command `LIST`, with args beginning with: `MAXLEN`,
  • go程序中设置redis list固定长度
  • Go语言pipeline中如何为Redis列表设置最大长度限制?


redis list 设置队列大小

Redis列表类型的最大长度(maxlen)功能直到版本6.2才被引入,它可以用于为列表设置最大长度,实现有限大小的队列。

支持列表最大长度功能的Redis版本是:>= 6.2.0.

**之前的Redis列表并没有队列大小的限制,这可能会导致内存问题。**新版本的list.maxlen选项可以有效解决这个问题,实现定长队列。

127.0.0.1:6379> LPUSH mylist 11 12 13 14 15 maxlen 5

这条命令为列表mylist设置了最大长度maxlen为5。

之后,无论我们执行LPUSHRPUSH 还是 LPOP、RPOP等操作,mylist的大小都不会大于5。

  1. 对一个列表设置一次maxlen后,其最大长度是固定的,之后的列表操作无需再指定maxlen
  2. 但是,我们可以随时显式地再次设置maxlen选项,以改变列表的最大长度。
  3. 如果继续向列表中添加元素,导致大小超过5,Redis会移除列表最左(LPUSH)或最右(RPUSH)的元素,使列表恒定为5个元素。

判断某个list是否设置了maxlen

要判断一个Redis列表是否设置了maxlen选项,可以使用 LIST MAXLEN 命令。

LIST MAXLEN list-key

它会返回列表的最大长度设置值。

  • 如果返回0,表示该列表没有设置最大长度。
  • 如果返回其他整数,表示列表的最大长度设置为该值。

执行 LIST MAXLEN list-key,如果返回值不为0,则说明设置了最大长度。

报错:"ERR unknown command LIST, with args beginning with: MAXLEN,

Redis版本过低,不支持LIST MAXLEN命令
LIST MAXLEN命令需要Redis版本>= 6.2.0 。如果你的Redis版本低于这个版本,该命令将不可用,导致报错。

INFO命令:

> info
# Server
redis_version:6.0.9

Redis列表类型的最大长度(maxlen)功能直到版本6.2才被正式引入。

Redis 6.2版本引入了LIST MAXLEN命令和LPUSH/RPUSH的"maxlen"选项,用于设置Redis列表的最大长度。
之前的Redis版本不支持设置列表最大长度。

引用官方说明原文:
Redis 6.2 introduced the LIST MAXLEN command and the maxlen option for LPUSH and RPUSH, to set and get the maximum length of a list.
Previous versions of Redis did not support setting a maximum length for lists.

go程序中设置redis list固定长度

Go语言pipeline中如何为Redis列表设置最大长度限制?

在Go语言中,可以通过Pipeline对Redis执行多条命令。

func SetListMaxLen(r redis.Cmdable, key string, maxLen int) error {
    pipeline := r.Pipeline()
    pipeline.LPush(key, "maxlen", maxLen)
    _, err := pipeline.Exec()
    return err
}
  1. 创建一个pipeline批量操作对象
  2. 使用pipeline.LPush向名为key的列表插入两个值:"maxlen"和maxLen
  3. 调用pipeline.Exec()执行批量操作
    其中,"maxlen"是一个特殊值,表示最大长度, maxLen为整数,表示具体长度值。

在pipeline开始先执行RPush/LPush并设置最大长度,然后再执行其他列表操作命令。Redis会在pipeline执行期间实时地将列表大小维持在该最大长度设置。