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!")

}

 重点讲下排行榜

相关文章
相关标签/搜索