redislist
列表指令
键指令 | 作用 | 例子 | 返回值 | 序号 |
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 | 列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内,返回 nil | 4 |
LINSERT | 在列表的元素前或者后插入元素 | LINSERT key BEFORE|AFTER pivot value | 如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 0 | 5 |
LLEN | 获取列表长度 | LLEN KEY_NAME | 列表的长度 | 6 |
LPOP | 移出并获取列表的第一个元素 | Lpop KEY_NAME | 列表的第一个元素。 当列表 key 不存在时,返回 nil | 7 |
LPUSH | 将一个或多个值插入到列表头部 | LPUSH KEY_NAME VALUE1.. VALUEN | 执行 LPUSH 命令后,列表的长度 | 8 |
LPUSHX | 将一个值插入到已存在的列表头部 | LPUSHX KEY_NAME VALUE1.. VALUEN | LPUSHX 命令执行之后,列表的长度 | 9 |
LRANGE | 获取列表指定范围内的元素 | LRANGE KEY_NAME START END | 一个列表,包含指定区间内的元素 | 10 |
LREM | 移除列表元素 | LREM key count VALUE | 被移除元素的数量。 列表不存在时返回 0 | 11 |
LSET | 通过索引设置列表元素的值 | LSET KEY_NAME INDEX VALUE | 操作成功返回 ok ,否则返回错误信息 | 12 |
LTRIM | 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除 | LTRIM KEY_NAME START STOP | 命令执行成功时,返回 ok | 13 |
RPOP | 移除列表的最后一个元素,返回值为移除的元素 | RPOP KEY_NAME | 被移除的元素,当列表不存在时,返回 nil | 14 |
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的长度
本文由 李阿斗创作 旅途愉快~ 我的主页 ( ̄▽ ̄)
最后编辑时间为:
2022/06/04 22:19
学无止境!