go随聊-Redis实战 操作List - Go语言中文社区

go随聊-Redis实战 操作List


go-redis/redis

地址:https://github.com/go-redis/redis

Supports:

  • Redis 3 commands except QUIT, MONITOR, SLOWLOG and SYNC.
  • Automatic connection pooling with circuit breaker support.
  • Pub/Sub.
  • Transactions.
  • Pipeline and TxPipeline.
  • Scripting.
  • Timeouts.
  • Redis Sentinel.
  • Redis Cluster.
  • Cluster of Redis Servers without using cluster mode and Redis Sentinel.
  • Ring.
  • Instrumentation.
  • Cache friendly.
  • Rate limiting.
  • Distributed Locks.

安装

go get -u github.com/go-redis/redis

创建客户端

import "github.com/go-redis/redis"

func RedisInit(addr string) (*redis.Client,error) {
	redisdb := redis.NewClient(&redis.Options{
		Addr:     	addr,
		Password: 	"",
		DB:       	0,
		PoolSize:	10,
	})
	_,err := redisdb.Ping().Result()
	if err!=nil {
		return nil,err
	}else{
		return redisdb,nil
	}
}
redisdb,err:=RedisInit("192.168.10.25:6379")

RedisInit函数正确返回*redis.Client(redisdb),后续所有操作都使用这个redisdb

List操作

rpush(key, value)

将一个或多个值 value 插入到列表 key 的表尾(最右边)。

如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。

如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。

当 key 存在但不是列表类型时,返回一个错误。

func ListTest(redisdb *redis.Client) {
	result,err:=redisdb.RPush("list1","a","b","c").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
---------------------------------------------------------------
3

lpush(key, value)

将一个或多个值 value 插入到列表 key 的表头

如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。

如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。

当 key 存在但不是列表类型时,返回一个错误。

func ListTest(redisdb *redis.Client) {
	result,err:=redisdb.RPush("list1","d").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
--------------------------------------------------------
4    //返回4表示插入后列表中有4个元素,以前是abc,当前是dabc

llen(key):返回名称为key的list的长度。

func ListTest(redisdb *redis.Client) {
	result,err:=redisdb.LLen("list1").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
-----------------------------------------------------
5

lrange(key, start, end)

返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。

下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

func ListTest(redisdb *redis.Client) {
	result,err:=redisdb.LRange("list1",0,100).Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}

ltrim(key, start, end)

对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

举个例子,执行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除。

下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

当 key 不是列表类型时,返回一个错误。

func ListTest(redisdb *redis.Client) {
	result,err:=redisdb.LTrim("list1",2,4).Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
------------------------------------------------------------
原来是d,a,b,c,d
现在是b,c,d

lindex(key, index):返回名称为key的list中index位置的元素。

func ListTest(redisdb *redis.Client) {
	result,err:=redisdb.LIndex("list1",1).Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}

lset(key, index, value):给名称为key的list中index位置的元素赋值。

func ListTest(redisdb *redis.Client) {
	result,err:=redisdb.LSet("list1",1,"hello").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
-------------------------------------------------------------
原来是b,c,d
现在是b,hello,d

lpop(key):返回并删除名称为key的list中的首元素。

func ListTest(redisdb *redis.Client) {
	result,err:=redisdb.LPop("list1").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
--------------------------------------------------
返回b
原来是b,hello,d
现在是hello,d

rpop(key):返回并删除名称为key的list中的尾元素。

func ListTest(redisdb *redis.Client) {
	result,err:=redisdb.RPop("list1").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
-----------------------------------------------------
返回d
原来是hello,d
现在是hello

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/yimin_tank/article/details/83750691
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 22:35:01
  • 阅读 ( 1408 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢