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

go随聊-Redis实战 操作String


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

String 操作

set(key,value,expiration):给数据库中名称为key的string赋予值value,expiration为过期时间,0表示不过期。

func StringTest(redisdb *redis.Client) {
	err:=redisdb.Set("key1","hello",5 * time.Second).Err()
	if err!=nil {
		fmt.Println(err)
		return
	}

	err=redisdb.Set("key1","hello",0 * time.Second).Err()
	if err!=nil {
		fmt.Println(err)
		return
	}
}

get(key):返回数据库中名称为key的string的value。

func StringTest(redisdb *redis.Client) {
	result,err:=redisdb.Get("key1").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}

getset(key, value):给名称为key的string赋予上一次的value。

func StringTest(redisdb *redis.Client) {
	result,err:=redisdb.GetSet("key1","world").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
-----------------------------------------------------------
返回上一次的值hello,设置key1新值world

mget(key1, key2,…, key N):返回库中多个string的value。

假设redis中有key1:hello1,key2:hello2

func StringTest(redisdb *redis.Client) {
	//获取key1,key2的值
	result,err:=redisdb.MGet("key1","key2").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	for _,value:=range result {
		fmt.Println(value)
	}
}
-------------------------------------------------------
hello1
hello2

setnx(key,value,expiration):将 key 的值设为 value ,当且仅当 key 不存在,expiration为过期时间,0表示不过期。

func StringTest(redisdb *redis.Client) {
	//获取key1,key2的值
	result,err:=redisdb.SetNX("key1","hello3",0).Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
----------------------------------------------------------
false    因为key1已经存在,所以结果返回false

mset(pairs ...interface{}):批量设置多个string的值。

func StringTest(redisdb *redis.Client) {
	result,err:=redisdb.MSet("key1","h1","key2","h2","key3","h3").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}

msetnx(pairs ...interface{})

同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作。

MSETNX 是原子性的,因此它可以用作设置多个不同 key 表示不同字段(field)的唯一性逻辑对象(unique logic object),所有字段要么全被设置,要么全不被设置。

func StringTest(redisdb *redis.Client) {
	result,err:=redisdb.MSetNX("key1","1","key2","2").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}

incr(key):名称为key的string增1操作。

func StringTest(redisdb *redis.Client) {
	//设置key1-1
	redisdb.Set("key1","1",0)
	result,err:=redisdb.Incr("key1").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
-----------------------------------------------
2

incrby(key, integer):名称为key的string增加integer。

func StringTest(redisdb *redis.Client) {
	//设置key1-1
	redisdb.Set("key1","1",0)
	result,err:=redisdb.IncrBy("key1",10).Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
----------------------------------------------------
11    key1变为11

decr(key):名称为key的string减1操作。

func StringTest(redisdb *redis.Client) {
	//设置key1-10
	redisdb.Set("key1","10",0)
	result,err:=redisdb.Decr("key1").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
--------------------------------------------------
9

decrby(key, integer):名称为key的string减少integer。

func StringTest(redisdb *redis.Client) {
	//设置key1-10
	redisdb.Set("key1","10",0)
	result,err:=redisdb.DecrBy("key1",4).Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
----------------------------------------------------
6

append(key, value):名称为key的string的值附加value。

func StringTest(redisdb *redis.Client) {
	redisdb.Set("key1","abc",0)
	result,err:=redisdb.Append("key1","def").Result()
	if err!=nil {
		fmt.Println(err)
		return
	}
	fmt.Println(result)
}
------------------------------------------------------
6    //返回6,append后字符串"abcdef"长度为6

 

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

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢