Redis是一种内存非关系型数据存储技术,类似于Memcached,但更加多功能。Go-Redis是一个开源的、支持go语言的Redis客户端,它实现了了REdis协议,并提供了简单易用的API接口。在本教程中,我们将探讨从基础到高级的Go-Redis用法。
一、连接Redis
在使用Go-Redis操作Redis之前,我们需要先建立一个连接。连接可以通过传递参数来进行配置,例如IP地址、端口和连接超时时间。
import "github.com/go-redis/redis" func main() { client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password set DB: 0, // use default DB }) }
连接设置完成后,一个Redis客户端实例就可以被创建。接下来,我们需要验证连接是否正确建立。
pong, err := client.Ping().Result() fmt.Println(pong, err)
如果连接成功,’PONG’会被返回。如果连接失败,则会反馈错误信息。
二、字符串操作
Redis将所有数据视为字符串。在Go-Redis中,我们可以使用SET命令来设置一个键值对。
err := client.Set("key", "value", 0).Err() if err != nil { panic(err) }
我们可以使用GET命令获取设置的键值对。
val, err := client.Get("key").Result() if err != nil { panic(err) } fmt.Println("value", val)
我们还可以设置键值对的过期时间。
err := client.Set("key", "value", 10*time.Second).Err() if err != nil { panic(err) }
在10秒后,键值对将自动从Redis中删除。你可以通过TTL命令查询过期时间。
ttl, err := client.TTL("key").Result() if err != nil { panic(err) } fmt.Println("ttl", ttl)
三、列表操作
Redis的列表是一个字符串数组,我们可以在列表的开头或结尾添加数据。我们可以使用LPUSH或RPUSH命令将数据添加到列表中,通过LLEN命令获取列表长度。
err := client.LPush("list", "item1").Err() if err != nil { panic(err) } err = client.RPush("list", "item2").Err() if err != nil { panic(err) } listLen, err := client.LLen("list").Result() if err != nil { panic(err) } fmt.Println("list length", listLen)
我们可以通过LINDEX来获取列表中指定位置的元素。
val, err := client.LIndex("list", 0).Result() if err != nil { panic(err) } fmt.Println("List item 0", val) val, err = client.LIndex("list", 1).Result() if err != nil { panic(err) } fmt.Println("List item 1", val)
我们也可以使用LPOP和RPOP命令来删除并弹出列表中的元素。
val, err := client.LPop("list").Result() if err != nil { panic(err) } fmt.Println("Deleted item", val) val, err = client.RPop("list").Result() if err != nil { panic(err) } fmt.Println("Deleted item", val) listLen, err = client.LLen("list").Result() if err != nil { panic(err) } fmt.Println("list length", listLen)
四、哈希操作
Redis的哈希是一个字符串->字符串的映射表,我们可以将一些相关信息存储在同一个哈希中。我们可以使用HSET命令来设置哈希值。
err := client.HSet("user_12345", "name", "John").Err() if err != nil { panic(err) }
我们可以使用HGET命令来获取哈希值。
name, err := client.HGet("user_12345", "name").Result() if err != nil { panic(err) } fmt.Println("User name", name)
我们也可以将多个值设置到哈希表中。
fields := map[string]string{ "username": "john123", "email": "john@example.com", "phone": "123456789", } err := client.HMSet("user_12345", fields).Err() if err != nil { panic(err) } email, err := client.HGet("user_12345", "email").Result() if err != nil { panic(err) } fmt.Println("User email", email)
我们还可以使用HDEL命令来删除哈希中的指定键。
err := client.HDel("user_12345", "phone").Err() if err != nil { panic(err) }
五、执行脚本
Redis提供了一个内置的脚本引擎,可以使用LUA语言编写脚本。
我们可以使用EVAL命令来执行脚本,Go-Redis提供了一个Script结构体,可以用于预编译和缓存脚本。
script := redis.NewScript(` return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]} `) result, err := script.Run(client, []string{"key1", "key2"}, "first", "second").Result() if err != nil { panic(err) } fmt.Println(result)
六、总结
在本教程中,我们学习了Go-Redis的基本操作,包括建立连接、字符串操作、列表操作、哈希操作和执行脚本等。Go-Redis是一个简单易用的Redis客户端,它提供了丰富的API接口和灵活的配置。它对于处理大量数据和高并发场景来说非常有用。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/288642.html