首页 文章 go-redis使用之List列表
go-redis使用之List列表
编辑时间:2023-10-28 19:59:08 作者:dashizi 浏览量:116

func GetRedisClient()*redis.Client{

return redis.NewClient(&redis.Options{

Addr:               "localhost:6379",

Password:           "",

DB:                 0,

})

}


// redisListTest List(列表操作)

func redisListTest(cli *redis.Client) {

cli.FlushDB()

// 将一条数据添加到列表的头部(类似入栈)

cli.LPush("mylist","val1")

// 将一条或多条数据添加到列表的尾部

cli.RPush("mylist","val99","val100")

s1:=[]string{"val2","val3","val4"}

// 将一个切片添加到列表的头部

cli.LPush("mylist",s1)


// 获取List的长度

fmt.Println(cli.LLen("mylist").Val()) //6


// 获取List中的元素:起始索引~结束索引,当结束索引 > llen(list)或=-1时,取出全部数据

// 遍历List,获取每一个元素

// 注意取出来的顺序!!!

// 注意取出来的顺序!!!

// 注意取出来的顺序!!!

s2:=cli.LRange("mylist",0,-1).Val()

for _, i := range s2 {

fmt.Println(i) // [val5 val4 val3 val2 val1 val99 val100]

}

fmt.Println(cli.LRange("mylist",0,3).Val()) // [val4 val3 val2 val1]

fmt.Println(cli.LRange("mylist",0,100).Val())// [val4 val3 val2 val1 val99 val100]


// 移除List的第一个元素(头元素)

cli.LPop("mylist")

fmt.Println(cli.LRange("mylist",0,-1).Val())// [val3 val2 val1 val99 val100]


// 移除List的最后一个元素(尾元素)

cli.RPop("mylist")

fmt.Println(cli.LRange("mylist",0,-1).Val())// [val3 val2 val1 val99]


// 移除List 指定个数的指定值

cli.LPush("mylist","val3","val3","val3","val2")

fmt.Println(cli.LRange("mylist",0,-1).Val())

fmt.Println(cli.LLen("mylist")) //llen mylist: 8

// 此时的mylist: [val2 val3 val3 val3 val3 val2 val1 val99]

//移除list中的1个val3

cli.LRem("mylist",1,"val3")

fmt.Println(cli.LRange("mylist",0,-1).Val())// [val2 val3 val3 val3 val2 val1 val99]

// 移除剩下的3个值:val3(当移除的个数count大于该值的实际个数时,全部移除)

cli.LRem("mylist",100,"val3")

fmt.Println(cli.LRange("mylist",0,-1).Val())// [val2 val2 val1 val99]


//截取List(通过下标,前闭后闭,会修改原数据)

cli.LTrim("mylist",1,2)

fmt.Println(cli.LRange("mylist",0,-1).Val()) // [val2 val1]

// 截取的结束下标大于List长度或者-1时,一直截取到末尾

cli.LTrim("mylist",1,100)

fmt.Println(cli.LRange("mylist",0,-1).Val()) // [val1]


cli.RPush("mylist","val2","val3")

//检查数据库是否存在此List,1:存在 0:不存在

fmt.Println(cli.Exists("mylist2").Val()) // 0

//移除List的最后一个元素,并移动到另一个列表(若没有此列表则创建)

cli.RPopLPush("mylist","mylist2")

fmt.Printf("mylist=%v\n",cli.LRange("mylist",0,-1).Val()) // mylist=[val1 val2]

fmt.Printf("mylist2=%v\n",cli.LRange("mylist2",0,-1).Val()) // mylist2=[val3]


// 通过下标更新List的值

cli.LSet("mylist",1,"val200")

fmt.Println(cli.LRange("mylist",0,-1).Val()) //[val1 val200]

// 更新的下标>List的长度会触发panic

//err:=cli.LSet("mylist",2,"val3").Err()

//if err != nil {

// panic(err) // panic: ERR index out of range

//}

// 当前List不存在,会触发panic

//err:=cli.LSet("mylist3",1,"qqqqq").Err()

//if err != nil {

// panic(err) // panic: ERR no such key

//}


// 在列表指定的值之前或者之后插入值

cli.LInsertBefore("mylist","val1","qqq")

fmt.Println(cli.LRange("mylist",0,-1).Val()) // [qqq val1 val200]

cli.LInsertAfter("mylist","qqq","hello~")

fmt.Println(cli.LRange("mylist",0,-1).Val()) // [qqq hello~ val1 val200]

// 当标志位不存在时,插入值失败

cli.LInsertAfter("mylist","GOGO","golang").Err()

fmt.Println(cli.LRange("mylist",0,-1).Val()) // [qqq hello~ val1 val200]


// 当删除链表内的所有值时,空链表也就不存在了

for cli.LLen("mylist").Val()>0{

cli.LPop("mylist")

fmt.Println(cli.LRange("mylist",0,-1).Val())

}


// 查看当前数据库所有key

fmt.Println(cli.Keys("*").Val()) // [mylist2]

}


func main(){

rdb:=GetRedisClient()

defer rdb.Close()

pong:=rdb.Ping().Val()

fmt.Printf("数据连接状态:%v\n",pong) // 数据连接状态:PONG


// redisStringTest(rdb)


redisListTest(rdb)

}


来说两句吧
最新评论