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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值