Redis介绍
Redis是一个开源的内存数据库,Redis提供了多种不同类型的数据结构,很多业务场景下的问题都可以很自然地映射到这些数据结构上。 除此之外,通过复制、持久化和客户端分片等特性,我们可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。
Redis支持的数据结构
Redis是一个基于键值对存储的NoSQL数据库,Redis支持诸如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、带范围查询的排序集合(sorted sets)、位图(bitmaps)、hyperloglogs、带半径查询和流的地理空间索引等数据结构(geospatial indexes)。Redis拥有高性能和高可用性,因此可以应用于多种场景,如缓存、消息队列、计数器、分布式锁等。
Redis应用场景
缓存系统,减轻主数据库(MySQL)的压力。 计数场景,比如微博、抖音中的关注数和粉丝数。 热门排行榜,需要排序的场景特别适合使用ZSET。 利用LIST可以实现队列的功能。
准备Redis环境
在 Go 语言中,有许多 Redis 客户端库可用于连接和与 Redis 服务器通信。这里我们选用最受欢迎的 Go Redis 客户端库之一 - go-redis。
下载和安装 go-redis:
go get github.com/go-redis/redis
普通连接
// 声明一个全局的rdb变量
var rdb *redis.Client
// 初始化连接
func initClient() (err error) {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
_, err = rdb.Ping().Result()
if err != nil {
return err
}
return nil
}
连接Redis哨兵模式
func initClient()(err error){
rdb := redis.NewFailoverClient(&redis.FailoverOptions{
MasterName: "master",
SentinelAddrs: []string{"x.x.x.x:26379", "xx.xx.xx.xx:26379", "xxx.xxx.xxx.xxx:26379"},
})
_, err = rdb.Ping().Result()
if err != nil {
return err
}
return nil
}
连接Redis集群
func initClient()(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 := rdb.Set("score", 100, 0).Err()
if err != nil {
fmt.Printf("set score failed, err:%v\n", err)
return
}
val, err := rdb.Get("score").Result()
if err != nil {
fmt.Printf("get score failed, err:%v\n", err)
return
}
fmt.Println("score", val)
val2, err := rdb.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)
}
}
zset示例
func redisExample() {
err := rdb.Set("score", 100, 0).Err()
if err != nil {
fmt.Printf("set score failed, err:%v\n", err)
return
}
val, err := rdb.Get("score").Result()
if err != nil {
fmt.Printf("get score failed, err:%v\n", err)
return
}
fmt.Println("score", val)
val2, err := rdb.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)
}
}
其他系统安装Redis
在使用Redis之前,我们需要先进行安装。Redis的安装可以通过官网下载、使用包管理器进行安装,或者使用Docker进行部署。这里介绍使用包管理器进行安装的方法。
- Ubuntu或Debian系统
我们可以在Terminal中运行以下命令来安装Redis:
sudo apt-get update
sudo apt-get install redis-server
- CentOS或RHEL系统
我们可以在Terminal中运行以下命令来安装Redis:
sudo yum update
sudo yum install redis
- Mac系统
我们可以使用Homebrew来安装Redis:
brew install redis
- Windows系统
我们可以从官网下载Redis的Windows版本并进行安装。