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
微信扫一扫
支付宝扫一扫