redis的使用

redis 和 mysql的對比mysql

Redis爲何會快?
✎ 徹底基於內存
mysql是持久化存儲,存放在磁盤裏面,檢索的話,會涉及到必定的IO,爲了解決這個瓶頸,因而出現了緩存,好比如今用的最多的 memcached(簡稱mc)。
首先,用戶訪問mc,若是未命中,就去訪問mysql,以後像內存和硬盤同樣,把數據複製到mc一部分。Redis是純內存數據庫,相對於讀寫磁盤,
讀寫內存的速度就不是幾倍幾十倍了,通常,hash查找能夠達到每秒百萬次的數量級。git

✎ 多路複用IOgithub

「多路」指的是多個網絡鏈接,「複用」指的是複用同一個線程。採用多路 I/O 複用技術可讓單個線程高效的處理多個鏈接請求(儘可能減小網絡IO的時間消耗)。
能夠直接理解爲:單線程的原子操做,避免上下文切換的時間和性能消耗;加上對內存中數據的處理速度,很天然的提升redis的吞吐量。redis

 

優點:
性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。sql


豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操做。數據庫


原子 – Redis的全部操做都是原子性的,意思就是要麼成功執行要麼失敗徹底不執行。單個操做是原子性的。多個操做也支持事務,即原子性,經過MULTI和EXEC指令包起來。
豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過時等等特性。緩存

 

RDB 詳解
RDB 是 Redis 默認的持久化方案。在指定的時間間隔內,執行指定次數的寫操做,則會將內存中的數據寫入到磁盤中。即在指定目錄下生成一個dump.rdb文件。Redis 重啓會經過加載dump.rdb文件恢復數據。網絡

從配置文件瞭解RDB
打開 redis.conf 文件,找到 SNAPSHOTTING 對應內容
1 RDB核心規則配置(重點)app

save <seconds> <changes>
# save ""
save 900 1
save 300 10
save 60 10000
解說:save <指定時間間隔> <執行指定次數更新操做>,知足條件就將內存中的數據同步到硬盤中。官方出廠配置默認是 900秒內有1個更改,300秒內有10個更改以及60秒內有10000個更改,則將內存中的數據快照寫入磁盤。
若不想用RDB方案,能夠把 save "" 的註釋打開,下面三個註釋。memcached

2 指定本地數據庫文件名,通常採用默認的 dump.rdb

dbfilename dump.rdb
3 指定本地數據庫存放目錄,通常也用默認配置

dir ./
4 默認開啓數據壓縮

rdbcompression yes
解說:配置存儲至本地數據庫時是否壓縮數據,默認爲yes。Redis採用LZF壓縮方式,但佔用了一點CPU的時間。若關閉該選項,但會致使數據庫文件變的巨大。建議開啓。


AOF 詳解
AOF :Redis 默認不開啓。它的出現是爲了彌補RDB的不足(數據的不一致性),因此它採用日誌的形式來記錄每一個寫操做,並追加到文件中。Redis 重啓的會根據日誌文件的內容將寫指令從前到後執行一次以完成數據的恢復工做。

從配置文件瞭解AOF
打開 redis.conf 文件,找到 APPEND ONLY MODE 對應內容
1 redis 默認關閉,開啓須要手動把no改成yes

appendonly yes
2 指定本地數據庫文件名,默認值爲 appendonly.aof

appendfilename "appendonly.aof"
3 指定更新日誌條件

# appendfsync always
appendfsync everysec
# appendfsync no

 

go的redis客戶端主流的就兩種:redigo和goredis

本文主要介紹goredis

首先拉取git倉庫 go get -u github.com/go-redis/redispackage goredisimport (

"github.com/go-redis/redis" "fmt" "slg_game_server/server/global" "slg_game_server/server/util" ) // https://github.com/go-redis/redis var ClientRedis *redis.Client func init() { address := global.MyConfig.Read("redis", "address") password := global.MyConfig.Read("redis", "password") db := global.MyConfig.Read("redis", "db") poolsize := global.MyConfig.Read("redis", "poolsize") ClientRedis = redis.NewClient(&redis.Options{ Addr: address, Password: password, DB: int(util.ToInt(db)), PoolSize: int(util.ToInt(poolsize)), }) pong, err := ClientRedis.Ping().Result() fmt.Println(pong, err) // Output: PONG <nil>
  
fmt.Println("-------------------- redis start success!")

}

 重點講下排行榜

相關文章
相關標籤/搜索