Redis介绍
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value[数据库],并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
Redis支持的数据结构
Redis支持诸如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、带范围查询的排序集合(sorted sets)、位图(bitmaps)、hyperloglogs、带半径查询和流的地理空间索引等数据结构(geospatial indexes)。
Redis应用场景
- 缓存系统,减轻数据库压力,提升访问速度
- 计数场景,比如微博、抖音中的关注数和粉丝数
- 热门排行榜,需要排序的场景特别适合使用ZSET
- 利用LIST可以实现队列的功能
Redis最常使用场景:缓存系统
Golang操作Redis
这里使用第三方库https://github.com/go-redis/redis连接Redis并进行操作。使用以下命令下载安装:
go get -u github.com/go-redis/redis
连接
这里分三种方式,普通单机节点连接,哨兵模式连接,集群连接
import (
"fmt"
"github.com/go-redis/redis"
)
// 声明一个全局的reidsclient变量
var redisClient *redis.Client
//初始化连接
//普通连接
func initClient() (err error) {
redisClient = redis.NewClient(&redis.Options{
Addr: "10.4.7.11:6379",
Password: "", // no password set
DB: 0, // use default DB
})
_, err = redisClient.Ping().Result()
if err != nil {
return err
}
return nil
}
// 哨兵连接
func initClientSentinel()(err error){
redisClient = redis.NewFailoverClient(&redis.FailoverOptions{
MasterName: "master",
SentinelAddrs: []string{"x.x.x.x:26379", "xx.xx.xx.xx:26379", "xxx.xxx.xxx.xxx:26379"},
})
_, err = redisClient.Ping().Result()
if err != nil {
return err
}
return nil
}
// 集群连接
func initClientCluster()(err error){
rdb := redis.NewClusterClient(&redis.ClusterOptions{
Addrs: []string{":7000", ":7001", ":7002", ":7003", ":7004", ":7005"},
})
_, err = rdb.Ping().Result()
if err != nil {
return err
}
return nil
}
set/get例子
func redisExample() {
err := redisClient.Set("score", 100, 0).Err()
if err != nil {
fmt.Printf("set score failed, err:%v\n", err)
return
}
val, err := redisClient.Get("score").Result()
if err != nil {
fmt.Printf("get score failed, err:%v\n", err)
return
}
fmt.Println("score", val)
val2, err := redisClient.Get("name").Result()
if err == redis.Nil {
fmt.Println("name does not exist")
} else if err != nil {
fmt.Printf("get name failed, err:%v\n", err)
return
} else {
fmt.Println("name", val2)
}
}
func main() {
err := initClient()
if err !=nil {
fmt.Printf("init redis client failed, err: %v", err)
}
redisExample()
}
score 100
name does not exist