redis的使用

redis 和 mysql的对比

Redis为什么会快?
✎ 完全基于内存
mysql是持久化存储,存放在磁盘里面,检索的话,会涉及到一定的IO,为了解决这个瓶颈,于是出现了缓存,比如现在用的最多的 memcached(简称mc)。
首先,用户访问mc,如果未命中,就去访问mysql,之后像内存和硬盘一样,把数据复制到mc一部分。Redis是纯内存数据库,相对于读写磁盘,
读写内存的速度就不是几倍几十倍了,一般,hash查找可以达到每秒百万次的数量级。

✎ 多路复用IO

“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗)。
可以直接理解为:单线程的原子操作,避免上下文切换的时间和性能消耗;加上对内存中数据的处理速度,很自然的提高redis的吞吐量。

 

优势:
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。


丰富的数据类型 – 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核心规则配置(重点)

save <seconds> <changes>
# save ""
save 900 1
save 300 10
save 60 10000
解说:save <指定时间间隔> <执行指定次数更新操作>,满足条件就将内存中的数据同步到硬盘中。官方出厂配置默认是 900秒内有1个更改,300秒内有10个更改以及60秒内有10000个更改,则将内存中的数据快照写入磁盘。
若不想用RDB方案,可以把 save "" 的注释打开,下面三个注释。

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

}

 重点讲下排行榜

posted @ 2019-04-03 17:02  天之草  阅读(282)  评论(0编辑  收藏  举报