Redis缓存
2018-10-24 本文已影响11人
_Haimei
- 作用: 提高网站效率,降低数据库的读写次数,引入缓存技术
- 定义:缓存就是中内存中存储数据备份,当数据没有发生本质改变的时候不去数据库中查询,而是去内存中取数据
- 分类:
- 页面缓存
- 第一次从数据库读取,然后生成一个静态页面,以后所有的读取,都只加载这个静态页面
- 数据缓存
- 一个页面中有好几种需要从不同的缓存中读取数据的模块,不适用页面缓存
- 页面缓存
- Redis缓存
- 优点:
- 丰富的数据结构
- 持久化:一边运行,一边将数据备份到硬盘,防止断电等意外情况
- 快照(snapshotting) 方式:
- 默认持久化方式,将内存中的数据以快照的方式写入到二进制文件中,文件名为dump.rdb,可以修改
- save 100 1:如果100秒内超过1个key被修改,则发起快照保存
- 步骤:
- redis调用fork,包含了子进程和父进程
- 父进程处理client请求,子进程负责将内存内容写入到临时文件
- 当子进程将快照写入临时文件完毕后,用临时文件替换原来的快照文件,然后子进程退出(每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步变更数据。如果数据量大的话,而且写操作比较多,必然会引起大量的磁盘 io 操作,可能会严重影响性能)
- 默认持久化方式,将内存中的数据以快照的方式写入到二进制文件中,文件名为dump.rdb,可以修改
- AOF(Append-only file)方式
- 该模式下,redis会将每个收到的写命令通过write函数追加到文件中(appendonly.aof),当 redis 重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容
- 由于 os 会在内核中缓存 write 做的修改,所以可能不是立即写到磁盘上。这样 aof 方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉 redis 我们想要通过 fsync 函数强制 os 写入到磁盘的时机。有三种方式如下(默认是:每秒 fsync 一次)
- appendonly yes //启用 aof 持久化方式
- appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证完全的持久化
- appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
- appendfsync no //完全依赖 os,性能最好,持久化没保证
- 问题:持久化文件会越来越大,使用bgrewriteaof命令来压缩持久化文件,
- 快照(snapshotting) 方式:
- 与memcache比较:
- redis支持简单的k/v类型的数据,还支持list,set,zset,hash等类型
- redis支持主从模式应用
- redis支持数据持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
- redis单个value的最大限制是1GB,memcached是1MB
- 优点: