Redis介紹
Redis(Remote Dictionary Server )树灶,即遠(yuǎn)程字典服務(wù)瑟匆,是一個開源的使用C語言編寫芦昔、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型蛛砰、Key-Value[數(shù)據(jù)庫]罐栈,并提供多種語言的API。從2010年3月15日起泥畅,Redis的開發(fā)工作由VMware主持荠诬。從2013年5月開始,Redis的開發(fā)由Pivotal贊助位仁。
Redis支持的數(shù)據(jù)結(jié)構(gòu)
Redis支持諸如字符串(strings)柑贞、哈希(hashes)、列表(lists)聂抢、集合(sets)钧嘶、帶范圍查詢的排序集合(sorted sets)、位圖(bitmaps)琳疏、hyperloglogs有决、帶半徑查詢和流的地理空間索引等數(shù)據(jù)結(jié)構(gòu)(geospatial indexes)。
Redis應(yīng)用場景
- 緩存系統(tǒng)空盼,減輕數(shù)據(jù)庫壓力疮薇,提升訪問速度
- 計數(shù)場景,比如微博我注、抖音中的關(guān)注數(shù)和粉絲數(shù)
- 熱門排行榜按咒,需要排序的場景特別適合使用ZSET
- 利用LIST可以實現(xiàn)隊列的功能
Redis最常使用場景:緩存系統(tǒng)
Golang操作Redis
這里使用第三方庫https://github.com/go-redis/redis連接Redis并進行操作。使用以下命令下載安裝:
go get -u github.com/go-redis/redis
連接
這里分三種方式但骨,普通單機節(jié)點連接励七,哨兵模式連接,集群連接
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