redis介绍
redis,底层由3万多行C语言代码实现,全名“Remote DIctionary Server”,名字就可以看出来,redis是一个key-value键值对的数据库存储系统。Redis中的key只能是string字符串,value可以是:string(字符串)、hash(哈希)、list(列表)、set(集合)、sorted set(有序集合),这五种当中的一种。
redis特点
- 单进程单线程高性能服务器,保证了操作的原子性,数据的安全性
- 可以达到10w的qps
- 支持publish/subscribe(发布和订阅)、通知、key过期等特性,支持异机主从复制
Linux下安装和启动Redis
安装
wget -q http://download.redis.io/releases/redis-6.0.6.tar.gz
tar xf redis-2.8.9.tar -C ~/
cd ~/redis-6.0.6
make MALLOC=jemalloc
make PREFIX=~/redis install
LANG=en
安装完成之后在~/redis/bin目录下会生成5个可执行文件
redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump
redis-server
redis-cli
redis-benchmark
redis-check-aof
redis-check-dump
配置环境变量,以便在任何位置都可以调用~/redis/bin下的5个功能服务,例如下一步的启动redis
vim ~/.bashrc
export PATH="$PATH:$HOME/redis/bin"
启动
下载的redis-6.0.6目录下有一个默认的配置文件redis.conf ,我们可以用他来启动redis,当然通常我们是根据自己项目的配置文件来启动
redis-server redis.conf &
ps aux | grep redis
配置文件
Redis的配置文件比较重要,这里简单介绍一下
NETWORK
- bind默认IP为本地回环地址(127.0.0.1),只能通过本主机访问Redis,其他远程主机无法连接,如果bind为空,则接受所有连接。
- 默认port为6379,由于Redis是单线程模式,因此一台主机开多个Redis进程时会修改端口
- timeout:单位为秒的客户端超时时间,规定时间内客户端没有发任何指令,Redis服务将关闭连接,默认为0表示不关闭
SNAPSHOTTING
rdb持久化
- save 300 10 : 表示300秒内至少有10个数据发生变化则将数据保存到磁盘,如果只是使用Redis的缓存功能则直接将save注释掉
- stop-writes-on-bgsave-error:当落盘数据时候后,Redis是否停止接收数据
- rdbcompression:落盘的数据是否启动压缩,启动的话会消耗CPU,但落盘的快照数据会比较小
- dbfilename:快照的文件名
- dir:快照文件的存放位置(目录)
APPEND ONLY MODE
aof持久化
- appendonly: 默认为no,只开启rdb。改为yes时,rdb和aof同时开启。两者都存在时,Redis启动时会优先从aof文件读取数据到内存,否则才会到rdb读取。
- appendfsync:aof持久化配置:默认为everysec,表示每秒执行一次fsync。no表示不执行fsync,由操作系统保证数据到磁盘,速度最快。always表示每次写入都执行fsync,保证数据写入到磁盘。
两种持久化存储机制
Snapshot(rdb)和AOF,两种机制都是先将数据存储到内存
Snapshot
先将数据存储到内存,然后数据满足redis.conf配置文件中的save条件时,机会触发一次dump操作,将变化的数据一次性写到rdb文件中
AOF
先将数据存储到内存,在存储的过程中会调用fsync来讲本次写操作记录到日志文件中,调用fsync的频率为配置文件中的appendfsync条件决定。
性能
rdb性能高于aof:
- rdb采用二进制方式存储数据,所以数据文件比较小,加载速度快
- 是按照配置文件中save条件存储,每次都是整合了大量数据批量存储,写入的效率很好。而aof是根据appendfsync条件存储,一般都是实时存储,存储频率较高,效率偏低。
安全性
aof安全性高于rdb
- rdb是积累大量数据批量存储,当Redis意外奔溃时,积累的数据会丢失。aof策略可以做到最少的数据丢失
AOF的Rewrite功能
- aof是按照记录日志的方式工作的,那必然会导致记录的日志文件渐渐庞大,Redis会根据配置文件中的条件合理的触发Rewrite操作。Rewrite是将日志文件重新写到另一个新的日志文件中,但是对于同一个key的多次操作,只会保留记录其最后的值,以此来缩小日志文件的大小
Rewrite两个配置条件
两个条件同时满足时才触发
- auto-aof-rewrite-percentage 100 (当前写入日志文件的大小占到初始日志文件大小的某个百分比时触发Rewrite,这里是100%的意思)
- auto-aof-rewrite-min-size 64mb (本次Rewrite最小的写入数据量)
|