redis-4-list

/ Database / 没有评论 / 52浏览

列表指令

键指令作用例子返回值序号
BLPOP移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止BLPOP LIST1 LIST2 .. LISTN TIMEOUT如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值0
BRPOP移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止BRPOP LIST1 LIST2 .. LISTN TIMEOUT假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值1
BRPOPLPUSH从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长2
LINDEX通过索引获取列表中的元素LINDEX KEY_NAME INDEX_POSITION列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内,返回 nil4
LINSERT在列表的元素前或者后插入元素LINSERT key BEFORE|AFTER pivot value如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 05
LLEN获取列表长度LLEN KEY_NAME列表的长度6
LPOP移出并获取列表的第一个元素Lpop KEY_NAME列表的第一个元素。 当列表 key 不存在时,返回 nil7
LPUSH将一个或多个值插入到列表头部LPUSH KEY_NAME VALUE1.. VALUEN执行 LPUSH 命令后,列表的长度8
LPUSHX将一个值插入到已存在的列表头部LPUSHX KEY_NAME VALUE1.. VALUENLPUSHX 命令执行之后,列表的长度9
LRANGE获取列表指定范围内的元素LRANGE KEY_NAME START END一个列表,包含指定区间内的元素10
LREM移除列表元素LREM key count VALUE被移除元素的数量。 列表不存在时返回 011
LSET通过索引设置列表元素的值LSET KEY_NAME INDEX VALUE操作成功返回 ok ,否则返回错误信息12
LTRIM对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除LTRIM KEY_NAME START STOP命令执行成功时,返回 ok13
RPOP移除列表的最后一个元素,返回值为移除的元素RPOP KEY_NAME被移除的元素,当列表不存在时,返回 nil14
RPOPLPUSH移除列表的最后一个元素,并将该元素添加到另一个列表并返回RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME被弹出的元素15
RPUSH将一个或多个值插入到列表的尾部(最右边)。如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误RPUSH KEY_NAME VALUE1..VALUEN执行 RPUSH 操作后,列表的长度,当列表存在但不是列表类型时,返回一个错误16
RPUSHX将一个值或多个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效RPUSHX KEY_NAME VALUE1..VALUEN执行 Rpushx 操作后,列表的长度,当列表存在但不是列表类型时,返回一个错误17

BLPOP

	result, err := RedisClient.BLPop(ctx, time.Second*1, "list1").Result()
	if err != nil {
		logrus.Error(err) // 如果key不存在则返回nil
		return
	}
	logrus.Info(result) // 返回list的删除成功的第一个key

BRPOP

	result, err := RedisClient.BRPop(ctx, time.Second*1, "list").Result()
	if err != nil {
		logrus.Error(err) // 如果key不存在则返回nil
		return
	}
	logrus.Info(result) // 返回list最后一个key,删除成功

BRPOPLPUSH

	res,err := RedisClient.BRPopLPush(ctx,"list","list1",time.Second*1).Result()
	if err != nil {
		logrus.Error(err) // 如果source key不存在则返回nil
		return
	}
	logrus.Info(res) // 返回弹出的元素,source list中的元素不做变化

LINDEX

	res,err := RedisClient.LIndex(ctx,"list",1).Result()
	if err != nil {
		logrus.Error(err) //  key不存在则返回nil
		return
	}
	logrus.Info(res) // 返回指定索引值的元素,索引从0开始

LINSERT

	//res,err := RedisClient.LInsert(ctx,"list","after","111111","before11").Result() // 只会将第一个匹配到的value作为pivot
	res,err := RedisClient.LInsert(ctx,"list","before","111111","before11").Result() // 只会将第一个匹配到的value作为pivot
	if err != nil {
		logrus.Error(err) //  key不存在不报错
		return
	}
	logrus.Info(res) // 返回插入后的列表长度,如果key不存在则返回0

LLEN

	res,err := RedisClient.LLen(ctx,"list").Result()
	if err != nil {
		logrus.Error(err)
		return
	}
	logrus.Info(res) // 返回列表长度,如果key不存在则返回0

LPOP

	res,err := RedisClient.LPop(ctx,"list").Result()
	if err != nil {
		logrus.Error(err) // 如果key不存在,则返回nil
		return
	}
	logrus.Info(res) // 返回删除的第一个元素

LPUSH

	values := []string{"xx","yy","zz"}
	res,err := RedisClient.LPush(ctx,"list",values).Result()
	if err != nil {
		logrus.Error(err) // 如果key不存在,则会创建一个新的key
		return
	}
	logrus.Info(res) // 返回插入数据后的列表长度

LPUSHX

	values := []string{"xx","yy","zz"}
	res,err := RedisClient.LPushX(ctx,"list",values).Result()
	if err != nil {
		logrus.Error(err) // 如果key不存在,则不写入,且不报错
		return
	}
	logrus.Info(res) // 返回指定写入的key的长度

LRANGE

	// start从0开始,stop从-1结束
	res,err := RedisClient.LRange(ctx,"list",0,-1).Result()
	if err != nil {
		logrus.Error(err) // 如果key不存在,不报错
		return
	}
	logrus.Info(res) // 如果key存在且有值,返回值列表
	for _,v := range res{
		logrus.Warn(v)
	}

LREM

	res,err := RedisClient.LRem(ctx,"lis1t",3,"2333").Result() // count指的是最多删除多少个value为"2333"的值
	if err != nil {
		logrus.Error(err) // 如果key不存在,不报错
		return
	}
	logrus.Info(res) // 返回删除成功的个数

LSET

	res,err := RedisClient.LSet(ctx,"list",3,"11212").Result() // 索引从0开始
	if err != nil {
		logrus.Error(err) // 如果key不存在,报错
		return
	}
	logrus.Info(res) // 设置成功返回ok

LTRIM

	//LPushX()
	res,err := RedisClient.LTrim(ctx,"list",0,3).Result() // 索引从0开始,保留从start到stop区间的元素
	if err != nil {
		logrus.Error(err) // 如果key不存在,不报错
		return
	}
	logrus.Info(res) // 如果成功返回ok

RPOP

	res,err := RedisClient.RPop(ctx,"list").Result()
	if err != nil {
		logrus.Error(err) // 如果key不存在,返回nil
		return
	}
	logrus.Info(res) // 如果成功返回被删除的元素

RPOPLPUSH

	res,err := RedisClient.RPopLPush(ctx,"list","list2").Result() // destination key不存在会自动创建
	if err != nil {
		logrus.Error(err) // 如果source key不存在,返回nil
		return
	}
	logrus.Info(res) // 如果成功返回被删除的元素

RPUSH

	values := []string{"xxx","zz","yy"}
	res,err := RedisClient.RPush(ctx,"list",values).Result() // key不存在,会自动创建
	if err != nil {
		logrus.Error(err) // 如果key不存在,不报错
		return
	}
	logrus.Info(res) // 如果成功返回key的长度

RPUSHX

	values := []string{"xxx","zz","yy"}
	res,err := RedisClient.RPushX(ctx,"li1st",values).Result() // key不存在,不会自动创建
	if err != nil {
		logrus.Error(err) // 如果key不存在,不报错,也不会插入
		return
	}
	logrus.Info(res) // 如果成功返回key的长度