Golang操作Redis
2023-09-11 14:14:56 时间
redis 使用
使用第三方开源的 redis库:
github.com/garyburd/redigo/redis
。
命令行输入 :
PS E:\go_test> go get github.com/garyburd/redigo/redis
go: downloading github.com/garyburd/redigo v1.6.4
go: module github.com/garyburd/redigo is deprecated: Use github.com/gomodule/redigo instead.
go: added github.com/garyburd/redigo v1.6.4
PS E:\go_test>
链接 Redis
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
c, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
fmt.Println("redis conn success")
defer c.Close()
}
PS E:\go_test> go run .\main.go
redis conn success
PS E:\go_test>
String 类型 Set、Get 操作
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
// redis.DialDatabase(1),//dialOption参数可以配置选择数据库、连接密码、心跳检测等等
c, err := redis.Dial("tcp", "localhost:6379", redis.DialDatabase(1), redis.DialPassword("123456"))
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
defer c.Close()
_, err = c.Do("Set", "abc", 100)
if err != nil {
fmt.Println(err)
return
}
r, err := redis.Int(c.Do("Get", "abc"))
if err != nil {
fmt.Println("get abc failed,", err)
return
}
fmt.Println(r)
}
运行结果:
PS E:\go_test> go run .\main.go
100
PS E:\go_test>
String 批量操作
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
c, err := redis.Dial("tcp", "localhost:6379", redis.DialDatabase(1), redis.DialPassword("123456"))
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
defer c.Close()
_, err = c.Do("MSet", "abc", 100, "efg", 300)
if err != nil {
fmt.Println(err)
return
}
r, err := redis.Ints(c.Do("MGet", "abc", "efg"))
if err != nil {
fmt.Println("get abc failed,", err)
return
}
for _, v := range r {
fmt.Println(v)
}
}
PS E:\go_test> go run .\main.go
100
300
PS E:\go_test>
设置过期时间
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
c, err := redis.Dial("tcp", "localhost:6379", redis.DialDatabase(1), redis.DialPassword("123456"))
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
defer c.Close()
_, err = c.Do("expire", "abc", 10)
if err != nil {
fmt.Println(err)
return
}
}
List 队列操作
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
c, err := redis.Dial("tcp", "localhost:6379", redis.DialDatabase(1), redis.DialPassword("123456"))
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
defer c.Close()
_, err = c.Do("lpush", "book_list", "abc", "ceg", 300)
if err != nil {
fmt.Println(err)
return
}
r, err := redis.String(c.Do("lpop", "book_list"))
if err != nil {
fmt.Println("get abc failed,", err)
return
}
fmt.Println(r)
}
运行结果:
PS E:\go_test> go run .\main.go
300
PS E:\go_test>
Hash 表
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
c, err := redis.Dial("tcp", "localhost:6379", redis.DialDatabase(1), redis.DialPassword("123456"))
if err != nil {
fmt.Println("conn redis failed,", err)
return
}
defer c.Close()
_, err = c.Do("HSet", "books", "abc", 100)
if err != nil {
fmt.Println(err)
return
}
r, err := redis.Int(c.Do("HGet", "books", "abc"))
if err != nil {
fmt.Println("get abc failed,", err)
return
}
fmt.Println(r)
}
PS E:\go_test> go run .\main.go
100
PS E:\go_test>
Redis 连接池
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
var pool *redis.Pool //创建redis连接池
func init() {
pool = &redis.Pool{ //实例化一个连接池
MaxIdle: 16, //最初的连接数量
// MaxActive:1000000, //最大连接数量
MaxActive: 0, //连接池最大连接数量,不确定可以用0(0表示自动定义),按需分配
IdleTimeout: 300, //连接关闭时间 300秒 (300秒不使用自动关闭)
Dial: func() (redis.Conn, error) { //要连接的redis数据库
return redis.Dial("tcp", "localhost:6379", redis.DialDatabase(1), redis.DialPassword("123456"))
},
}
}
func main() {
c := pool.Get() //从连接池,取一个链接
defer c.Close() //函数运行结束 ,把连接放回连接池
_, err := c.Do("Set", "abc", 200)
if err != nil {
fmt.Println(err)
return
}
r, err := redis.Int(c.Do("Get", "abc"))
if err != nil {
fmt.Println("get abc faild :", err)
return
}
fmt.Println(r)
pool.Close() //关闭连接池
}
PS E:\go_test> go run .\main.go
200
PS E:\go_test>
相关文章
- Redis启动方式
- Redis中常用命令
- redis的list类型以及其操作
- Redis学习(2)-redis安装
- Redis的Python客户端redis-py说明文档(转)
- redis 列出所有的键
- spring boot单元测试之十:用embedded-redis库做Redis的mock(spring boot 2.4.3)
- Docker搭建Redis高可用集群(基于redis-sentinel)
- Redis缓存穿透、缓存雪崩、redis并发问题 并发竞争key的解决方案 (阿里)
- Atitit redis使用 attilax 艾提拉总结 1.1. Redis默认有16个库,默认连接的是 index=0 的那一个。解决与原来不方便查询查看的问题1 1.2. redis不是现
- 〖Python 数据库开发实战 - Python与Redis交互篇⑦〗- 利用 redis-py 实现缓存学生考试信息
- 使用高斯Redis实现二级索引
- 深入理解 Redis Template及4种序列化方式__spring boot整合redis实现RedisTemplate三分钟快速入门
- 【编程实践】Golang 操作 Redis 代码实战
- 【redis】Redis缓存失效、雪崩、穿透、击穿、并发等案例分析难题解决方案
- 【redis】Redis为什么能抗住10万并发?
- 基于SpringCloud+redis+Springsecurity实现的微信小程序外卖系统
- 【redis源码学习】从源码角度看主从复制(3):全量同步 && 部分同步