redis的命令这里就不再赘述,请移驾Google或者redis官网查看,这里记录的其实是我最近看的东西,工作的使用都会,但是底层的实现,我一直都没仔细研究过,so today i will show you what i learned recently
1.缓存,相信目前都是使用redis或者mongoDB来做数据的缓存,而我们项目使用的是redis缓存一些系统配置信息,而不用读取数据库,每次读取数据库太浪费资源,但是在每次系统重启时,这些数据会清空
2.持久化数据,见字知意,它提供了两种持久化方式
(1 RDB:
RDB其实是一种快照持久化方法,将某一时刻的数据持久化到磁盘,RDB持久化的过程其实是会将数据都写入到一个临时文件,但写入完毕,会将这个临时文件替换上次持久化好的文件,它可以设置多长时间进行备份一次,适合备份,全量复制以及灾难恢复的场景,但是RDB方式没有AOF获取数据实时,且每次都要执行fork创建一个子进程,这种重量级的操作,频繁的话成本会很高,(二进制文件),定时保存在redis服务down时,会丢失这部分的数据
(2 AOF方式:(追加)
可配置fsync策略:无fsync,每秒fsync,每次写的时候fsync.使用默认的每秒fsync策略,Redis的性能依然很好(fsync是由后台线程进行处理的,主线程会尽力处理客户端请求),一旦出现故障,你最多丢失1秒的数据,它其实是追加(append)、文件写入、文件同步(sync)三个步骤完成数据持久化的,且AOF有序地保存了对数据库执行的所有写入操作, 保存的文件是以Redis 协议的格式保存的,易读性高,但是相同的对于相同的数据集来说,AOF保存的文件要大于RDB保存的文件,所以在数据恢复时比较耗时
配置:
(1 RDB:
redis.conf
save 900 1 每900秒之内,如果超过1个key被修改,则发起快照保存
(2 AOF
appendonly yes
go中使用reids
//连接redis,使用redis连接池,同理在使用http连接时,也适用池子而不是每次都去连接,避免每次发起请求连接耗时
AdjustConnPool = &redis.Pool{MaxIdle: 2000, MaxActive: 1000, IdleTimeout: 180 * time.Second, Dial: func() (redis.Conn, error) { c, err := redis.Dial("tcp", addr) if err != nil { return c, err } if passwd == "" { return c, nil } _, err = c.Do("AUTH", passwd) if err != nil { return c, err } return c, nil },}
//我们还可以对redis进行监听
psc := &redis.PubSubConn{Conn: c}
if err := psc.PSubscribe(pattern...); err != nil {
glog.Errorln("redis subscribe error", err)
return
}
go func() {
for {
msgChan <- psc.Receive()
} }()
for {
var ticker = time.NewTicker(time.Minute)
select {
case msg := <-msgChan:
switch n := msg.(type) {
case redis.Message: //订阅的消息通知。我们所需要的数据
case redis.Subscription: //訂閱表示訂閱或取消訂閱通知
case error: //redis PubSubConn receive an error
case <-ticker.C: // 超时处理
}
当然redis还有其他很多知识点,我只是写了一下我最近整理的一些,今天在和一个做电商平台的小伙伴聊的时候,在我们提交订单的时候其实就是对redis的key做了一个有效时间的设置,时间到了,订单就会自动取消 ---------滴滴滴滴,写的原因是我没用过给key设置有效时间所以在这备注了下
今日推荐兽爷的一篇文章 yeah =。=
https://mp.weixin.qq.com/s/ZBbkPFU8iyI72vb3n799bA
网友评论