| Redis的安装 |
| 1、下载和解包 cd /usr/local/ wget http://download.redis.io/releases/redis-3.2.1.tar.gz tar -zxvf /redis-3.2.1.tar.gz |
| 2.如果遇到没有安装GCC |
|
|
| 3.安装GCC插件 |
| yum -y install gcc automake autoconf libtool mak |
|
|
| 4.编译和安装 |
| cd redis-3.2.1 make && make install |
| 5.启动Redis |
| redis-server ../redis.conf & |
| 6.链接redis |
| /usr/local/redis-3.2.1/src/redis-cli |
| 7.Redis设置日志 |
| # Specify the log file name. Also the empty string can be used to force # Redis to log on the standard output. Note that if you use standard # output for logging but daemonize, logs will be sent to /dev/null logfile "/usr/local/redis-3.2.1/redis.log" loglevel notice #定义日志级别。 # 可以是下面的这些值: # debug(记录大量日志信息,适用于开发、测试阶段) # verbose(较多日志信息) # notice(适量日志信息,使用于生产环境) # warning(仅有部分重要、关键信息才会被记录) |
| 8.Redis的持久化(RDB&AOF) |
| 为了能够重用Redis数据,或者防止系统故障,我们需要将Redis中的数据写入到磁盘空间中,即持久化。 Redis提供了两种不同的持久化方法可以将数据存储在磁盘中,一种叫快照(RDB),另一种叫只追加文件(AOF)。 |
| 8.1 RDB方式 |
| Redis通过创建快照的方式获取某一时刻Redis中所有数据的副本。用户可以针对该快照进行各种操作,比如:将快照复制到其他服务器从而完成Redis的主从复制,或者将快照留在原地,服务器重启的时候重用数据。 根据配置文件,可以手动设置Redis快照名及路径: |
| # RDB文件名 dbfilename "dump.rdb" # RDB文件和AOF文件路径 dir "/usr/local/var/db/redis" |
| Redis创建快照主要有以下几种方式: (1)客户端直接通过命令BGSAVE或者SAVE来创建一个快照 |
| BGSAVE是通过redis调用fork来创建一个子进程,然后子进程负责将快照写入磁盘,而父进程仍然继续处理命令。 SAVE是在没有足够的内存空间去执行BGSAVE或者无所谓等待的时候。执行SAVE命令过程中,redis不在响应任何其他命令。 |
| (2)在redis.conf中设置save配置选项(应用开发中比较常用) |
| # 当在规定的时间内,Redis发生了写操作的个数满足条件,会触发发生BGSAVE命令。 # save <seconds> <changes> # 当用户设置了多个save的选项配置,只要其中任一条满足,Redis都会触发一次BGSAVE操作,比如:900秒之内至少一次写操作、300秒之内至少发生10次写操作、60秒之内发生至少10000次写操作都会触发发生快照操作 save 900 1 save 300 10 save 60 10000 |
| (3) 当Redis通过shutdown命令关闭服务器请求时,会执行SAVE命令创建一个快照,如果使用kill -9 PID将不会创建快照。 |
| (4) 注意点 |
| 在只使用快照持久化来保存数据时,如果系统崩溃或者强杀,用户将会丢失最近一次生成快照之后更改的所有数据。因此如果应用程序对于两次快照间丢失的数据可接受,利用快照就是一个很好的方式,但是往往一些系统对于丢失几分钟的数据都不可接受,比如高频的电子商务系统。 此外,如果Redis存储的数据量长达数十G的时候,没执行一次快照需要花费大量时间,严重影响到服务器的性能。因此,针对上述的问题,可以使用AOF方式来持久化数据。 |
| 8.2 AOF方式(52 1月 28 11:25 appendonly.aof) |
| 在执行写命令时,AOF持久化会将执行的写命令也写到AOF文件的末尾,以此来记录数据的变化。换句话说,将AOF文件中包含的内容重新执行一遍,就可以回复AOF文件所记录的数据集。 在Redis.conf配置中设置如下: |
| # redis默认关闭AOF机制,可以将no改成yes实现AOF持久化 appendonly no # AOF文件 appendfilename "appendonly.aof" # AOF持久化同步频率,always表示每个Redis写命令都要同步fsync写入到磁盘中,但是这种方式会严重降低redis的速度;everysec表示每秒执行一次同步fsync,显示的将多个写命令同步到磁盘中;no表示让操作系统来决定应该何时进行同步fsync,Linux系统往往可能30秒才会执行一次 # appendfsync always appendfsync everysec # appendfsync no # 在日志进行BGREWRITEAOF时,如果设置为yes表示新写操作不进行同步fsync,只是暂存在缓冲区里,避免造成磁盘IO操作冲突,等重写完成后在写入。redis中默认为no no-appendfsync-on-rewrite no # 当前AOF文件大小是上次日志重写时的AOF文件大小两倍时,发生BGREWRITEAOF操作。 auto-aof-rewrite-percentage 100 #当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF。 auto-aof-rewrite-min-size 64mb # Redis再恢复时,忽略最后一条可能存在问题的指令(因为最后一条指令可能存在问题,比如写一半时突然断电了) aof-load-truncated yes |
| RDB与AOF同时开启 默认先加载AOF的配置文件,因此需要根据具体情况使用,4.0+的可以使用RDB-AOF混合持久化格式 |
| 8.3 RDB和AOF的混合(redis4.0之RDB-AOF混合持久化) |
| redis有两种持久化的方式——RDB和AOF其中RDB是一份内存快照AOF则为可回放的命令日志他们两个各有特点也相互独立。4.0开始允许使用RDB-AOF混合持久化的方式结合了两者的优点通过aof-use-rdb-preamble配置项可以打开混合开关。 #Redis4.0新增RDB-AOF混合持久化格式,在开启了这个功能之后,AOF重写产生的文件将同时包含RDB格式的内容和AOF格式的内容,其中RDB格式的内容用于记录已有的数据,而AOF格式的内存则用于记录最近发生了变化的数据,这样Redis就可以同时兼有RDB持久化和AOF持久化的优点(既能够快速地生成重写文件,也能够在出现问题时,快速地载入数据)。 aof-use-rdb-preamble no |
| 修改配置文件里面的 aof-use-rdb-preamble yes |
| 9.问题:linux redis-cli 根据端口号进入交互页面问题 |
| 如果修改了端口号,执行redis-cli的时候默认还是6379 |
| 可以使用redis-cli -h 127.0.0.1 -p 6380执行 |
| redis.conf 配置项说明如下: |
| 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 |
| daemonize no |
| 2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定 |
| pidfile /var/run/redis.pid |
| 3. 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字 |
| port 6379 |
| 4. 绑定的主机地址 |
| bind 127.0.0.1 |
| 5.当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能 |
| timeout 300 |
| 6. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose |
| loglevel verbose |
| 7. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null |
| logfile stdout |
| 8. 设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id |
| databases 16 |
| 9. 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合 |
| save <seconds> <changes> |
| Redis默认配置文件中提供了三个条件: |
| save 900 1 |
| save 300 10 |
| save 60 10000 |
| 分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。 |
| 10. 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大 |
| rdbcompression yes |
| 11. 指定本地数据库文件名,默认值为dump.rdb |
| dbfilename dump.rdb |
| 12. 指定本地数据库存放目录 |
| dir ./ |
| 13. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步 |
| slaveof <masterip> <masterport> |
| 14. 当master服务设置了密码保护时,slav服务连接master的密码 |
| masterauth <master-password> |
| 15. 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭 |
| requirepass foobared |
| 16. 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息 |
| maxclients 128 |
| 17. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区 |
| maxmemory <bytes> |
| 18. 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no |
| appendonly no |
| 19. 指定更新日志文件名,默认为appendonly.aof |
| appendfilename appendonly.aof |
| 20. 指定更新日志条件,共有3个可选值:? |
| no:表示等操作系统进行数据缓存同步到磁盘(快)? |
| always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)? |
| everysec:表示每秒同步一次(折衷,默认值) |
| appendfsync everysec |
| 21. 指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析Redis的VM机制) |
| vm-enabled no |
| 22. 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享 |
| vm-swap-file /tmp/redis.swap |
| 23. 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据 就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0 |
| vm-max-memory 0 |
| 24. Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的 数据大小来设定的,作者建议如果存储很多小对象,page大小最好设置为32或者64bytes;如果存储很大大对象,则可以使用更大的page,如果不 确定,就使用默认值 |
| vm-page-size 32 |
| 25. 设置swap文件中的page数量,由于页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,,在磁盘上每8个pages将消耗1byte的内存。 |
| vm-pages 134217728 |
| 26. 设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为4 |
| vm-max-threads 4 |
| 27. 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启 |
| glueoutputbuf yes |
| 28. 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法 |
| hash-max-zipmap-entries 64 |
| hash-max-zipmap-value 512 |
| 29. 指定是否**重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍) |
| activerehashing yes |
| 30. 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件 |
| include /path/to/local.conf |
相关文章: