Go开源宝藏Go 语言操作 Redis

Posted 小生凡一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go开源宝藏Go 语言操作 Redis相关的知识,希望对你有一定的参考价值。

目录

1. Redis简介

Redis支持诸如字符串(strings)哈希(hashes)列表(lists)集合(sets)带范围查询的排序集合(sorted sets)位图(bitmaps)hyperloglogs带半径查询流的地理空间索引(geospatial indexes)等数据结构。

方法作用参数
Set添加kv键 string, 值 interface, 过期时间 time.Duration
Get获取值键 string
Del删除kv键 …string
HSet给散列添加kv散列的键, 散列中的键 string, 值 interface
HGet获取散列kv的值散列的键, 散列中的键 string
FlushAll删光
Ping心跳验证
Exists确认键是否存在键 …string
Expire给key设置过期时间键 string, 过期时间 time.Duration
Incr增加键键 string
Close关闭连接
Watch监听键,键出现时执行方法方法 func(*Tx) error, 键 …string
Decr值减一键 string

2. Go语言连接Redis

驱动:github.com/go-redis/redis

  • 定义 redisClient
var Redis *redis.Client
  • 连接
func connect() 
	client := redis.NewClient(&redis.Options
		Addr: "127.0.0.1:6379",
		//Password: "redisPassword",  // 无密码,就这样就好了
		DB: 3,
	)
	_, err := client.Ping().Result() // 心跳验证
	if err != nil 
		log.Println(err)
		panic(err)
	
	Redis = client
	fmt.Println("connect success")

3. String 操作

3.1 Set & Get

Set 源码

可以看到这个set的第一个参数就是key,第二个参数是value,第三个参数就是过期时间。

Get 源码

  • set Key、Value以及过期时间

Key 为Fan,Value为One,过期时间为3s

redisClient.Set("Fan","One",3*time.Second)
  • 3s内打印出来
val := redisClient.Get("Fan")
if val == nil 
	fmt.Println("Value get error")

  • 3s过后
time.Sleep(3*time.Second)
fmt.Println("3s passing")
val = redisClient.Get("Fan")
fmt.Println("name ", val)
  • 结果

第一个是在3s内,是可以打印出来的。

第二个是过了3s的,已经是nil了。

del 操作与 get 操作类似

3.2 Incr & Incrby

3.2.1 Incr 加 1

redisClient.Set("Fan", "1", 3*time.Second)
val := redisClient.Get("Fan")
if val == nil 
	fmt.Println("Value get error")

fmt.Println("Incr before:", val)
num := redisClient.Incr("Fan")
fmt.Println("Incr after:", num)
  • 结果

3.2.2 Incrby 加 val

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

redisClient.Set("One", "1", 3*time.Second)
val := redisClient.Get("One")
if val == nil 
	fmt.Println("Value get error")

fmt.Println("IncrBy before:", val)
num := redisClient.IncrBy("One",2)
fmt.Println("IncrBy after:", num)
  • 结果

3.3 MSet & MGet

设置多个 key value

MSet(key1, value1, key2, value2, key3, value3)

获取多个key

MGet(key1, key2, key3)

redisClient.MSet("Fan","One", "1","2","key1","value1")
val := redisClient.MGet("Fan","1","key1")
if val  == nil 
	fmt.Println("Value get error")

fmt.Println(val)
  • 结果

3.4 总结

做一些总结,就不再过多展示了

操作解释
Set(key, value)给数据库中名称为key的string赋予值valueget(key):返回数据库中名称为key的string的value
GetSet(key, value)给名称为key的string赋予上value的值
Del(Key)删除名称为key的value
MSet(key N, value N)批量设置多个string的值
MGet(key1, key2,…, key N)返回库中多个string的value
SetNX(key, value)添加string,名称为key,值为value
MSetNX(key N, value N)如果所有名称为key i的string都不存在
SetXX(key, time, value)向库中添加string,设定过期时间time
Incr(key)名称为key的string增1操作
Incrby(key, integer)名称为key的string增加integer
Decr(key)名称为key的string减1操作
Decrby(key, integer)名称为key的string减少integer
Append(key, value)名称为key的string的值附加valuesubstr(key, start, end):返回名称为key的string的value的子串

最后提醒一下redis的默认过期时间不过期,所以如果没有设置过期时间的话,要手动del

val := redisClient.MGet("Fan","1","key1")
if val  == nil 
	fmt.Println("Value get error")

fmt.Println(val)
res := redisClient.Del("1")
fmt.Println(res)


已经没有这个value

4. List 操作

4.1 RPush

在名称为key的list尾添加一个值为value的元素

val:=redisClient.RPush("F", []string"One", "Two", "Three","Four")
if val == nil 
	fmt.Println("Value get error")

fmt.Println(val)

4.2 LLen & LRange

  • LLen:返回名称为key的list的长度
  • LRange:返回名称为key的list中start至end之间的元素
val:=redisClient.RPush("F", []string"One", "Two", "Three","Four")
if val == nil 
	fmt.Println("Value get error")

fmt.Println("F List:",val)
val = redisClient.LLen("F")
fmt.Println("len:",val)
res := redisClient.LRange("F",0,2)
fmt.Println("LRange:",res)

4.3 总结

操作名称
RPush(key, value)在名称为key的list尾添加一个值为value的元素
LPush(key, value)在名称为key的list头添加一个值为value的 元素
LLen(key)返回名称为key的list的长度
LRange(key, start, end)返回名称为key的list中start至end之间的元素
LTrim(key, start, end)截取名称为key的list
LIndex(key, index)返回名称为key的list中index位置的元素
LSet(key, index, value)给名称为key的list中index位置的元素赋值
LRem(key, count, value)删除count个key的list中值为value的元素
LPop(key)返回并删除名称为key的list中的首元素
RPop(key)返回并删除名称为key的list中的尾元素
BLPop(key1, key2,… key N, timeout)lpop命令的block版本
BRPop(key1, key2,… key N, timeout)rpop的block版本
RPopLPush(srckey, dstkey)返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部

参考链接

https://blog.csdn.net/weizhong1988/article/details/88048246

以上是关于Go开源宝藏Go 语言操作 Redis的主要内容,如果未能解决你的问题,请参考以下文章

Go开源宝藏JWT-Go 鉴权 | 中间件 (文末送书嗷~)

Go开源宝藏GORM 专场 (含思维导图) | 持续更新

Go开源宝藏Web框架 GIN 专场 (含思维导图) | 持续更新

go语言操作Redis详细步骤

Go语言操作Redis

Go语言操作Redis